X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=retrieval%2Fd1_write.c;h=b884248c64c473c425d6ec65001167f5e6ce7d11;hb=c9b7cb5f4ca3e9c570d921307e2d44ce32f51801;hp=cba4ae9cbece263b36710f0522b42dc7202e0210;hpb=32ff7687bdfe5b972d54b1ba4f3078cee011fadf;p=yaz-moved-to-github.git diff --git a/retrieval/d1_write.c b/retrieval/d1_write.c index cba4ae9..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.16 2002-07-29 20:04:08 adam Exp $ + * $Id: d1_write.c,v 1.19 2002-10-08 20:14:44 adam Exp $ */ #include @@ -42,17 +42,18 @@ static void wrbuf_write_cdata(WRBUF b, const char *msg, int len) case '"': wrbuf_puts (b, """); break; + case '\'': + wrbuf_puts (b, "'"); + break; case '>': wrbuf_puts (b, ">"); break; case '<': wrbuf_puts (b, "<"); break; -#if 0 case '&': wrbuf_puts (b, "&"); break; -#endif default: wrbuf_putc(b, msg[i]); } @@ -64,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) { @@ -81,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, @@ -99,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 */ @@ -115,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"); @@ -152,6 +159,9 @@ static int nodetoidsgml(data1_node *n, int select, WRBUF b, int col, wrbuf_puts (b, "