From: Ben Pfaff <blp@cs.stanford.edu>
Date: Mon, 17 Jul 2017 22:29:06 +0000 (-0700)
Subject: parse-xml: New features root: and musthave:.
X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=af2be89cc013159b9f339e12fb107a9087f9540e;p=pspp

parse-xml: New features root: and musthave:.
---

diff --git a/parse-xml.c b/parse-xml.c
index d8726abcce..15c4ba2e9b 100644
--- a/parse-xml.c
+++ b/parse-xml.c
@@ -205,14 +205,14 @@ print_id (xmlDoc *doc, xmlNode *node, const char *id)
 }
 
 static __attribute__((unused)) xmlNode *
-find_page_setup (xmlNode *node)
+find_node (xmlNode *node, const char *name)
 {
   for (; node; node = node->next)
     {
-      if (node->name && !strcmp ((char *) node->name, "pageSetup"))
+      if (node->name && !strcmp ((char *) node->name, name))
         return node;
 
-      xmlNode *ps = find_page_setup (node->children);
+      xmlNode *ps = find_node (node->children, name);
       if (ps)
         return ps;
     }
@@ -279,14 +279,6 @@ main (int argc, char **argv)
 
   xmlNode *root = xmlDocGetRootElement(doc);
 
-#if 0
-  /* Limit what we look at to pageSetup node and below. */
-  root = find_page_setup(root);
-  if (!root)
-    return 0;
-  root->next = NULL;
-#endif
-
   for (int i = 2; i < argc; i++)
     {
       if (!strcmp(argv[i], "parents"))
@@ -305,6 +297,19 @@ main (int argc, char **argv)
         print_attribute (root, argv[i] + 5);
       else if (!strncmp(argv[i], "id:", 3))
         print_id (doc, root, argv[i] + 3);
+      else if (!strncmp(argv[i], "root:", 5))
+        {
+          /* Limit content to descendants of the given node. */
+          root = find_node (root, argv[i] + 5);
+          if (!root)
+            return 0;
+          root->next = NULL;
+        }
+      else if (!strncmp(argv[i], "musthave:", 9))
+        {
+          if (!find_node (root, argv[i] + 9))
+            return 0;
+        }
       else if (!strcmp(argv[i], "labels"))
         print_labels (root);
       else if (!strncmp(argv[i], "version=", 8))