[libxml2] Implement choice for name classes on attributes



commit 6473a41a49601da8355c4b407b99474ada170213
Author: Shaun McCance <shaunm gnome org>
Date:   Wed Oct 23 14:51:33 2013 -0400

    Implement choice for name classes on attributes
    
    https://bugzilla.gnome.org/show_bug.cgi?id=710744

 relaxng.c                   |   13 +++++++++++++
 result/relaxng/710744_1.err |    1 +
 result/relaxng/710744_2.err |    2 ++
 test/relaxng/710744.rng     |   16 ++++++++++++++++
 test/relaxng/710744_1.xml   |    2 ++
 test/relaxng/710744_2.xml   |    3 +++
 6 files changed, 37 insertions(+), 0 deletions(-)
---
diff --git a/relaxng.c b/relaxng.c
index bfaceb7..2bbecd5 100644
--- a/relaxng.c
+++ b/relaxng.c
@@ -9047,6 +9047,19 @@ xmlRelaxNGAttributeMatch(xmlRelaxNGValidCtxtPtr ctxt,
                 return (ret);
             list = list->next;
         }
+    } else if (define->type == XML_RELAXNG_CHOICE) {
+        xmlRelaxNGDefinePtr list;
+
+        list = define->nameClass;
+        while (list != NULL) {
+            ret = xmlRelaxNGAttributeMatch(ctxt, list, prop);
+            if (ret == 1)
+                return (1);
+            if (ret < 0)
+                return (ret);
+            list = list->next;
+        }
+        return (0);
     } else {
     TODO}
     return (1);
diff --git a/result/relaxng/710744_1 b/result/relaxng/710744_1
new file mode 100644
index 0000000..e69de29
diff --git a/result/relaxng/710744_1.err b/result/relaxng/710744_1.err
new file mode 100644
index 0000000..77437eb
--- /dev/null
+++ b/result/relaxng/710744_1.err
@@ -0,0 +1 @@
+./test/relaxng/710744_1.xml validates
diff --git a/result/relaxng/710744_2 b/result/relaxng/710744_2
new file mode 100644
index 0000000..e69de29
diff --git a/result/relaxng/710744_2.err b/result/relaxng/710744_2.err
new file mode 100644
index 0000000..ee8d8ac
--- /dev/null
+++ b/result/relaxng/710744_2.err
@@ -0,0 +1,2 @@
+./test/relaxng/710744_2.xml:3: element test: Relax-NG validity error : Invalid attribute foo for element test
+./test/relaxng/710744_2.xml fails to validate
diff --git a/test/relaxng/710744.rng b/test/relaxng/710744.rng
new file mode 100644
index 0000000..aeea0b8
--- /dev/null
+++ b/test/relaxng/710744.rng
@@ -0,0 +1,16 @@
+<?xml version="1.0"?>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0";>
+  <start>
+    <element name="test" ns="http://example.com/1/";>
+      <zeroOrMore>
+        <attribute>
+          <choice>
+            <nsName ns="http://example.com/1/"/>
+            <nsName ns="http://example.com/2/"/>
+          </choice>
+          <text/>
+        </attribute>
+      </zeroOrMore>
+    </element>
+  </start>
+</grammar>
diff --git a/test/relaxng/710744_1.xml b/test/relaxng/710744_1.xml
new file mode 100644
index 0000000..f17c808
--- /dev/null
+++ b/test/relaxng/710744_1.xml
@@ -0,0 +1,2 @@
+<ex1:test xmlns:ex1="http://example.com/1/";
+          ex1:foo="bar"/>
diff --git a/test/relaxng/710744_2.xml b/test/relaxng/710744_2.xml
new file mode 100644
index 0000000..1aef3a9
--- /dev/null
+++ b/test/relaxng/710744_2.xml
@@ -0,0 +1,3 @@
+<ex1:test xmlns:ex1="http://example.com/1/";
+          xmlns:ex3="http://example.com/3/";
+          ex3:foo="bar"/>


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]