static void simpleXpathMakeTag (xmlNode *node, const tagXpathMakeTagSpec *spec, const kindOption* const kinds, void *userData) { tagEntryInfo tag; xmlChar* str; const kindOption *kind; char *path; str = xmlNodeGetContent(node); if (str == NULL) return; kind = kinds + spec->kind; if (spec->role == ROLE_INDEX_DEFINITION) initTagEntry (&tag, (char *)str, kind); else if (isXtagEnabled(XTAG_REFERENCE_TAGS)) initRefTagEntry (&tag, (char *)str, kind, spec->role); else goto out; tag.lineNumber = xmlGetLineNo (node); tag.filePosition = getInputFilePositionForLine (tag.lineNumber); path = (char *)xmlGetNodePath (node); tag.extensionFields.xpath = path; if (spec->make) spec->make (node, spec, &tag, userData); else makeTagEntry (&tag); if (path) xmlFree (path); out: xmlFree (str); }
static void found_macro_cb (const char *line, const regexMatch *matches, unsigned int count, void *uesrData) { struct macro_cb_data *data = uesrData; if (count > 0) { vString *signature = ((count > 1) && (matches[2].length > 0))? vStringNew(): NULL; vString *name = vStringNew (); tagEntryInfo tag; if (signature) vStringNCopyS (signature, line + matches[2].start, matches[2].length); vStringNCopyS (name, line + matches[1].start, matches[1].length); if (data->rindex == ROLE_INDEX_DEFINITION) initTagEntry (&tag, vStringValue (name), &(RpmSpecKinds[data->kindex])); else initRefTagEntry (&tag, vStringValue (name), &(RpmSpecKinds[data->kindex]), data->rindex); if (signature) tag.extensionFields.signature = vStringValue (signature); /* Skip the definition */ while (line && is_line_continued (line)) { rejecting = TRUE; line = (const char *)readLineFromInputFile (); } rejecting = FALSE; tag.extensionFields.endLine = getInputLineNumber(); makeTagEntry (&tag); vStringDelete (name); if (signature) vStringDelete (signature); } }
static int makeSimplePythonRefTag (const tokenInfo *const token, const vString *const altName, pythonKind const kind, int roleIndex, xtagType xtag) { if (isXtagEnabled (XTAG_REFERENCE_TAGS) && PythonKinds[kind].roles[roleIndex].enabled) { tagEntryInfo e; initRefTagEntry (&e, vStringValue (altName ? altName : token->string), kind, roleIndex); e.lineNumber = token->lineNumber; e.filePosition = token->filePosition; if (xtag != XTAG_UNKNOWN) markTagExtraBit (&e, xtag); return makeTagEntry (&e); } return CORK_NIL; }