Added support for specification of staticrank for grs-class of filters.
[idzebra-moved-to-github.git] / index / recgrs.c
index c8bebf9..46805ab 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: recgrs.c,v 1.11 2006-11-30 11:03:57 adam Exp $
+/* $Id: recgrs.c,v 1.12 2006-12-22 13:57:27 adam Exp $
    Copyright (C) 1995-2006
    Index Data ApS
 
@@ -525,6 +525,25 @@ static void mk_tag_path_full(char *tag_path_full, size_t max, data1_node *n)
 }
        
 
+static void index_staticrank(struct recExtractCtrl *p,
+                             RecWord *wrd,
+                             data1_absyn *absyn)
+{
+    const char *staticrank_index = data1_absyn_get_staticrank(absyn);
+
+    if (staticrank_index && !strcmp(wrd->index_name, staticrank_index))
+    {
+        char valz[20];
+        size_t len = wrd->term_len;
+
+        if (len > sizeof(valz)-1)
+            len = sizeof(valz)-1;
+        memcpy(valz, wrd->term_buf, len);
+        valz[len] = '\0';
+        p->staticrank = atozint(valz);
+    }
+}
+
 static void index_xpath(struct source_parser *sp, data1_node *n,
                        struct recExtractCtrl *p,
                        int level, RecWord *wrd,
@@ -537,6 +556,7 @@ static void index_xpath(struct source_parser *sp, data1_node *n,
     int termlist_only = 1;
     data1_termlist *tl;
     int xpdone = 0;
+
     if (!n->root->u.root.absyn 
         || 
         n->root->u.root.absyn->xpath_indexing == DATA1_XPATH_INDEXING_ENABLE)
@@ -544,6 +564,7 @@ static void index_xpath(struct source_parser *sp, data1_node *n,
        termlist_only = 0;
     }
 
+
     switch (n->which)
     {
     case DATA1N_data:
@@ -584,7 +605,10 @@ static void index_xpath(struct source_parser *sp, data1_node *n,
                     fputc ('\n', stdout);
                 }
                 else
+                {
                     (*p->tokenAdd)(&wrd_tl);
+                    index_staticrank(p, &wrd_tl, n->root->u.root.absyn);
+                }
                 if (wrd_tl.seqno > max_seqno)
                     max_seqno = wrd_tl.seqno;
            }
@@ -700,6 +724,8 @@ static void index_xpath(struct source_parser *sp, data1_node *n,
                                     wrd->term_buf = xp->value;
                                     wrd->term_len = strlen(xp->value);
                                     (*p->tokenAdd)(wrd);
+                                    index_staticrank(p, wrd,
+                                                     n->root->u.root.absyn);
                                 }
                             }
                         }
@@ -767,6 +793,7 @@ static void index_termlist (struct source_parser *sp, data1_node *par,
            {
                wrd->index_type = *tlist->structure;
                wrd->index_name = tlist->index_name;
+                index_staticrank(p, wrd, n->root->u.root.absyn);
                (*p->tokenAdd)(wrd);
            }
        }