X-Git-Url: http://git.indexdata.com/?p=idzebra-moved-to-github.git;a=blobdiff_plain;f=recctrl%2Frecgrs.c;h=f45f4d74fe38d22b047f66a677d4f7258b7c3e83;hp=eb808843442423a846ab710286191f88516f5d64;hb=6ba9698e88c0283e40fa5980a1a6b551fff2d597;hpb=69983aaec470e41649c4dfae8a9e7cbcf061cacf diff --git a/recctrl/recgrs.c b/recctrl/recgrs.c index eb80884..f45f4d7 100644 --- a/recctrl/recgrs.c +++ b/recctrl/recgrs.c @@ -1,5 +1,5 @@ -/* $Id: recgrs.c,v 1.103 2005-06-29 16:52:27 adam Exp $ - Copyright (C) 1995-2005 +/* $Id: recgrs.c,v 1.110 2006-05-19 13:49:35 adam Exp $ + Copyright (C) 1995-2006 Index Data ApS This file is part of the Zebra server. @@ -220,16 +220,20 @@ static int sp_expr(struct source_parser *sp, data1_node *n, RecWord *wrd) } else if (sp->len > 0 && isdigit(*(unsigned char *)sp->tok)) { - wrd->term_buf = nmem_malloc(sp->nmem, sp->len); - memcpy(wrd->term_buf, sp->tok, sp->len); + char *b; wrd->term_len = sp->len; + b = nmem_malloc(sp->nmem, sp->len); + memcpy(b, sp->tok, sp->len); + wrd->term_buf = b; sp_lex(sp); } else if (sp->len > 2 && sp->tok[0] == '\'' && sp->tok[sp->len-1] == '\'') { + char *b; wrd->term_len = sp->len - 2; - wrd->term_buf = nmem_malloc(sp->nmem, wrd->term_len); - memcpy(wrd->term_buf, sp->tok+1, wrd->term_len); + b = nmem_malloc(sp->nmem, wrd->term_len); + memcpy(b, sp->tok+1, wrd->term_len); + wrd->term_buf = b; sp_lex(sp); } else @@ -346,6 +350,7 @@ static int dfa_match_first(struct DFA_state **dfaar, const char *text) unsigned char c; for (c = *p++, t = s->trans, i = s->tran_no; --i >= 0; t++) + { if (c >= t->ch[0] && c <= t->ch[1]) { while (i >= 0) @@ -355,12 +360,15 @@ static int dfa_match_first(struct DFA_state **dfaar, const char *text) if (s->rule_no) return 1; /* next char */ + if (!c) + return 0; c = *p++; for (t = s->trans, i = s->tran_no; --i >= 0; t++) if (c >= t->ch[0] && c <= t->ch[1]) break; } } + } return 0; } @@ -393,15 +401,10 @@ data1_termlist *xpath_termlist_by_tagpath(char *tagpath, data1_node *n) int ok = 0; sprintf (pexpr, "/%s\n", tagpath); - yaz_log(YLOG_LOG, "Checking tagpath %s", pexpr); for (; xpe; xpe = xpe->next) { int i; ok = dfa_match_first(xpe->dfa->states, pexpr); - if (ok) - yaz_log(YLOG_LOG, " xpath got match %s",xpe->xpath_expr); - else - yaz_log(YLOG_LOG, " xpath no match %s",xpe->xpath_expr); if (ok) { #ifdef ENHANCED_XELM @@ -468,33 +471,20 @@ static void index_xpath_attr (char *tag_path, char *name, char *value, char *structure, struct recExtractCtrl *p, RecWord *wrd) { -#if NATTR wrd->index_name = ZEBRA_XPATH_ELM_BEGIN; -#else - wrd->attrSet = VAL_IDXPATH; - wrd->attrUse = 1; -#endif wrd->index_type = '0'; wrd->term_buf = tag_path; wrd->term_len = strlen(tag_path); (*p->tokenAdd)(wrd); if (value) { -#if NATTR - wrd->index_name = ZEBRA_XPATH_ATTR; -#else - wrd->attrUse = 1015; -#endif + wrd->index_name = ZEBRA_XPATH_ATTR_CDATA; wrd->index_type = 'w'; wrd->term_buf = value; wrd->term_len = strlen(value); (*p->tokenAdd)(wrd); } -#if NATTR wrd->index_name = ZEBRA_XPATH_ELM_END; -#else - wrd->attrUse = 2; -#endif wrd->index_type = '0'; wrd->term_buf = tag_path; wrd->term_len = strlen(tag_path); @@ -524,19 +514,14 @@ static void mk_tag_path_full(char *tag_path_full, size_t max, data1_node *n) break; } tag_path_full[flen] = 0; - yaz_log(YLOG_LOG, "mk_tag_path_full=%s", tag_path_full); } static void index_xpath(struct source_parser *sp, data1_node *n, struct recExtractCtrl *p, int level, RecWord *wrd, -#if NATTR char *xpath_index, int xpath_is_start -#else - int use -#endif ) { int i; @@ -544,19 +529,8 @@ static void index_xpath(struct source_parser *sp, data1_node *n, int termlist_only = 1; data1_termlist *tl; int xpdone = 0; -#if NATTR -#else - int xpath_is_start = 0; - if (use == 1) - xpath_is_start = 1; -#endif - -#if NATTR yaz_log(YLOG_DEBUG, "index_xpath level=%d xpath_index=%s", level, xpath_index); -#else - yaz_log(YLOG_DEBUG, "index_xpath level=%d use=%d", level, use); -#endif if ((!n->root->u.root.absyn) || (n->root->u.root.absyn->enable_xpath_indexing)) { termlist_only = 0; @@ -583,19 +557,10 @@ static void index_xpath(struct source_parser *sp, data1_node *n, 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; @@ -613,25 +578,13 @@ static void index_xpath(struct source_parser *sp, data1_node *n, 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; iflagShowRecords && !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); } @@ -665,12 +613,7 @@ static void index_xpath(struct source_parser *sp, data1_node *n, wrd->index_type = '0'; wrd->term_buf = tag_path_full; wrd->term_len = strlen(tag_path_full); -#if NATTR wrd->index_name = xpath_index; -#else - wrd->attrSet = VAL_IDXPATH; - wrd->attrUse = use; -#endif if (p->flagShowRecords) { printf("%*s tag=", (level + 1) * 4, ""); @@ -696,11 +639,7 @@ static void index_xpath(struct source_parser *sp, data1_node *n, { for (; tl; tl = tl->next) { -#if NATTR if (!tl->index_name) -#else - if (!tl->att) -#endif do_xpindex = 1; } } @@ -740,13 +679,8 @@ static void index_xpath(struct source_parser *sp, data1_node *n, { for (; tl; tl = tl->next) { -#if NATTR if (!tl->index_name) do_xpindex = 1; -#else - if (!tl->att) - do_xpindex = 1; -#endif } } @@ -754,11 +688,7 @@ static void index_xpath(struct source_parser *sp, data1_node *n, /* attribute (no value) */ wrd->index_type = '0'; -#if NATTR - wrd->index_name = ZEBRA_XPATH_ATTR; -#else - wrd->attrUse = 3; -#endif + wrd->index_name = ZEBRA_XPATH_ATTR_NAME; wrd->term_buf = xp->name; wrd->term_len = strlen(xp->name); @@ -773,11 +703,7 @@ static void index_xpath(struct source_parser *sp, data1_node *n, strcat (comb, "="); strcat (comb, xp->value); -#if NATTR - wrd->index_name = ZEBRA_XPATH_ATTR; -#else - wrd->attrUse = 3; -#endif + wrd->index_name = ZEBRA_XPATH_ATTR_NAME; wrd->index_type = '0'; wrd->term_buf = comb; wrd->term_len = strlen(comb); @@ -803,11 +729,7 @@ static void index_xpath(struct source_parser *sp, data1_node *n, /* If there is a termlist given (=xelm directive) */ for (; tl; tl = tl->next) { -#if NATTR if (!tl->index_name) -#else - if (!tl->att) -#endif { /* add xpath index for the attribute */ index_xpath_attr (attr_tag_path_full, xp->name, @@ -815,16 +737,10 @@ static void index_xpath(struct source_parser *sp, data1_node *n, p, wrd); xpdone = 1; } else { - /* add attribute based index for the attribute */ + /* index attribute value (only path/@attr) */ if (xp->value) { -#if NATTR wrd->index_name = tl->index_name; -#else - wrd->attrSet = (int) - (tl->att->parent->reference); - wrd->attrUse = tl->att->locals->local; -#endif wrd->index_type = *tl->structure; wrd->term_buf = xp->value; wrd->term_len = strlen(xp->value); @@ -883,14 +799,7 @@ static void index_termlist (struct source_parser *sp, data1_node *par, int i; printf("%*sIdx: [%s]", (level + 1) * 4, "", tlist->structure); -#if NATTR printf("%s %s", tlist->index_name, tlist->source); -#else - printf("%s:%s [%d] %s", - tlist->att->parent->name, - tlist->att->name, tlist->att->value, - tlist->source); -#endif printf (" XData:\""); for (i = 0; iterm_len && i < 40; i++) fputc (wrd->term_buf[i], stdout); @@ -902,12 +811,7 @@ static void index_termlist (struct source_parser *sp, data1_node *par, else { wrd->index_type = *tlist->structure; -#if NATTR wrd->index_name = tlist->index_name; -#else - wrd->attrSet = (int) (tlist->att->parent->reference); - wrd->attrUse = tlist->att->locals->local; -#endif (*p->tokenAdd)(wrd); } } @@ -961,14 +865,9 @@ static int dumpkeys_r(struct source_parser *sp, { index_termlist(sp, n, n, p, level, wrd); /* index start tag */ -#if NATTR if (n->root->u.root.absyn) index_xpath(sp, n, p, level, wrd, ZEBRA_XPATH_ELM_BEGIN, 1 /* is start */); -#else - if (n->root->u.root.absyn) - index_xpath(sp, n, p, level, wrd, 1); -#endif } if (n->child) @@ -996,23 +895,15 @@ static int dumpkeys_r(struct source_parser *sp, if (par) index_termlist(sp, par, n, p, level, wrd); -#if NATTR index_xpath(sp, n, p, level, wrd, ZEBRA_XPATH_CDATA, 0 /* is start */); -#else - index_xpath(sp, n, p, level, wrd, 1016); -#endif } if (n->which == DATA1N_tag) { /* index end tag */ -#if NATTR index_xpath(sp, n, p, level, wrd, ZEBRA_XPATH_ELM_END, 0 /* is start */); -#else - index_xpath(sp, n, p, level, wrd, 2); -#endif } if (p->flagShowRecords && n->which == DATA1N_root) @@ -1551,3 +1442,11 @@ int zebra_grs_retrieve(void *clientData, struct recRetrieveCtrl *p, return 0; } +/* + * Local variables: + * c-basic-offset: 4 + * indent-tabs-mode: nil + * End: + * vim: shiftwidth=4 tabstop=8 expandtab + */ +