Index: trunk/src/obj_subc.c =================================================================== --- trunk/src/obj_subc.c (revision 28829) +++ trunk/src/obj_subc.c (revision 28830) @@ -99,8 +99,17 @@ if (inv != NULL) pcb_message(PCB_MSG_ERROR, "Invalid character '%c' in subc refdes '%s'\n", *inv, sc->refdes); } - else if (strcmp(name, "extobj") == 0) { - sc->extobj = value; + else if (strncmp(name, "extobj", 6) == 0) { + const char *arg = name+6; + if (*arg != '\0') { + if ((arg[0] == ':') && (arg[1] == ':')) { + arg += 2; + if (strcmp(arg, "role") == 0) + sc->extobj_role = value; + } + } + else + sc->extobj = value; } pcb_text_dyn_bbox_update(sc->data); } Index: trunk/src/obj_subc.h =================================================================== --- trunk/src/obj_subc.h (revision 28829) +++ trunk/src/obj_subc.h (revision 28830) @@ -45,7 +45,7 @@ struct pcb_subc_s { PCB_ANY_PRIMITIVE_FIELDS; - const char *extobj; + const char *extobj, *extobj_role; int extobj_idx; void *extobj_data; /* the extobj implementation may store decoded data here */ minuid_bin_t uid;