Added support for specification of staticrank for grs-class of filters.
[idzebra-moved-to-github.git] / data1 / d1_absyn.c
index feff7ce..96f3b6b 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: d1_absyn.c,v 1.30 2006-09-29 10:02:45 adam Exp $
+/* $Id: d1_absyn.c,v 1.32 2006-12-22 13:57:25 adam Exp $
    Copyright (C) 1995-2006
    Index Data ApS
 
@@ -659,15 +659,19 @@ int read_absyn_line(FILE *f, int *lineno, char *line, int len,
     return argc;
 }
 
-data1_marctab *data1_absyn_getmarctab(data1_handle dh, data1_absyn *absyn)
+data1_marctab *data1_absyn_getmarctab(data1_handle dh, data1_node *root)
 {
-    return absyn->marc;
+    if (root->u.root.absyn)
+        return root->u.root.absyn->marc;
+    return 0;
 }
 
-YAZ_EXPORT data1_element *data1_absyn_getelements(data1_handle dh,
-                                                 data1_absyn *absyn)
+data1_element *data1_absyn_getelements(data1_handle dh,
+                                       data1_node *root)
 {
-    return absyn->main_elements;
+    if (root->u.root.absyn)
+        return root->u.root.absyn->main_elements;
+    return 0;
 }
 
 static data1_absyn *data1_read_absyn(data1_handle dh, const char *file,
@@ -699,6 +703,7 @@ static data1_absyn *data1_read_absyn(data1_handle dh, const char *file,
     res->reference = VAL_NONE;
     res->tagset = 0;
     res->encoding = 0;
+    res->staticrank = 0;
     res->xpath_indexing = 
         (f ? DATA1_XPATH_INDEXING_DISABLE : default_xpath);
     res->systags = 0;
@@ -1178,6 +1183,18 @@ static data1_absyn *data1_read_absyn(data1_handle dh, const char *file,
             (*systagsp)->value = nmem_strdup(data1_nmem_get(dh), argv[2]);
             systagsp = &(*systagsp)->next;
         }
+        else if (!strcmp(cmd, "staticrank"))
+        {
+            if (argc != 2)
+            {
+               yaz_log(YLOG_WARN, "%s:%d: Bad # or args for staticrank",
+                    file, lineno);
+            }
+            else
+            {
+                res->staticrank = nmem_strdup(data1_nmem_get(dh), argv[1]);
+            }
+        }
        else
        {
            yaz_log(YLOG_WARN, "%s:%d: Unknown directive '%s'", file, 
@@ -1198,6 +1215,12 @@ static data1_absyn *data1_read_absyn(data1_handle dh, const char *file,
     *systagsp = 0;
     return res;
 }
+
+YAZ_EXPORT const char *data1_absyn_get_staticrank(data1_absyn *absyn)
+{
+    return absyn ? absyn->staticrank : 0;
+}
+
 /*
  * Local variables:
  * c-basic-offset: 4