+static void indent (WRBUF b, int col)
+{
+ int i;
+ for (i = 0; i<col; i++)
+ wrbuf_putc (b, ' ');
+}
+
+static void wrbuf_write_cdata(WRBUF b, const char *msg, int len)
+{
+ int i;
+
+ for (i = 0; i < len; i++)
+ {
+ switch (msg[i])
+ {
+ case '"':
+ wrbuf_puts (b, """);
+ break;
+ case '\'':
+ wrbuf_puts (b, "'");
+ break;
+ case '>':
+ wrbuf_puts (b, ">");
+ break;
+ case '<':
+ wrbuf_puts (b, "<");
+ break;
+ case '&':
+ wrbuf_puts (b, "&");
+ break;
+ default:
+ wrbuf_putc(b, msg[i]);
+ }
+ }
+}
+
+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)