2 * Copyright (c) 1995, Index Data.
3 * See the file LICENSE for details.
4 * Sebastian Hammer, Adam Dickmeiss
7 * Revision 1.2 1997-04-30 08:52:11 quinn
10 * Revision 1.1 1996/10/08 10:43:20 quinn
21 * This module generates SOIF (Simple Object Interchange Format) records
22 * from d1-nodes. nested elements are flattened out, depth first, by
23 * concatenating the tag names at each level.
26 static int nodetoelement(data1_node *n, int select, char *prefix, WRBUF b)
31 for (c = n->child; c; c = c->next)
35 if (c->which == DATA1N_tag)
37 if (select && !c->u.tag.node_selected)
39 if (c->u.tag.element && c->u.tag.element->tag)
40 tag = c->u.tag.element->tag->names->name; /* first name */
42 tag = c->u.tag.tag; /* local string tag */
45 sprintf(tmp, "%s-%s", prefix, tag);
49 if (nodetoelement(c, select, tmp, b) < 0)
52 else if (c->which == DATA1N_data)
54 char *p = c->u.data.data;
55 int l = c->u.data.len;
57 wrbuf_write(b, prefix, strlen(prefix));
59 sprintf(tmp, "{%d}:\t", l);
60 wrbuf_write(b, tmp, strlen(tmp));
68 char *data1_nodetosoif(data1_node *n, int select, int *len)
78 if (n->which != DATA1N_root)
80 sprintf(buf, "@%s{\n", n->u.root.type);
81 wrbuf_write(b, buf, strlen(buf));
82 if (nodetoelement(n, select, "", b))
84 wrbuf_write(b, "}\n", 2);