New source grs1disp.c
[yaz-moved-to-github.git] / retrieval / d1_sutrs.c
index 504007f..ade87d0 100644 (file)
@@ -1,37 +1,23 @@
 /*
- * Copyright (c) 1995-1997, Index Data.
+ * Copyright (c) 1995-2002, Index Data.
  * See the file LICENSE for details.
  * Sebastian Hammer, Adam Dickmeiss
  *
- * $Log: d1_sutrs.c,v $
- * Revision 1.4  1997-09-17 12:10:38  adam
- * YAZ version 1.4.
- *
- * Revision 1.3  1995/12/15 16:57:11  quinn
- * Added formatted-text.
- *
- * Revision 1.2  1995/11/01  13:54:49  quinn
- * Minor adjustments
- *
- * Revision 1.1  1995/11/01  11:56:09  quinn
- * Added Retrieval (data management) functions en masse.
- *
+ * $Id: d1_sutrs.c,v 1.8 2002-10-08 22:18:23 adam Exp $
  *
  */
 
-#include <ctype.h>
-
-#include <data1.h>
+#include <yaz/data1.h>
 
 #define NTOBUF_INDENT   2
 #define NTOBUF_MARGIN 75
 
-static int wordlen(char *b)
+static int wordlen(char *b, int i)
 {
     int l = 0;
 
-    while (*b && !isspace(*b))
-       l++, b++;
+    while (i && !d1_isspace(*b))
+       l++, b++, i--;
     return l;
 }
 
@@ -69,7 +55,8 @@ static int nodetobuf(data1_node *n, int select, WRBUF b, int indent, int col)
            int l = c->u.data.len;
            int first = 0;
 
-           if (c->u.data.what == DATA1I_text && c->u.data.formatted_text)
+           if ((c->u.data.what == DATA1I_text ||
+               c->u.data.what == DATA1I_xmltext) && c->u.data.formatted_text)
            {
                wrbuf_putc(b, '\n');
                wrbuf_write(b, c->u.data.data, c->u.data.len);
@@ -77,18 +64,19 @@ static int nodetobuf(data1_node *n, int select, WRBUF b, int indent, int col)
                wrbuf_write(b, line, strlen(line));
                col = indent * NTOBUF_INDENT;
            }
-           else if (c->u.data.what == DATA1I_text)
+           else if (c->u.data.what == DATA1I_text ||
+                    c->u.data.what == DATA1I_xmltext)
            {
                while (l)
                {
                    int wlen;
 
-                   while (l && isspace(*p))
+                   while (l && d1_isspace(*p))
                        p++, l--;
                    if (!l)
                        break;
                    /* break if we'll cross margin and word is not too long */
-                   if (col + (wlen = wordlen(p)) > NTOBUF_MARGIN && wlen <
+                   if (col + (wlen = wordlen(p, l)) > NTOBUF_MARGIN && wlen <
                        NTOBUF_MARGIN - indent * NTOBUF_INDENT)
                    {
                        sprintf(line, "\n%*s", indent * NTOBUF_INDENT, "");
@@ -101,7 +89,7 @@ static int nodetobuf(data1_node *n, int select, WRBUF b, int indent, int col)
                        wrbuf_putc(b, ' ');
                        col++;
                    }
-                   while (l && !isspace(*p))
+                   while (l && !d1_isspace(*p))
                    {
                        if (col > NTOBUF_MARGIN)
                        {