- tag_path_full[flen] = 0;
-
- /* If we have a matching termlist... */
- if (n->root->u.root.absyn && (tl = xpath_termlist_by_tagpath(tag_path_full, n))) {
- for (; tl; tl = tl->next) {
- wrd->reg_type = *tl->structure;
- /* this is the ! case, so structure is for the xpath index */
- if (!tl->att) {
- wrd->attrSet = VAL_IDXPATH;
- wrd->attrUse = use;
- (*p->tokenAdd)(wrd);
- xpdone = 1;
- /* this is just the old fashioned attribute based index */
- } else {
- wrd->attrSet = (int) (tl->att->parent->reference);
- wrd->attrUse = tl->att->locals->local;
- (*p->tokenAdd)(wrd);
- }
- }
- }
- /* xpath indexing is done, if there was no termlist given,
- or no ! in the termlist, and default indexing is enabled... */
- if ((!xpdone) && (!termlist_only)) {
- wrd->attrSet = VAL_IDXPATH;
- wrd->attrUse = use;
- wrd->reg_type = 'w';
- (*p->tokenAdd)(wrd);
- }
+ mk_tag_path_full(tag_path_full, sizeof(tag_path_full), n);
+
+ /* If we have a matching termlist... */
+ if (n->root->u.root.absyn &&
+ (tl = xpath_termlist_by_tagpath(tag_path_full, n)))
+ {
+ for (; tl; tl = tl->next)
+ {
+ /* need to copy recword because it may be changed */
+ RecWord wrd_tl;
+ wrd->index_type = *tl->structure;
+ memcpy (&wrd_tl, wrd, sizeof(*wrd));
+ if (tl->source)
+ sp_parse(sp, n, &wrd_tl, tl->source);
+#if NATTR
+ if (!tl->index_name)
+#else
+ if (!tl->att)
+#endif
+ {
+ /* this is the ! case, so structure is for the xpath index */
+#if NATTR
+ wrd_tl.index_name = xpath_index;
+#else
+ wrd_tl.attrSet = VAL_IDXPATH;
+ wrd_tl.attrUse = use;
+#endif
+ if (p->flagShowRecords)
+ {
+ int i;
+ printf("%*sXPath index", (level + 1) * 4, "");
+ printf (" XData:\"");
+ for (i = 0; i<wrd_tl.term_len && i < 40; i++)
+ fputc (wrd_tl.term_buf[i], stdout);
+ fputc ('"', stdout);
+ if (wrd_tl.term_len > 40)
+ printf (" ...");
+ fputc ('\n', stdout);
+ }
+ else
+ (*p->tokenAdd)(&wrd_tl);
+ xpdone = 1;
+ } else {
+ /* this is just the old fashioned attribute based index */
+#if NATTR
+ wrd_tl.index_name = tl->index_name;
+#else
+ wrd_tl.attrSet = (int) (tl->att->parent->reference);
+ wrd_tl.attrUse = tl->att->locals->local;
+#endif
+ if (p->flagShowRecords)
+ {
+ int i;
+ printf("%*sIdx: [%s]", (level + 1) * 4, "",
+ tl->structure);
+#if NATTR
+ printf("%s %s", tl->index_name, tl->source);
+#else
+ printf("%s:%s [%d] %s",
+ tl->att->parent->name,
+ tl->att->name, tl->att->value,
+ tl->source);
+#endif
+ printf (" XData:\"");
+ for (i = 0; i<wrd_tl.term_len && i < 40; i++)
+ fputc (wrd_tl.term_buf[i], stdout);
+ fputc ('"', stdout);
+ if (wrd_tl.term_len > 40)
+ printf (" ...");
+ fputc ('\n', stdout);
+ }
+ else
+ (*p->tokenAdd)(&wrd_tl);
+ }
+ }
+ }
+ /* xpath indexing is done, if there was no termlist given,
+ or no ! in the termlist, and default indexing is enabled... */
+ if (!p->flagShowRecords && !xpdone && !termlist_only)
+ {
+#if NATTR
+ wrd->index_name = xpath_index;
+#else
+ wrd->attrSet = VAL_IDXPATH;
+ wrd->attrUse = use;
+#endif
+ wrd->index_type = 'w';
+ (*p->tokenAdd)(wrd);