From 8e6b961d50a3cad40b5686ccff47540e7405135d Mon Sep 17 00:00:00 2001 From: Adam Dickmeiss Date: Tue, 6 Jul 1999 12:16:00 +0000 Subject: [PATCH 1/1] Improved layout generated record in SGML/XML format. --- retrieval/d1_write.c | 55 ++++++++++++++++++++++++-------------------------- 1 file changed, 26 insertions(+), 29 deletions(-) diff --git a/retrieval/d1_write.c b/retrieval/d1_write.c index b631903..3cff061 100644 --- a/retrieval/d1_write.c +++ b/retrieval/d1_write.c @@ -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\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); -- 1.7.10.4