-data1_node *data1_mk_node_wp (data1_handle dh, NMEM mem, data1_node *parent)
-{
- data1_node *res = data1_mk_node (dh, mem);
-
- if (!parent)
- res->root = res;
- else
- {
- res->root = parent->root;
- res->parent = parent;
- if (!parent->child)
- parent->child = parent->last_child = res;
- else
- parent->last_child->next = res;
- parent->num_children++;
- parent->last_child = res;
- }
- return res;
-}
-
-static void destroy_data (struct data1_node *n)
-{
- assert (n->which == DATA1N_data);
- xfree (n->u.data.data);
-}
-
-data1_node *data1_mk_node_text (data1_handle dh, NMEM mem, data1_node *parent,
- const char *buf, size_t len)
-{
- data1_node *res = data1_mk_node_wp (dh, mem, parent);
- res->which = DATA1N_data;
- res->u.data.formatted_text = 0;
- res->u.data.what = DATA1I_text;
- res->u.data.len = len;
- if (res->u.data.len > DATA1_LOCALDATA) {
- res->u.data.data = xmalloc (res->u.data.len);
- res->destroy = destroy_data;
- }
- else
- res->u.data.data = res->lbuf;
- memcpy (res->u.data.data, buf, res->u.data.len);
- return res;
-}
-
-data1_node *data1_mk_node_tag (data1_handle dh, NMEM mem, data1_node *parent,
- const char *tag, size_t len)
-{
- data1_element *elem = NULL;
- data1_node *partag = get_parent_tag(dh, parent);
- data1_node *res;
- data1_element *e = NULL;
- int localtag = 0;
-
- res = data1_mk_node_wp (dh, mem, parent);
-
- res->which = DATA1N_tag;
- res->u.tag.tag = res->lbuf;
- res->u.tag.get_bytes = -1;
-
- if (len >= DATA1_LOCALDATA)
- len = DATA1_LOCALDATA-1;
-
- memcpy (res->u.tag.tag, tag, len);
- res->u.tag.tag[len] = '\0';
-
- if (parent->which == DATA1N_variant)
- return res;
- if (partag)
- if (!(e = partag->u.tag.element))
- localtag = 1;
-
- elem = data1_getelementbytagname (dh, res->root->u.root.absyn, e,
- res->u.tag.tag);
- res->u.tag.element = elem;
- res->u.tag.node_selected = 0;
- res->u.tag.make_variantlist = 0;
- res->u.tag.no_data_requested = 0;
- return res;
-}
-