idzebra:{filename,score,size,localnumber} tags for XML
[idzebra-moved-to-github.git] / recctrl / recgrs.c
index 77ce0ae..bc0c974 100644 (file)
@@ -2,7 +2,7 @@
  * Copyright (C) 1994-2002, Index Data
  * All rights reserved.
  *
- * $Id: recgrs.c,v 1.49 2002-05-13 14:13:43 adam Exp $
+ * $Id: recgrs.c,v 1.52 2002-07-02 20:20:09 adam Exp $
  */
 
 #include <stdio.h>
@@ -136,7 +136,7 @@ static void index_xpath (data1_node *n, struct recExtractCtrl *p,
     case DATA1N_tag:
         for (nn = n; nn; nn = nn->parent)
         {
-            if (n->which == DATA1N_tag)
+            if (nn->which == DATA1N_tag)
             {
                 size_t tlen = strlen(nn->u.tag.tag);
                 if (tlen + flen > (sizeof(tag_path_full)-2))
@@ -145,7 +145,7 @@ static void index_xpath (data1_node *n, struct recExtractCtrl *p,
                 flen += tlen;
                 tag_path_full[flen++] = '/';
             }
-            else if (n->which == DATA1N_root)
+            else if (nn->which == DATA1N_root)
             {
                 size_t tlen = strlen(nn->u.root.type);
                 if (tlen + flen > (sizeof(tag_path_full)-2))
@@ -513,6 +513,8 @@ static int grs_retrieve(void *clientData, struct recRetrieveCtrl *p)
     char *tagname;
     struct grs_handlers *h = (struct grs_handlers *) clientData;
     int requested_schema = VAL_NONE;
+    data1_marctab *marctab;
+    int dummy;
     
     mem = nmem_create();
     gri.readf = p->readf;
@@ -615,7 +617,7 @@ static int grs_retrieve(void *clientData, struct recRetrieveCtrl *p)
      * the overlap of schema and formatting which is inherent in the MARC
      * family)
      */
-    logf (LOG_DEBUG, "grs_retrieve: syntax mapping");
+    yaz_log (LOG_DEBUG, "grs_retrieve: syntax mapping");
     if (node->u.root.absyn)
         for (map = node->u.root.absyn->maptabs; map; map = map->next)
         {
@@ -631,7 +633,7 @@ static int grs_retrieve(void *clientData, struct recRetrieveCtrl *p)
                 break;
             }
         }
-    logf (LOG_DEBUG, "grs_retrieve: schemaIdentifier");
+    yaz_log (LOG_DEBUG, "grs_retrieve: schemaIdentifier");
     if (node->u.root.absyn &&
        node->u.root.absyn->reference != VAL_NONE &&
        p->input_format == VAL_GRS1)
@@ -691,10 +693,20 @@ static int grs_retrieve(void *clientData, struct recRetrieveCtrl *p)
     switch (p->output_format = (p->input_format != VAL_NONE ?
                                p->input_format : VAL_SUTRS))
     {
-       data1_marctab *marctab;
-        int dummy;
        
     case VAL_TEXT_XML:
+        data1_mk_tag_data_int (p->dh, node, "idzebra:size", p->recordSize,
+                               mem);
+        if (p->score != -1)
+            data1_mk_tag_data_int (p->dh, node, "idzebra:score",
+                                   p->score, mem);
+        
+        data1_mk_tag_data_int (p->dh, node, "idzebra:localnumber", p->localno,
+                               mem);
+        if (p->fname)
+            data1_mk_tag_data_text(p->dh, node, "idzebra:filename",
+                                   p->fname, mem);
+        
        if (!(p->rec_buf = data1_nodetoidsgml(p->dh, node, selected,
                                              &p->rec_len)))
            p->diagnostic = 238;