X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=parse-xml.c;h=0c00abd908a57678cfae6f47db31b45df5cd1f66;hb=adc35059e3ae7e8968bc6c7a835abc412920e9b5;hp=3a32ee36e2731b317fe6a083b77b4d0f23373e80;hpb=2fd5ae863380ca80272555ae606ac814dfd2e403;p=pspp diff --git a/parse-xml.c b/parse-xml.c index 3a32ee36e2..0c00abd908 100644 --- a/parse-xml.c +++ b/parse-xml.c @@ -36,15 +36,26 @@ print_containment (xmlNode *node) { if (node->type == XML_ELEMENT_NODE) { - const char *child_names[512]; - int child_name_cnt[512]; + const char *child_names[5000]; + int child_name_cnt[5000]; int n_names = 0; for (xmlNode *child = node->children; child; child = child->next) { const char *name; if (child->type == XML_ELEMENT_NODE) - name = (char *) child->name; + { + name = (char *) child->name; + if (!strcmp((char *) node->name, "derivedVariable") + && !strcmp((char *) name, "extension")) + { + char *p; + asprintf(&p, "%s/%s", + (char *) xmlGetProp (child, (xmlChar *) "from"), + (char *) xmlGetProp (child, (xmlChar *) "helpId")); + name = p; + } + } else if (child->type == XML_TEXT_NODE) name = ""; else if (child->type == XML_CDATA_SECTION_NODE) @@ -58,17 +69,19 @@ print_containment (xmlNode *node) else name = ""; +#if 0 for (int i = 0; i < n_names; i++) if (!strcmp(name, child_names[i])) { child_name_cnt[i]++; goto next; } +#endif child_names[n_names] = name; child_name_cnt[n_names] = 1; n_names++; - next:; + //next:; } printf ("%s", node->name); @@ -104,6 +117,14 @@ print_labels (xmlNode *node) } } +static int +compare_strings(const void *a_, const void *b_) +{ + const void *const *ap = a_; + const void *const *bp = b_; + return strcmp (*ap, *bp); +} + static void print_attributes (xmlNode * a_node) { @@ -111,9 +132,19 @@ print_attributes (xmlNode * a_node) { if (node->type == XML_ELEMENT_NODE) { - printf ("%s", node->name); + printf ("%s<-%s", node->name, node->parent->name); + + char *attrs[500]; + int n_attrs = 0; for (xmlAttr *attr = node->properties; attr; attr = attr->next) - printf (" %s", attr->name); + if (!strcmp((char *) attr->name, "baseFormat")) + printf(" baseFormat=%s", attr->children->content); + else + attrs[n_attrs++] = (char *) attr->name; + qsort(attrs, n_attrs, sizeof *attrs, compare_strings); + + for (int i = 0; i < n_attrs; i++) + printf (" %s", attrs[i]); putchar ('\n'); }