{
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 = "<text>";
else if (child->type == XML_CDATA_SECTION_NODE)
else
name = "<other>";
+#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);
}
}
+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)
{
{
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');
}
}
}
+static void
+print_element (xmlDoc *doc, xmlNode *node, const char *element)
+{
+ for (; node; node = node->next)
+ {
+ if (!strcmp(element, (char *) node->name))
+ {
+ xmlBuffer *buf = xmlBufferCreate();
+ xmlNodeDump (buf, doc, node, 0, 1);
+ xmlBufferDump (stdout, buf);
+ xmlBufferFree (buf);
+ putchar ('\n');
+ }
+
+ print_element (doc, node->children, element);
+ }
+}
+
static __attribute__((unused)) xmlNode *
find_page_setup (xmlNode *node)
{
print_cdata (root);
else if (!strcmp(argv[2], "text"))
print_text (root);
+ else if (!strncmp(argv[2], "element:", 8))
+ print_element (doc, root, argv[2] + 8);
else if (!strncmp(argv[2], "attr:", 5))
print_attribute (root, argv[2] + 5);
else if (!strcmp(argv[2], "labels"))