Browse Source

Add inter-dependency rules to --interface-description output
See http://trac.osgeo.org/grass/wiki/Grass7Planning#Tobebackported
(merge https://trac.osgeo.org/grass/changeset/64226 from trunk)


git-svn-id: https://svn.osgeo.org/grass/grass/branches/releasebranch_7_0@64375 15284696-431f-4ddb-bdfa-cd5b030d7da7

Martin Landa 10 years ago
parent
commit
85f4a87598

+ 20 - 0
gui/xml/grass-interface.dtd

@@ -152,3 +152,23 @@
 <!--	list of keywords that describes a task
 -->
 <!ELEMENT keywords   (#PCDATA)>
+
+<!--	option inter-dependency rules
+-->
+<!ELEMENT rules   (rule+)>
+
+<!--	an option inter-dependency rule
+-->
+<!ELEMENT rule   (rule-flag*, rule-option*)>
+<!ATTLIST rule   type            (exclusive | required | requires | requires-all |
+                                  excludes | collective) #REQUIRED>
+
+<!--	a flag name
+-->
+<!ELEMENT rule-flag    EMPTY>
+<!ATTLIST rule-flag    key       CDATA #REQUIRED>
+
+<!--	an option name
+-->
+<!ELEMENT rule-option    EMPTY>
+<!ATTLIST rule-option    key       CDATA #REQUIRED>

+ 37 - 0
lib/gis/parser_dependencies.c

@@ -408,3 +408,40 @@ int G__has_required_rule(void)
     }
     return FALSE;
 }
+
+static const char * const rule_types[] = {
+    "exclusive",
+    "required",
+    "requires",
+    "requires-all",
+    "excludes",
+    "collective"
+};
+
+void G__describe_option_rules_xml(FILE *fp)
+{
+    unsigned int i, j;
+
+    if (!rules.count)
+	return;
+
+    fprintf(fp, "\t<rules>\n");
+    for (i = 0; i < rules.count; i++) {
+	const struct rule *rule = &((const struct rule *) rules.data)[i];
+	fprintf(fp, "\t\t<rule type=\"%s\">\n", rule_types[rule->type]);
+	for (j = 0; j < rule->count; j++) {
+	    void *p = rule->opts[j];
+	    if (is_flag(p)) {
+		const struct Flag *flag = (const struct Flag *) p;
+		fprintf(fp, "\t\t\t<rule-flag key=\"%c\"/>\n", flag->key);
+	    }
+	    else {
+		const struct Option *opt = (const struct Option *) p;
+		fprintf(fp, "\t\t\t<rule-option key=\"%s\"/>\n", opt->key);
+	    }
+	}
+	fprintf(fp, "\t\t</rule>\n");
+    }
+    fprintf(fp, "\t</rules>\n");
+}
+

+ 2 - 0
lib/gis/parser_interface.c

@@ -352,5 +352,7 @@ void G__usage_xml(void)
     fprintf(stdout, "\n\t\t</description>\n");
     fprintf(stdout, "\t</flag>\n");
 
+    G__describe_option_rules_xml(stdout);
+
     fprintf(stdout, "</task>\n");
 }

+ 1 - 0
lib/gis/parser_local_proto.h

@@ -59,6 +59,7 @@ void G__print_keywords(FILE *, void (*)(FILE *, const char *));
 void G__check_option_rules(void);
 void G__describe_option_rules(void);
 int G__has_required_rule(void);
+void G__describe_option_rules_xml(FILE *);
 
 #endif