summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--relaxng.c16
-rw-r--r--result/relaxng/anyName0_00
-rw-r--r--result/relaxng/anyName0_0.err1
-rw-r--r--result/relaxng/anyName0_err1
-rw-r--r--result/relaxng/anyName0_valid0
-rw-r--r--test/relaxng/anyName0.rng15
-rw-r--r--test/relaxng/anyName0_0.xml1
7 files changed, 28 insertions, 6 deletions
diff --git a/relaxng.c b/relaxng.c
index a3088cbd..8725444b 100644
--- a/relaxng.c
+++ b/relaxng.c
@@ -5363,11 +5363,15 @@ xmlRelaxNGParseNameClass(xmlRelaxNGParserCtxtPtr ctxt, xmlNodePtr node,
xmlNodePtr child;
xmlRelaxNGDefinePtr last = NULL;
- ret = xmlRelaxNGNewDefine(ctxt, node);
- if (ret == NULL)
- return (NULL);
- ret->parent = def;
- ret->type = XML_RELAXNG_CHOICE;
+ if (def->type == XML_RELAXNG_CHOICE) {
+ ret = def;
+ } else {
+ ret = xmlRelaxNGNewDefine(ctxt, node);
+ if (ret == NULL)
+ return (NULL);
+ ret->parent = def;
+ ret->type = XML_RELAXNG_CHOICE;
+ }
if (node->children == NULL) {
xmlRngPErr(ctxt, node, XML_RNGP_CHOICE_EMPTY,
@@ -5379,7 +5383,7 @@ xmlRelaxNGParseNameClass(xmlRelaxNGParserCtxtPtr ctxt, xmlNodePtr node,
tmp = xmlRelaxNGParseNameClass(ctxt, child, ret);
if (tmp != NULL) {
if (last == NULL) {
- last = ret->nameClass = tmp;
+ last = tmp;
} else {
last->next = tmp;
last = tmp;
diff --git a/result/relaxng/anyName0_0 b/result/relaxng/anyName0_0
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/result/relaxng/anyName0_0
diff --git a/result/relaxng/anyName0_0.err b/result/relaxng/anyName0_0.err
new file mode 100644
index 00000000..f660c26d
--- /dev/null
+++ b/result/relaxng/anyName0_0.err
@@ -0,0 +1 @@
+./test/relaxng/anyName0_0.xml validates
diff --git a/result/relaxng/anyName0_err b/result/relaxng/anyName0_err
new file mode 100644
index 00000000..ab6f08da
--- /dev/null
+++ b/result/relaxng/anyName0_err
@@ -0,0 +1 @@
+./test/relaxng/anyName0.rng validates
diff --git a/result/relaxng/anyName0_valid b/result/relaxng/anyName0_valid
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/result/relaxng/anyName0_valid
diff --git a/test/relaxng/anyName0.rng b/test/relaxng/anyName0.rng
new file mode 100644
index 00000000..9fc5ead0
--- /dev/null
+++ b/test/relaxng/anyName0.rng
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+ <start>
+ <element>
+ <choice>
+ <choice>
+ <name>a</name>
+ <name>b</name>
+ </choice>
+ <name>c</name>
+ </choice>
+ <empty/>
+ </element>
+ </start>
+</grammar>
diff --git a/test/relaxng/anyName0_0.xml b/test/relaxng/anyName0_0.xml
new file mode 100644
index 00000000..fb08e36d
--- /dev/null
+++ b/test/relaxng/anyName0_0.xml
@@ -0,0 +1 @@
+<b/>