nmake: align with pazpar2 WRT icu/libxslt
[idzebra-moved-to-github.git] / index / recgrs.c
index c62d1a9..386e541 100644 (file)
@@ -1,8 +1,5 @@
-/* $Id: recgrs.c,v 1.19 2007-05-08 12:50:04 adam Exp $
-   Copyright (C) 1995-2007
-   Index Data ApS
-
-This file is part of the Zebra server.
+/* This file is part of the Zebra server.
+   Copyright (C) Index Data
 
 Zebra is free software; you can redistribute it and/or modify it under
 the terms of the GNU General Public License as published by the Free
@@ -20,6 +17,9 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 
 */
 
+#if HAVE_CONFIG_H
+#include <config.h>
+#endif
 #include <stdio.h>
 #include <assert.h>
 #include <sys/types.h>
@@ -70,30 +70,30 @@ static int sp_range(struct source_parser *sp, data1_node *n, RecWord *wrd)
 {
     int start, len;
     RecWord tmp_w;
-    
+
     /* ( */
     sp_lex(sp);
     if (sp->lookahead != '(')
        return 0;
     sp_lex(sp); /* skip ( */
-    
+
     /* 1st arg: string */
     if (!sp_expr(sp, n, wrd))
        return 0;
-    
+
     if (sp->lookahead != ',')
-       return 0;       
+       return 0;
     sp_lex(sp); /* skip , */
-    
+
     /* 2nd arg: start */
     if (!sp_expr(sp, n, &tmp_w))
        return 0;
     start = atoi_n(tmp_w.term_buf, tmp_w.term_len);
-    
+
     if (sp->lookahead == ',')
     {
        sp_lex(sp); /* skip , */
-       
+
        /* 3rd arg: length */
        if (!sp_expr(sp, n, &tmp_w))
            return 0;
@@ -101,18 +101,24 @@ static int sp_range(struct source_parser *sp, data1_node *n, RecWord *wrd)
     }
     else
        len = wrd->term_len;
-    
+
     /* ) */
     if (sp->lookahead != ')')
-       return 0;       
+       return 0;
     sp_lex(sp);
-    
-    if (wrd->term_buf && wrd->term_len)
+
+    if (wrd->term_buf)
     {
-       wrd->term_buf += start;
-       wrd->term_len -= start;
-       if (wrd->term_len > len)
-           wrd->term_len = len;
+        if (start >= wrd->term_len)
+            wrd->term_len = 0;
+        else
+        {
+            wrd->term_len -= start;
+            wrd->term_buf += start;
+
+            if (wrd->term_len > len)
+                wrd->term_len = len;
+        }
     }
     return 1;
 }
@@ -132,7 +138,7 @@ static int sp_first(struct source_parser *sp, data1_node *n, RecWord *wrd)
        RecWord search_w;
        int i;
        sp_lex(sp); /* skip , */
-       
+
        if (!sp_expr(sp, n, &search_w))
            return 0;
        for (i = 0; i<wrd->term_len; i++)
@@ -176,7 +182,7 @@ static int sp_expr(struct source_parser *sp, data1_node *n, RecWord *wrd)
     else if (sp->len == 3 && !memcmp(sp->tok, "tag", sp->len))
     {
        if (n->which == DATA1N_tag)
-       {               
+       {
            wrd->term_buf = n->u.tag.tag;
            wrd->term_len = strlen(n->u.tag.tag);
        }
@@ -192,13 +198,13 @@ static int sp_expr(struct source_parser *sp, data1_node *n, RecWord *wrd)
 
        if (!sp_expr(sp, n, &tmp_w))
            return 0;
-       
+
        wrd->term_buf = "";
        wrd->term_len = 0;
        if (n->which == DATA1N_tag)
        {
            data1_xattr *p = n->u.tag.attributes;
-           while (p && strlen(p->name) != tmp_w.term_len && 
+           while (p && strlen(p->name) != tmp_w.term_len &&
                   memcmp (p->name, tmp_w.term_buf, tmp_w.term_len))
                p = p->next;
            if (p)
@@ -237,7 +243,7 @@ static int sp_expr(struct source_parser *sp, data1_node *n, RecWord *wrd)
        wrd->term_buf = b;
        sp_lex(sp);
     }
-    else 
+    else
     {
        wrd->term_buf = "";
        wrd->term_len = 0;
@@ -261,8 +267,8 @@ static void source_parser_destroy(struct source_parser *sp)
     nmem_destroy(sp->nmem);
     xfree(sp);
 }
-    
-static int sp_parse(struct source_parser *sp, 
+
+static int sp_parse(struct source_parser *sp,
                    data1_node *n, RecWord *wrd, const char *src)
 {
     sp->len = 0;
@@ -280,14 +286,14 @@ int d1_check_xpath_predicate(data1_node *n, struct xpath_predicate *p)
     int res = 1;
     char *attname;
     data1_xattr *attr;
-    
+
     if (!p) {
         return 1;
     } else {
         if (p->which == XPATH_PREDICATE_RELATION) {
             if (p->u.relation.name[0]) {
                 if (*p->u.relation.name != '@') {
-                    yaz_log(YLOG_WARN, 
+                    yaz_log(YLOG_WARN,
                          "  Only attributes (@) are supported in xelm xpath predicates");
                     yaz_log(YLOG_WARN, "predicate %s ignored", p->u.relation.name);
                     return 1;
@@ -299,14 +305,14 @@ int d1_check_xpath_predicate(data1_node *n, struct xpath_predicate *p)
                     if (!strcmp(attr->name, attname)) {
                         if (p->u.relation.op[0]) {
                             if (*p->u.relation.op != '=') {
-                                yaz_log(YLOG_WARN, 
+                                yaz_log(YLOG_WARN,
                                      "Only '=' relation is supported (%s)",p->u.relation.op);
                                 yaz_log(YLOG_WARN, "predicate %s ignored", p->u.relation.name);
                                 res = 1; break;
                             } else {
                                 if (!strcmp(attr->value, p->u.relation.value)) {
                                     res = 1; break;
-                                } 
+                                }
                             }
                         } else {
                             /* attribute exists, no value specified */
@@ -318,15 +324,15 @@ int d1_check_xpath_predicate(data1_node *n, struct xpath_predicate *p)
             } else {
                 return 1;
             }
-        } 
+        }
         else if (p->which == XPATH_PREDICATE_BOOLEAN) {
             if (!strcmp(p->u.boolean.op,"and")) {
-                return d1_check_xpath_predicate(n, p->u.boolean.left) 
-                    && d1_check_xpath_predicate(n, p->u.boolean.right); 
+                return d1_check_xpath_predicate(n, p->u.boolean.left)
+                    && d1_check_xpath_predicate(n, p->u.boolean.right);
             }
             else if (!strcmp(p->u.boolean.op,"or")) {
-                return (d1_check_xpath_predicate(n, p->u.boolean.left) 
-                        || d1_check_xpath_predicate(n, p->u.boolean.right)); 
+                return (d1_check_xpath_predicate(n, p->u.boolean.left)
+                        || d1_check_xpath_predicate(n, p->u.boolean.right));
             } else {
                 yaz_log(YLOG_WARN, "Unknown boolean relation %s, ignored",p->u.boolean.op);
                 return 1;
@@ -344,7 +350,7 @@ static int dfa_match_first(struct DFA_state **dfaar, const char *text)
     int i;
     const char *p = 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])
@@ -369,7 +375,7 @@ static int dfa_match_first(struct DFA_state **dfaar, const char *text)
 }
 
 /* *ostrich*
-   
+
 New function, looking for xpath "element" definitions in abs, by
 tagpath, using a kind of ugly regxp search.The DFA was built while
 parsing abs, so here we just go trough them and try to match
@@ -391,12 +397,12 @@ data1_termlist *xpath_termlist_by_tagpath(char *tagpath, data1_node *n)
 
     data1_xpelement *xpe = 0;
     data1_node *nn;
-#ifdef ENHANCED_XELM 
+#ifdef ENHANCED_XELM
     struct xpath_location_step *xp;
 #endif
     char *pexpr = xmalloc(strlen(tagpath)+5);
-    
-    sprintf (pexpr, "/%s\n", tagpath);
+
+    sprintf(pexpr, "/%s\n", tagpath);
 
     for (xpe = abs->xp_elements; xpe; xpe = xpe->next)
         xpe->match_state = -1; /* don't know if it matches yet */
@@ -418,16 +424,16 @@ data1_termlist *xpath_termlist_by_tagpath(char *tagpath, data1_node *n)
                 xpe1->match_state = ok;
 #endif
         }
-        assert (ok == 0 || ok == 1);
+        assert(ok == 0 || ok == 1);
         if (ok) {
-#ifdef ENHANCED_XELM 
+#ifdef ENHANCED_XELM
             /* we have to check the perdicates up to the root node */
             xp = xpe->xpath;
-            
+
             /* find the first tag up in the node structure */
             for (nn = n; nn && nn->which != DATA1N_tag; nn = nn->parent)
                ;
-            
+
             /* go from inside out in the node structure, while going
                backwards trough xpath location steps ... */
             for (i = xpe->xpath_len - 1; i>0; i--)
@@ -437,7 +443,7 @@ data1_termlist *xpath_termlist_by_tagpath(char *tagpath, data1_node *n)
                     ok = 0;
                     break;
                 }
-                
+
                 if (nn->which == DATA1N_tag)
                     nn = nn->parent;
             }
@@ -445,12 +451,11 @@ data1_termlist *xpath_termlist_by_tagpath(char *tagpath, data1_node *n)
             if (ok)
                 break;
        }
-    } 
-    
+    }
+
     xfree(pexpr);
-    
+
     if (xpe) {
-       yaz_log(YLOG_DEBUG, "Got it");
         return xpe->termlists;
     } else {
         return NULL;
@@ -469,32 +474,32 @@ data1_termlist *xpath_termlist_by_tagpath(char *tagpath, data1_node *n)
   *ostrich*
 
   Now, if there is a matching xelm described in abs, for the
-  indexed element or the attribute,  then the data is handled according 
+  indexed element or the attribute,  then the data is handled according
   to those definitions...
 
   modified by pop, 2002-12-13
 */
 
 /* add xpath index for an attribute */
-static void index_xpath_attr (char *tag_path, char *name, char *value,
+static void index_xpath_attr(char *tag_path, char *name, char *value,
                              char *structure, struct recExtractCtrl *p,
                              RecWord *wrd)
 {
     wrd->index_name = ZEBRA_XPATH_ELM_BEGIN;
-    wrd->index_type = '0';
+    wrd->index_type = "0";
     wrd->term_buf = tag_path;
     wrd->term_len = strlen(tag_path);
     (*p->tokenAdd)(wrd);
-    
+
     if (value) {
        wrd->index_name = ZEBRA_XPATH_ATTR_CDATA;
-        wrd->index_type = 'w';
+        wrd->index_type = "w";
         wrd->term_buf = value;
         wrd->term_len = strlen(value);
         (*p->tokenAdd)(wrd);
     }
     wrd->index_name = ZEBRA_XPATH_ELM_END;
-    wrd->index_type = '0';
+    wrd->index_type = "0";
     wrd->term_buf = tag_path;
     wrd->term_len = strlen(tag_path);
     (*p->tokenAdd)(wrd);
@@ -514,7 +519,7 @@ static void mk_tag_path_full(char *tag_path_full, size_t max, data1_node *n)
            size_t tlen = strlen(nn->u.tag.tag);
            if (tlen + flen > (max - 2))
                break;
-           memcpy (tag_path_full + flen, nn->u.tag.tag, tlen);
+           memcpy(tag_path_full + flen, nn->u.tag.tag, tlen);
            flen += tlen;
            tag_path_full[flen++] = '/';
        }
@@ -524,7 +529,7 @@ static void mk_tag_path_full(char *tag_path_full, size_t max, data1_node *n)
     }
     tag_path_full[flen] = 0;
 }
-       
+
 
 static void index_xpath(struct source_parser *sp, data1_node *n,
                        struct recExtractCtrl *p,
@@ -538,8 +543,8 @@ static void index_xpath(struct source_parser *sp, data1_node *n,
     int termlist_only = 1;
     data1_termlist *tl;
 
-    if (!n->root->u.root.absyn 
-        || 
+    if (!n->root->u.root.absyn
+        ||
         n->root->u.root.absyn->xpath_indexing == DATA1_XPATH_INDEXING_ENABLE)
     {
        termlist_only = 0;
@@ -553,9 +558,9 @@ static void index_xpath(struct source_parser *sp, data1_node *n,
         wrd->term_len = n->u.data.len;
 
        mk_tag_path_full(tag_path_full, sizeof(tag_path_full), n);
-       
+
        /* If we have a matching termlist... */
-       if (n->root->u.root.absyn && 
+       if (n->root->u.root.absyn &&
            (tl = xpath_termlist_by_tagpath(tag_path_full, n)))
        {
             zint max_seqno = 0;
@@ -563,11 +568,11 @@ static void index_xpath(struct source_parser *sp, data1_node *n,
            {
                /* need to copy recword because it may be changed */
                RecWord wrd_tl;
-               wrd->index_type = *tl->structure;
-               memcpy (&wrd_tl, wrd, sizeof(*wrd));
+               wrd->index_type = tl->structure;
+               memcpy(&wrd_tl, wrd, sizeof(*wrd));
                if (tl->source)
                    sp_parse(sp, n, &wrd_tl, tl->source);
-                
+
                 /* this is just the old fashioned attribute based index */
                 wrd_tl.index_name = tl->index_name;
                 if (p->flagShowRecords)
@@ -576,13 +581,13 @@ static void index_xpath(struct source_parser *sp, data1_node *n,
                     printf("%*sIdx: [%s]", (level + 1) * 4, "",
                            tl->structure);
                     printf("%s %s", tl->index_name, tl->source);
-                    printf (" XData:\"");
+                    printf(" XData:\"");
                     for (i = 0; i<wrd_tl.term_len && i < 40; i++)
-                        fputc (wrd_tl.term_buf[i], stdout);
-                    fputc ('"', stdout);
+                        fputc(wrd_tl.term_buf[i], stdout);
+                    fputc('"', stdout);
                     if (wrd_tl.term_len > 40)
-                        printf (" ...");
-                    fputc ('\n', stdout);
+                        printf(" ...");
+                    fputc('\n', stdout);
                 }
                 else
                 {
@@ -593,21 +598,21 @@ static void index_xpath(struct source_parser *sp, data1_node *n,
            }
             if (max_seqno)
                 wrd->seqno = max_seqno;
-                
+
        }
-       /* xpath indexing is done, if there was no termlist given, 
+       /* xpath indexing is done, if there was no termlist given,
           or no ! in the termlist, and default indexing is enabled... */
        if (!p->flagShowRecords && !termlist_only)
        {
            wrd->index_name = xpath_index;
-           wrd->index_type = 'w';
+           wrd->index_type = "w";
            (*p->tokenAdd)(wrd);
        }
         break;
     case DATA1N_tag:
        mk_tag_path_full(tag_path_full, sizeof(tag_path_full), n);
 
-        wrd->index_type = '0';
+        wrd->index_type = "0";
         wrd->term_buf = tag_path_full;
         wrd->term_len = strlen(tag_path_full);
        wrd->index_name = xpath_index;
@@ -615,9 +620,9 @@ static void index_xpath(struct source_parser *sp, data1_node *n,
         {
             printf("%*s tag=", (level + 1) * 4, "");
             for (i = 0; i<wrd->term_len && i < 40; i++)
-                fputc (wrd->term_buf[i], stdout);
+                fputc(wrd->term_buf[i], stdout);
             if (i == 40)
-                printf (" ..");
+                printf(" ..");
             printf("\n");
         }
         else
@@ -626,62 +631,62 @@ static void index_xpath(struct source_parser *sp, data1_node *n,
 
             if (!termlist_only)
                 (*p->tokenAdd)(wrd);   /* index element pag (AKA tag path) */
-            
+
             if (xpath_is_start == 1) /* only for the starting tag... */
             {
 #define MAX_ATTR_COUNT 50
                 data1_termlist *tll[MAX_ATTR_COUNT];
-                
+
                 int i = 0;
                 for (xp = n->u.tag.attributes; xp; xp = xp->next) {
                     char comb[512];
-                    char attr_tag_path_full[1024]; 
-                    
+                    char attr_tag_path_full[1024];
+
                     /* this could be cached as well */
-                    sprintf (attr_tag_path_full, "@%s/%s",
+                    sprintf(attr_tag_path_full, "@%s/%s",
                              xp->name, tag_path_full);
 
                     tll[i] = xpath_termlist_by_tagpath(attr_tag_path_full,n);
-                    
+
                     if (!termlist_only)
                     {
                         /* attribute  (no value) */
-                        wrd->index_type = '0';
+                        wrd->index_type = "0";
                         wrd->index_name = ZEBRA_XPATH_ATTR_NAME;
                         wrd->term_buf = xp->name;
                         wrd->term_len = strlen(xp->name);
-                        
+
                         wrd->seqno--;
                         (*p->tokenAdd)(wrd);
-                        
-                        if (xp->value 
+
+                        if (xp->value
                             &&
                             strlen(xp->name) + strlen(xp->value) < sizeof(comb)-2)
                         {
                             /* attribute value exact */
-                            strcpy (comb, xp->name);
-                            strcat (comb, "=");
-                            strcat (comb, xp->value);
-                            
+                            strcpy(comb, xp->name);
+                            strcat(comb, "=");
+                            strcat(comb, xp->value);
+
                             wrd->index_name = ZEBRA_XPATH_ATTR_NAME;
-                            wrd->index_type = '0';
+                            wrd->index_type = "0";
                             wrd->term_buf = comb;
                             wrd->term_len = strlen(comb);
                             wrd->seqno--;
-                            
+
                             (*p->tokenAdd)(wrd);
                         }
-                    }     
+                    }
                     i++;
                 }
-                
+
                 i = 0;
                 for (xp = n->u.tag.attributes; xp; xp = xp->next) {
                     data1_termlist *tl;
                     char attr_tag_path_full[1024];
                     int xpdone = 0;
-                    
-                    sprintf (attr_tag_path_full, "@%s/%s",
+
+                    sprintf(attr_tag_path_full, "@%s/%s",
                              xp->name, tag_path_full);
                     if ((tl = tll[i]))
                     {
@@ -691,16 +696,16 @@ static void index_xpath(struct source_parser *sp, data1_node *n,
                            if (!tl->index_name)
                            {
                                 /* add xpath index for the attribute */
-                                index_xpath_attr (attr_tag_path_full, xp->name,
+                                index_xpath_attr(attr_tag_path_full, xp->name,
                                                   xp->value, tl->structure,
                                                   p, wrd);
                                 xpdone = 1;
                             } else {
                                 /* index attribute value (only path/@attr) */
-                                if (xp->value) 
+                                if (xp->value)
                                {
                                    wrd->index_name = tl->index_name;
-                                    wrd->index_type = *tl->structure;
+                                    wrd->index_type = tl->structure;
                                     wrd->term_buf = xp->value;
                                     wrd->term_len = strlen(xp->value);
                                     (*p->tokenAdd)(wrd);
@@ -708,12 +713,12 @@ static void index_xpath(struct source_parser *sp, data1_node *n,
                             }
                         }
                     }
-                    /* if there was no termlist for the given path, 
-                       or the termlist didn't have a ! element, index 
+                    /* if there was no termlist for the given path,
+                       or the termlist didn't have a ! element, index
                        the attribute as "w" */
                     if (!xpdone && !termlist_only)
                     {
-                        index_xpath_attr (attr_tag_path_full, xp->name,
+                        index_xpath_attr(attr_tag_path_full, xp->name,
                                           xp->value,  "w", p, wrd);
                     }
                     i++;
@@ -723,27 +728,22 @@ static void index_xpath(struct source_parser *sp, data1_node *n,
     }
 }
 
-static void index_termlist (struct source_parser *sp, data1_node *par,
+static void index_termlist(struct source_parser *sp, data1_node *par,
                            data1_node *n,
                             struct recExtractCtrl *p, int level, RecWord *wrd)
 {
     data1_termlist *tlist = 0;
-    data1_datatype dtype = DATA1K_string;
-
     /*
      * cycle up towards the root until we find a tag with an att..
      * this has the effect of indexing locally defined tags with
      * the attribute of their ancestor in the record.
      */
-    
+
     while (!par->u.tag.element)
         if (!par->parent || !(par=get_parent_tag(p->dh, par->parent)))
             break;
     if (!par || !(tlist = par->u.tag.element->termlists))
         return;
-    if (par->u.tag.element->tag)
-        dtype = par->u.tag.element->tag->kind;
-
     for (; tlist; tlist = tlist->next)
     {
        /* consider source */
@@ -759,17 +759,17 @@ static void index_termlist (struct source_parser *sp, data1_node *par,
                printf("%*sIdx: [%s]", (level + 1) * 4, "",
                       tlist->structure);
                printf("%s %s", tlist->index_name, tlist->source);
-               printf (" XData:\"");
+               printf(" XData:\"");
                for (i = 0; i<wrd->term_len && i < 40; i++)
-                   fputc (wrd->term_buf[i], stdout);
-               fputc ('"', stdout);
+                   fputc(wrd->term_buf[i], stdout);
+               fputc('"', stdout);
                if (wrd->term_len > 40)
-                   printf (" ...");
-               fputc ('\n', stdout);
+                   printf(" ...");
+               fputc('\n', stdout);
            }
            else
            {
-               wrd->index_type = *tlist->structure;
+               wrd->index_type = tlist->structure;
                wrd->index_name = tlist->index_name;
                (*p->tokenAdd)(wrd);
            }
@@ -825,7 +825,7 @@ static int dumpkeys_r(struct source_parser *sp,
             index_termlist(sp, n, n, p, level, wrd);
             /* index start tag */
            if (n->root->u.root.absyn)
-               index_xpath(sp, n, p, level, wrd, ZEBRA_XPATH_ELM_BEGIN, 
+               index_xpath(sp, n, p, level, wrd, ZEBRA_XPATH_ELM_BEGIN,
                            1 /* is start */);
        }
 
@@ -854,14 +854,14 @@ static int dumpkeys_r(struct source_parser *sp,
            if (par)
                index_termlist(sp, par, n, p, level, wrd);
 
-           index_xpath(sp, n, p, level, wrd, ZEBRA_XPATH_CDATA, 
+           index_xpath(sp, n, p, level, wrd, ZEBRA_XPATH_CDATA,
                        0 /* is start */);
        }
 
        if (n->which == DATA1N_tag)
        {
             /* index end tag */
-           index_xpath(sp, n, p, level, wrd, ZEBRA_XPATH_ELM_END, 
+           index_xpath(sp, n, p, level, wrd, ZEBRA_XPATH_ELM_END,
                        0 /* is start */);
        }
 
@@ -889,7 +889,7 @@ int grs_extract_tree(struct recExtractCtrl *p, data1_node *n)
         (*p->schemaAdd)(p, n->u.root.absyn->oid);
     (*p->init)(p, &wrd);
 
-    /* data1_pr_tree(p->dh, n, stdout); */ 
+    /* data1_pr_tree(p->dh, n, stdout); */
 
     return dumpkeys(n, p, &wrd);
 }
@@ -915,13 +915,13 @@ static int grs_extract_sub(void *clientData, struct recExtractCtrl *p,
     data1_concat_text(p->dh, mem, n);
 
     /* ensure our data1 tree is UTF-8 */
-    data1_iconv (p->dh, mem, n, "UTF-8", data1_get_encoding(p->dh, n));
+    data1_iconv(p->dh, mem, n, "UTF-8", data1_get_encoding(p->dh, n));
 
 
-    data1_remove_idzebra_subtree (p->dh, n);
+    data1_remove_idzebra_subtree(p->dh, n);
 
 #if 0
-    data1_pr_tree (p->dh, n, stdout);
+    data1_pr_tree(p->dh, n, stdout);
 #endif
 
     (*p->init)(p, &wrd);
@@ -936,7 +936,7 @@ int zebra_grs_extract(void *clientData, struct recExtractCtrl *p,
                      data1_node *(*grs_read)(struct grs_read_info *))
 {
     int ret;
-    NMEM mem = nmem_create ();
+    NMEM mem = nmem_create();
     ret = grs_extract_sub(clientData, p, mem, grs_read);
     nmem_destroy(mem);
     return ret;
@@ -1021,7 +1021,7 @@ static int process_comp(data1_handle dh, data1_node *n, Z_RecordComposition *c,
 }
 
 /* Add Zebra info in separate namespace ...
-        <root 
+        <root
          ...
          <metadata xmlns="http://www.indexdata.dk/zebra/">
           <size>359</size>
@@ -1031,7 +1031,7 @@ static int process_comp(data1_handle dh, data1_node *n, Z_RecordComposition *c,
         </root>
 */
 
-static void zebra_xml_metadata (struct recRetrieveCtrl *p, data1_node *top,
+static void zebra_xml_metadata(struct recRetrieveCtrl *p, data1_node *top,
                                 NMEM mem)
 {
     const char *idzebra_ns[3];
@@ -1043,29 +1043,29 @@ static void zebra_xml_metadata (struct recRetrieveCtrl *p, data1_node *top,
     idzebra_ns[1] = "http://www.indexdata.dk/zebra/";
     idzebra_ns[2] = 0;
 
-    data1_mk_text (p->dh, mem, i2, top);
+    data1_mk_text(p->dh, mem, i2, top);
+
+    n = data1_mk_tag(p->dh, mem, "idzebra", idzebra_ns, top);
 
-    n = data1_mk_tag (p->dh, mem, "idzebra", idzebra_ns, top);
+    data1_mk_text(p->dh, mem, "\n", top);
 
-    data1_mk_text (p->dh, mem, "\n", top);
+    data1_mk_text(p->dh, mem, i4, n);
 
-    data1_mk_text (p->dh, mem, i4, n);
-    
-    data1_mk_tag_data_int (p->dh, n, "size", p->recordSize, mem);
+    data1_mk_tag_data_int(p->dh, n, "size", p->recordSize, mem);
 
     if (p->score != -1)
     {
-        data1_mk_text (p->dh, mem, i4, n);
-        data1_mk_tag_data_int (p->dh, n, "score", p->score, mem);
+        data1_mk_text(p->dh, mem, i4, n);
+        data1_mk_tag_data_int(p->dh, n, "score", p->score, mem);
     }
-    data1_mk_text (p->dh, mem, i4, n);
-    data1_mk_tag_data_zint (p->dh, n, "localnumber", p->localno, mem);
+    data1_mk_text(p->dh, mem, i4, n);
+    data1_mk_tag_data_zint(p->dh, n, "localnumber", p->localno, mem);
     if (p->fname)
     {
-        data1_mk_text (p->dh, mem, i4, n);
+        data1_mk_text(p->dh, mem, i4, n);
         data1_mk_tag_data_text(p->dh, n, "filename", p->fname, mem);
     }
-    data1_mk_text (p->dh, mem, i2, n);
+    data1_mk_text(p->dh, mem, i2, n);
 }
 
 int zebra_grs_retrieve(void *clientData, struct recRetrieveCtrl *p,
@@ -1082,7 +1082,7 @@ int zebra_grs_retrieve(void *clientData, struct recRetrieveCtrl *p,
     const Odr_oid *requested_schema = 0;
     data1_marctab *marctab;
     int dummy;
-    
+
     mem = nmem_create();
     gri.stream = p->stream;
     gri.mem = mem;
@@ -1094,17 +1094,17 @@ int zebra_grs_retrieve(void *clientData, struct recRetrieveCtrl *p,
     if (!node)
     {
        p->diagnostic = YAZ_BIB1_SYSTEM_ERROR_IN_PRESENTING_RECORDS;
-        nmem_destroy (mem);
+        nmem_destroy(mem);
        return 0;
     }
     data1_concat_text(p->dh, mem, node);
 
-    data1_remove_idzebra_subtree (p->dh, node);
+    data1_remove_idzebra_subtree(p->dh, node);
 
 #if 0
-    data1_pr_tree (p->dh, node, stdout);
+    data1_pr_tree(p->dh, node, stdout);
 #endif
-    top = data1_get_root_tag (p->dh, node);
+    top = data1_get_root_tag(p->dh, node);
 
     yaz_log(YLOG_DEBUG, "grs_retrieve: size");
     tagname = data1_systag_lookup(node->u.root.absyn, "size", "size");
@@ -1116,7 +1116,7 @@ int zebra_grs_retrieve(void *clientData, struct recRetrieveCtrl *p,
        sprintf(dnew->u.data.data, "%d", p->recordSize);
        dnew->u.data.len = strlen(dnew->u.data.data);
     }
-    
+
     tagname = data1_systag_lookup(node->u.root.absyn, "rank", "rank");
     if (tagname && p->score >= 0 &&
        (dnew = data1_mk_tag_data_wd(p->dh, top, tagname, mem)))
@@ -1136,7 +1136,7 @@ int zebra_grs_retrieve(void *clientData, struct recRetrieveCtrl *p,
         yaz_log(YLOG_DEBUG, "grs_retrieve: %s", tagname);
        dnew->u.data.what = DATA1I_text;
        dnew->u.data.data = dnew->lbuf;
-        
+
        sprintf(dnew->u.data.data, ZINT_FORMAT, p->localno);
        dnew->u.data.len = strlen(dnew->u.data.data);
     }
@@ -1148,10 +1148,10 @@ int zebra_grs_retrieve(void *clientData, struct recRetrieveCtrl *p,
     assert(p->input_format);
 
     if (!oid_oidcmp(p->input_format, yaz_oid_recsyn_xml))
-        zebra_xml_metadata (p, top, mem);
+        zebra_xml_metadata(p, top, mem);
 
 #if 0
-    data1_pr_tree (p->dh, node, stdout);
+    data1_pr_tree(p->dh, node, stdout);
 #endif
     if (p->comp && p->comp->which == Z_RecordComp_complex &&
        p->comp->u.complex->generic &&
@@ -1161,31 +1161,30 @@ int zebra_grs_retrieve(void *clientData, struct recRetrieveCtrl *p,
         requested_schema = p->comp->u.complex->generic->schema.oid;
     }
     /* If schema has been specified, map if possible, then check that
-     * we got the right one 
+     * we got the right one
      */
     if (requested_schema)
     {
        yaz_log(YLOG_DEBUG, "grs_retrieve: schema mapping");
        for (map = node->u.root.absyn->maptabs; map; map = map->next)
        {
-           // if (map->target_absyn_ref == requested_schema)
            if (!oid_oidcmp(map->oid, requested_schema))
            {
                onode = node;
                if (!(node = data1_map_record(p->dh, onode, map, mem)))
                {
                    p->diagnostic = YAZ_BIB1_SYSTEM_ERROR_IN_PRESENTING_RECORDS;
-                   nmem_destroy (mem);
+                   nmem_destroy(mem);
                    return 0;
                }
                break;
            }
        }
-       if (node->u.root.absyn 
+       if (node->u.root.absyn
             && oid_oidcmp(requested_schema, node->u.root.absyn->oid))
        {
            p->diagnostic = YAZ_BIB1_RECORD_NOT_AVAILABLE_IN_REQUESTED_SYNTAX;
-           nmem_destroy (mem);
+           nmem_destroy(mem);
            return 0;
        }
     }
@@ -1204,20 +1203,20 @@ int zebra_grs_retrieve(void *clientData, struct recRetrieveCtrl *p,
                 if (!(node = data1_map_record(p->dh, onode, map, mem)))
                 {
                     p->diagnostic = YAZ_BIB1_SYSTEM_ERROR_IN_PRESENTING_RECORDS;
-                    nmem_destroy (mem);
+                    nmem_destroy(mem);
                     return 0;
                 }
                 break;
             }
         }
     yaz_log(YLOG_DEBUG, "grs_retrieve: schemaIdentifier");
-    if (node->u.root.absyn && node->u.root.absyn->oid 
+    if (node->u.root.absyn && node->u.root.absyn->oid
         && !oid_oidcmp(p->input_format, yaz_oid_recsyn_grs_1))
     {
         char oid_str[OID_STR_MAX];
         char *dot_str = oid_oid_to_dotstring(node->u.root.absyn->oid, oid_str);
-        
-        if (dot_str && (dnew = data1_mk_tag_data_wd(p->dh, top, 
+
+        if (dot_str && (dnew = data1_mk_tag_data_wd(p->dh, top,
                                                     "schemaIdentifier", mem)))
         {
             dnew->u.data.what = DATA1I_oid;
@@ -1238,7 +1237,7 @@ int zebra_grs_retrieve(void *clientData, struct recRetrieveCtrl *p,
        selected = 1;
 
 #if 0
-    data1_pr_tree (p->dh, node, stdout);
+    data1_pr_tree(p->dh, node, stdout);
 #endif
     yaz_log(YLOG_DEBUG, "grs_retrieve: transfer syntax mapping");
 
@@ -1248,10 +1247,10 @@ int zebra_grs_retrieve(void *clientData, struct recRetrieveCtrl *p,
     if (!oid_oidcmp(p->input_format, yaz_oid_recsyn_xml))
     {
 #if 0
-        data1_pr_tree (p->dh, node, stdout);
+        data1_pr_tree(p->dh, node, stdout);
 #endif
        /* default output encoding for XML is UTF-8 */
-       data1_iconv (p->dh, mem, node,
+       data1_iconv(p->dh, mem, node,
                     p->encoding ? p->encoding : "UTF-8",
                     data1_get_encoding(p->dh, node));
 
@@ -1260,14 +1259,14 @@ int zebra_grs_retrieve(void *clientData, struct recRetrieveCtrl *p,
            p->diagnostic = YAZ_BIB1_RECORD_NOT_AVAILABLE_IN_REQUESTED_SYNTAX;
        else
        {
-           char *new_buf = (char*) odr_malloc (p->odr, p->rec_len);
-           memcpy (new_buf, p->rec_buf, p->rec_len);
+           char *new_buf = (char*) odr_malloc(p->odr, p->rec_len);
+           memcpy(new_buf, p->rec_buf, p->rec_len);
            p->rec_buf = new_buf;
        }
     }
     else if (!oid_oidcmp(p->input_format, yaz_oid_recsyn_grs_1))
     {
-       data1_iconv (p->dh, mem, node, "UTF-8", data1_get_encoding(p->dh, node));
+       data1_iconv(p->dh, mem, node, "UTF-8", data1_get_encoding(p->dh, node));
        dummy = 0;
        if (!(p->rec_buf = data1_nodetogr(p->dh, node, selected,
                                          p->odr, &dummy)))
@@ -1278,8 +1277,8 @@ int zebra_grs_retrieve(void *clientData, struct recRetrieveCtrl *p,
     else if (!oid_oidcmp(p->input_format, yaz_oid_recsyn_explain))
     {
        /* ensure our data1 tree is UTF-8 */
-       data1_iconv (p->dh, mem, node, "UTF-8", data1_get_encoding(p->dh, node));
-       
+       data1_iconv(p->dh, mem, node, "UTF-8", data1_get_encoding(p->dh, node));
+
        if (!(p->rec_buf = data1_nodetoexplain(p->dh, node, selected,
                                               p->odr)))
            p->diagnostic = YAZ_BIB1_RECORD_NOT_AVAILABLE_IN_REQUESTED_SYNTAX;
@@ -1289,7 +1288,7 @@ int zebra_grs_retrieve(void *clientData, struct recRetrieveCtrl *p,
     else if (!oid_oidcmp(p->input_format, yaz_oid_recsyn_summary))
     {
        /* ensure our data1 tree is UTF-8 */
-       data1_iconv (p->dh, mem, node, "UTF-8", data1_get_encoding(p->dh, node));
+       data1_iconv(p->dh, mem, node, "UTF-8", data1_get_encoding(p->dh, node));
        if (!(p->rec_buf = data1_nodetosummary(p->dh, node, selected,
                                               p->odr)))
            p->diagnostic = YAZ_BIB1_RECORD_NOT_AVAILABLE_IN_REQUESTED_SYNTAX;
@@ -1299,30 +1298,30 @@ int zebra_grs_retrieve(void *clientData, struct recRetrieveCtrl *p,
     else if (!oid_oidcmp(p->input_format, yaz_oid_recsyn_sutrs))
     {
        if (p->encoding)
-            data1_iconv (p->dh, mem, node, p->encoding,
+            data1_iconv(p->dh, mem, node, p->encoding,
                         data1_get_encoding(p->dh, node));
        if (!(p->rec_buf = data1_nodetobuf(p->dh, node, selected,
                                           &p->rec_len)))
            p->diagnostic = YAZ_BIB1_RECORD_NOT_AVAILABLE_IN_REQUESTED_SYNTAX;
        else
        {
-           char *new_buf = (char*) odr_malloc (p->odr, p->rec_len);
-           memcpy (new_buf, p->rec_buf, p->rec_len);
+           char *new_buf = (char*) odr_malloc(p->odr, p->rec_len);
+           memcpy(new_buf, p->rec_buf, p->rec_len);
            p->rec_buf = new_buf;
        }
     }
     else if (!oid_oidcmp(p->input_format, yaz_oid_recsyn_soif))
     {
        if (p->encoding)
-            data1_iconv (p->dh, mem, node, p->encoding,
+            data1_iconv(p->dh, mem, node, p->encoding,
                         data1_get_encoding(p->dh, node));
        if (!(p->rec_buf = data1_nodetosoif(p->dh, node, selected,
                                            &p->rec_len)))
            p->diagnostic = YAZ_BIB1_RECORD_NOT_AVAILABLE_IN_REQUESTED_SYNTAX;
        else
        {
-           char *new_buf = (char*) odr_malloc (p->odr, p->rec_len);
-           memcpy (new_buf, p->rec_buf, p->rec_len);
+           char *new_buf = (char*) odr_malloc(p->odr, p->rec_len);
+           memcpy(new_buf, p->rec_buf, p->rec_len);
            p->rec_buf = new_buf;
        }
     }
@@ -1341,15 +1340,15 @@ int zebra_grs_retrieve(void *clientData, struct recRetrieveCtrl *p,
             else
             {
                 if (p->encoding)
-                    data1_iconv (p->dh, mem, node, p->encoding,
+                    data1_iconv(p->dh, mem, node, p->encoding,
                                  data1_get_encoding(p->dh, node));
                 if (!(p->rec_buf = data1_nodetomarc(p->dh, marctab, node,
                                                     selected, &p->rec_len)))
                     p->diagnostic = YAZ_BIB1_RECORD_NOT_AVAILABLE_IN_REQUESTED_SYNTAX;
                 else
                 {
-                    char *new_buf = (char*) odr_malloc (p->odr, p->rec_len);
-                    memcpy (new_buf, p->rec_buf, p->rec_len);
+                    char *new_buf = (char*) odr_malloc(p->odr, p->rec_len);
+                    memcpy(new_buf, p->rec_buf, p->rec_len);
                     p->rec_buf = new_buf;
                 }
             }
@@ -1362,6 +1361,7 @@ int zebra_grs_retrieve(void *clientData, struct recRetrieveCtrl *p,
 /*
  * Local variables:
  * c-basic-offset: 4
+ * c-file-style: "Stroustrup"
  * indent-tabs-mode: nil
  * End:
  * vim: shiftwidth=4 tabstop=8 expandtab