+/*
+ * Locate some data under this node. This routine should handle variants
+ * prettily.
+ */
+static char *get_data(data1_node *n, int *len)
+{
+ char *r;
+ data1_node *np = 0;
+
+ while (n)
+ {
+ if (n->which == DATA1N_data)
+ {
+ int i;
+ *len = n->u.data.len;
+
+ for (i = 0; i<*len; i++)
+ if (!d1_isspace(n->u.data.data[i]))
+ break;
+ while (*len && d1_isspace(n->u.data.data[*len - 1]))
+ (*len)--;
+ *len = *len - i;
+ if (*len > 0)
+ return n->u.data.data + i;
+ }
+ if (n->which == DATA1N_tag)
+ np = n->child;
+ n = n->next;
+ if (!n)
+ {
+ n = np;
+ np = 0;
+ }
+ }
+ r = "";
+ *len = strlen(r);
+ return r;
+}
+