X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=retrieval%2Fd1_write.c;h=b884248c64c473c425d6ec65001167f5e6ce7d11;hb=5b690aebb8dc2d05cad8f668de8fd821a1c231fa;hp=565af5e0b35fc56891d9a634ed5a07b1849c7ea6;hpb=fcbe67e161824f159620ed029a15bf42f719d0c8;p=yaz-moved-to-github.git diff --git a/retrieval/d1_write.c b/retrieval/d1_write.c index 565af5e..b884248 100644 --- a/retrieval/d1_write.c +++ b/retrieval/d1_write.c @@ -3,7 +3,7 @@ * See the file LICENSE for details. * Sebastian Hammer, Adam Dickmeiss * - * $Id: d1_write.c,v 1.17 2002-08-23 14:25:07 adam Exp $ + * $Id: d1_write.c,v 1.19 2002-10-08 20:14:44 adam Exp $ */ #include @@ -65,6 +65,28 @@ static void wrbuf_put_cdata(WRBUF b, const char *msg) wrbuf_write_cdata (b, msg, strlen(msg)); } +static void wrbuf_put_xattr(WRBUF b, data1_xattr *p) +{ + for (; p; p = p->next) + { + wrbuf_putc (b, ' '); + if (p->what == DATA1I_xmltext) + wrbuf_puts (b, p->name); + else + wrbuf_put_cdata (b, p->name); + if (p->value) + { + wrbuf_putc (b, '='); + wrbuf_putc (b, '"'); + if (p->what == DATA1I_text) + wrbuf_put_cdata (b, p->value); + else + wrbuf_puts (b, p->value); + wrbuf_putc (b, '"'); + } + } +} + static int nodetoidsgml(data1_node *n, int select, WRBUF b, int col, int pretty_format) { @@ -82,15 +104,7 @@ static int nodetoidsgml(data1_node *n, int select, WRBUF b, int col, indent (b, col); wrbuf_puts (b, "u.preprocess.target); - for (p = c->u.preprocess.attributes; p; p = p->next) - { - wrbuf_putc (b, ' '); - wrbuf_put_cdata (b, p->name); - wrbuf_putc (b, '='); - wrbuf_putc (b, '"'); - wrbuf_put_cdata (b, p->value); - wrbuf_putc (b, '"'); - } + wrbuf_put_xattr (b, c->u.preprocess.attributes); if (c->child) wrbuf_puts(b, " "); if (nodetoidsgml(c, select, b, (col > 40) ? 40 : col+2, @@ -100,7 +114,7 @@ static int nodetoidsgml(data1_node *n, int select, WRBUF b, int col, } else if (c->which == DATA1N_tag) { - if (select && c->u.tag.node_selected) + if (select && !c->u.tag.node_selected) continue; tag = c->u.tag.tag; if (!data1_matchstr(tag, "wellknown")) /* skip wellknown */ @@ -116,15 +130,7 @@ static int nodetoidsgml(data1_node *n, int select, WRBUF b, int col, indent (b, col); wrbuf_puts (b, "<"); wrbuf_put_cdata (b, tag); - for (p = c->u.tag.attributes; p; p = p->next) - { - wrbuf_putc (b, ' '); - wrbuf_put_cdata (b, p->name); - wrbuf_putc (b, '='); - wrbuf_putc (b, '"'); - wrbuf_put_cdata (b, p->value); - wrbuf_putc (b, '"'); - } + wrbuf_put_xattr (b, c->u.tag.attributes); wrbuf_puts(b, ">"); if (pretty_format) wrbuf_puts(b, "\n"); @@ -153,6 +159,9 @@ static int nodetoidsgml(data1_node *n, int select, WRBUF b, int col, wrbuf_puts (b, "