[libxml2] Implement choice for name classes on attributes
- From: Daniel Veillard <veillard src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [libxml2] Implement choice for name classes on attributes
- Date: Thu, 28 Nov 2013 08:13:27 +0000 (UTC)
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]