Improved layout generated record in SGML/XML format.
authorAdam Dickmeiss <adam@indexdata.dk>
Tue, 6 Jul 1999 12:16:00 +0000 (12:16 +0000)
committerAdam Dickmeiss <adam@indexdata.dk>
Tue, 6 Jul 1999 12:16:00 +0000 (12:16 +0000)
retrieval/d1_write.c

index b631903..3cff061 100644 (file)
@@ -1,10 +1,13 @@
 /*
- * Copyright (c) 1995-1998, Index Data.
+ * Copyright (c) 1995-1999, Index Data.
  * See the file LICENSE for details.
  * Sebastian Hammer, Adam Dickmeiss
  *
  * $Log: d1_write.c,v $
- * Revision 1.5  1998-06-05 08:57:43  adam
+ * Revision 1.6  1999-07-06 12:16:00  adam
+ * Improved layout generated record in SGML/XML format.
+ *
+ * Revision 1.5  1998/06/05 08:57:43  adam
  * Fixed problem with function wordlen.
  *
  * Revision 1.4  1998/05/18 13:07:08  adam
@@ -58,76 +61,70 @@ static int nodetoidsgml(data1_node *n, int select, WRBUF b, int col)
                tag = c->u.tag.element->tag->names->name; /* first name */
            else
                tag = c->u.tag.tag; /* local string tag */
-           if (data1_matchstr(tag, "wellknown")) /* skip wellknown */
+           if (!data1_matchstr(tag, "wellknown")) /* skip wellknown */
+           {
+               if (nodetoidsgml(c, select, b, col) < 0)
+                   return -1;
+           }
+           else
            {
-               sprintf(line, "<%s>\n", tag);
+               sprintf(line, "%*s<%s>\n", col, "", tag);
+               wrbuf_write(b, line, strlen(line));
+               if (nodetoidsgml(c, select, b, (col > 40) ? 40 : col+2) < 0)
+                   return -1;
+               sprintf (line, "%*s</%s>\n", col, "", tag);
                wrbuf_write(b, line, strlen(line));
-               col = 0;
            }
-           if (nodetoidsgml(c, select, b, col) < 0)
-               return -1;
-           wrbuf_write(b, "</>\n", 4);
-           col = 0;
        }
        else if (c->which == DATA1N_data)
        {
            char *p = c->u.data.data;
            int l = c->u.data.len;
            int first = 1;
+           int lcol = col;
 
+           sprintf(line, "%*s", col, "");
+           wrbuf_write(b, line, strlen(line));
            switch (c->u.data.what)
            {
            case DATA1I_text:
                while (l)
                {
                    int wlen;
-
+                   
                    while (l && isspace(*p))
                        p++, l--;
                    if (!l)
                        break;
                    /* break if we'll cross margin and word is not too long */
-                   if (col + (wlen = wordlen(p, l)) > IDSGML_MARGIN && wlen <
+                   if (lcol + (wlen = wordlen(p, l)) > IDSGML_MARGIN && wlen <
                        IDSGML_MARGIN)
                    {
-                       sprintf(line, "\n");
-                       col = 0;
+                       sprintf(line, "\n%*s", col, "");
+                       lcol = col;
                        wrbuf_write(b, line, strlen(line));
                        first = 1;
                    }
                    if (!first)
                    {
                        wrbuf_putc(b, ' ');
-                       col++;
+                       lcol++;
                    }
                    while (l && !isspace(*p))
                    {
-#if 0
-                       if (col > NTOBUF_MARGIN)
-                       {
-                           wrbuf_putc(b, '=');
-                           wrbuf_putc(b, '\n');
-                           sprintf(line, "%*s", indent * NTOBUF_INDENT, "");
-                           wrbuf_write(b, line, strlen(line));
-                           col = indent * NTOBUF_INDENT;
-                       }
-#endif
                        wrbuf_putc(b, *p);
                        p++;
                        l--;
-                       col++;
+                       lcol++;
                    }
                    first = 0;
                }
                wrbuf_write(b, "\n", 1);
-               col = 0;
                break;
            case DATA1I_num:
-               wrbuf_putc(b, ' ');
                wrbuf_write(b, c->u.data.data, c->u.data.len);
                break;
            case DATA1I_oid:
-               wrbuf_putc(b, ' ');
                wrbuf_write(b, c->u.data.data, c->u.data.len);
            }
        }
@@ -139,7 +136,7 @@ char *data1_nodetoidsgml (data1_handle dh, data1_node *n, int select, int *len)
 {
     WRBUF b = data1_get_wrbuf (dh);
     char line[1024];
-
+    
     wrbuf_rewind(b);
     
     sprintf(line, "<%s>\n", n->u.root.type);