more work on Relax-NG, implementing interleave augmented/updated the
* relaxng.c: more work on Relax-NG, implementing interleave
* test/relaxng/* result/relaxng/*: augmented/updated the
regression tests
Daniel
diff --git a/ChangeLog b/ChangeLog
index 728eb9b..fcb5434 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+Wed Jan 29 00:08:38 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * relaxng.c: more work on Relax-NG, implementing interleave
+ * test/relaxng/* result/relaxng/*: augmented/updated the
+ regression tests
+
Tue Jan 28 21:56:49 CET 2003 Daniel Veillard <daniel@veillard.com>
* relaxng.c: more work on Relax-NG, implementing interleave
diff --git a/relaxng.c b/relaxng.c
index 49b089e..0776147 100644
--- a/relaxng.c
+++ b/relaxng.c
@@ -42,7 +42,7 @@
#define DEBUG_CONTENT 1
#define DEBUG_TYPE 1
#define DEBUG_VALID 1
-#define DEBUG_INTERLEAVE 1
+#define DEBUG_INTERLEAVE 1 */
#define UNBOUNDED (1 << 30)
#define TODO \
@@ -1299,7 +1299,8 @@
parent = NULL;
cur = def;
while (cur != NULL) {
- if (cur->type == XML_RELAXNG_ELEMENT) {
+ if ((cur->type == XML_RELAXNG_ELEMENT) ||
+ (cur->type == XML_RELAXNG_TEXT)) {
if (ret == NULL) {
max = 10;
ret = (xmlRelaxNGDefinePtr *)
@@ -1322,13 +1323,16 @@
return(NULL);
}
}
- ret[len++] = def;
+ ret[len++] = cur;
ret[len] = NULL;
} else if ((cur->type == XML_RELAXNG_CHOICE) ||
(cur->type == XML_RELAXNG_INTERLEAVE) ||
(cur->type == XML_RELAXNG_GROUP) ||
(cur->type == XML_RELAXNG_ONEORMORE) ||
- (cur->type == XML_RELAXNG_ZEROORMORE)) {
+ (cur->type == XML_RELAXNG_ZEROORMORE) ||
+ (cur->type == XML_RELAXNG_OPTIONAL) ||
+ (cur->type == XML_RELAXNG_REF) ||
+ (cur->type == XML_RELAXNG_DEF)) {
/*
* Don't go within elements or attributes or string values.
* Just gather the element top list
@@ -3627,7 +3631,7 @@
xmlRelaxNGValidatePartGroup(xmlRelaxNGValidCtxtPtr ctxt,
xmlRelaxNGInterleaveGroupPtr *groups,
int nbgroups, xmlNodePtr *nodes, int len) {
- int level = -1, ret = -1, i, j, k;
+ int level, ret = -1, i, j, k;
xmlNodePtr *array = NULL, *list, oldseq;
xmlRelaxNGInterleaveGroupPtr group;
@@ -3662,6 +3666,7 @@
ctxt->state->seq = oldseq;
if (k > 1) {
memset(array, 0, k * sizeof(xmlNodePtr));
+ level = -1;
ret = xmlRelaxNGValidateWalkPermutations(ctxt, group->rule,
list, array, k, &level, -1);
} else {
diff --git a/result/relaxng/tutor3_2_1.err b/result/relaxng/tutor3_2_1.err
index 93bea8e..9f912af 100644
--- a/result/relaxng/tutor3_2_1.err
+++ b/result/relaxng/tutor3_2_1.err
@@ -1,3 +1,3 @@
-error detected at relaxng.c:3888
-error detected at relaxng.c:3936
+error detected at relaxng.c:3893
+error detected at relaxng.c:3941
xmlRelaxNGValidateDefinition(): validated card : -1
diff --git a/result/relaxng/tutor3_5_2.err b/result/relaxng/tutor3_5_2.err
index 0b2e98c..d4572ba 100644
--- a/result/relaxng/tutor3_5_2.err
+++ b/result/relaxng/tutor3_5_2.err
@@ -1,5 +1,5 @@
xmlRelaxNGValidateAttribute(name): -1
xmlRelaxNGValidateDefinition(): validated email : 0
xmlRelaxNGValidateDefinition(): validated card : -1
-error detected at relaxng.c:3936
+error detected at relaxng.c:3941
xmlRelaxNGValidateDefinition(): validated addressBook : -1
diff --git a/result/relaxng/tutor5_3_1.err b/result/relaxng/tutor5_3_1.err
index 9c62a48..af193a7 100644
--- a/result/relaxng/tutor5_3_1.err
+++ b/result/relaxng/tutor5_3_1.err
@@ -1,3 +1,3 @@
-error detected at relaxng.c:4066
+error detected at relaxng.c:4071
xmlRelaxNGValidateDefinition(): validated note : 0
xmlRelaxNGValidateDefinition(): validated bad : -1
diff --git a/result/relaxng/tutor6_1_3.err b/result/relaxng/tutor6_1_3.err
index a401290..140c39e 100644
--- a/result/relaxng/tutor6_1_3.err
+++ b/result/relaxng/tutor6_1_3.err
@@ -1,5 +1,5 @@
xmlRelaxNGValidateAttribute(preferredFormat): -1
xmlRelaxNGValidateAttribute(email): 0
xmlRelaxNGValidateAttribute(name): 0
-error detected at relaxng.c:3944
+error detected at relaxng.c:3949
xmlRelaxNGValidateDefinition(): validated card : -1
diff --git a/result/relaxng/tutor6_2_4.err b/result/relaxng/tutor6_2_4.err
index 444711f..f81281e 100644
--- a/result/relaxng/tutor6_2_4.err
+++ b/result/relaxng/tutor6_2_4.err
@@ -1,5 +1,5 @@
xmlRelaxNGValidateDefinition(): validated name : 0
xmlRelaxNGValidateDefinition(): validated email : 0
-error detected at relaxng.c:3936
+error detected at relaxng.c:3941
xmlRelaxNGValidateDefinition(): validated preferredFormat : -1
xmlRelaxNGValidateDefinition(): validated card : -1
diff --git a/result/relaxng/tutor6_3_1.err b/result/relaxng/tutor6_3_1.err
index a401290..140c39e 100644
--- a/result/relaxng/tutor6_3_1.err
+++ b/result/relaxng/tutor6_3_1.err
@@ -1,5 +1,5 @@
xmlRelaxNGValidateAttribute(preferredFormat): -1
xmlRelaxNGValidateAttribute(email): 0
xmlRelaxNGValidateAttribute(name): 0
-error detected at relaxng.c:3944
+error detected at relaxng.c:3949
xmlRelaxNGValidateDefinition(): validated card : -1
diff --git a/result/relaxng/tutor7_1_2.err b/result/relaxng/tutor7_1_2.err
index c4852a8..f767200 100644
--- a/result/relaxng/tutor7_1_2.err
+++ b/result/relaxng/tutor7_1_2.err
@@ -1,5 +1,5 @@
Unimplemented block at xmlschemastypes.c:1132
-error detected at relaxng.c:3147
-error detected at relaxng.c:4120
-error detected at relaxng.c:3936
+error detected at relaxng.c:3151
+error detected at relaxng.c:4125
+error detected at relaxng.c:3941
xmlRelaxNGValidateDefinition(): validated vector : -1
diff --git a/result/relaxng/tutor7_1_3.err b/result/relaxng/tutor7_1_3.err
index ed15abe..0ca0de9 100644
--- a/result/relaxng/tutor7_1_3.err
+++ b/result/relaxng/tutor7_1_3.err
@@ -1,6 +1,6 @@
Unimplemented block at xmlschemastypes.c:1132
Unimplemented block at xmlschemastypes.c:1132
-error detected at relaxng.c:3335
-error detected at relaxng.c:4120
-error detected at relaxng.c:3936
+error detected at relaxng.c:3339
+error detected at relaxng.c:4125
+error detected at relaxng.c:3941
xmlRelaxNGValidateDefinition(): validated vector : -1
diff --git a/result/relaxng/tutor7_2_4.err b/result/relaxng/tutor7_2_4.err
index 02fceec..bab6132 100644
--- a/result/relaxng/tutor7_2_4.err
+++ b/result/relaxng/tutor7_2_4.err
@@ -1,3 +1,3 @@
-error detected at relaxng.c:3310
-error detected at relaxng.c:4120
+error detected at relaxng.c:3314
+error detected at relaxng.c:4125
xmlRelaxNGValidateDefinition(): validated vector : -1
diff --git a/result/relaxng/tutor8_2_1 b/result/relaxng/tutor8_2_1
new file mode 100644
index 0000000..4c6b3d4
--- /dev/null
+++ b/result/relaxng/tutor8_2_1
@@ -0,0 +1 @@
+./test/relaxng/tutor8_2_1.xml validates
diff --git a/result/relaxng/tutor8_2_1.err b/result/relaxng/tutor8_2_1.err
new file mode 100644
index 0000000..be2e794
--- /dev/null
+++ b/result/relaxng/tutor8_2_1.err
@@ -0,0 +1,7 @@
+xmlRelaxNGComputeInterleaves(interleave0)
+ 6 child
+ 6 groups
+xmlRelaxNGValidateDefinition(): validated title : 0
+xmlRelaxNGValidateDefinition(): validated meta : 0
+xmlRelaxNGValidateDefinition(): validated meta : 0
+xmlRelaxNGValidateDefinition(): validated head : 0
diff --git a/result/relaxng/tutor8_2_2 b/result/relaxng/tutor8_2_2
new file mode 100644
index 0000000..7f959b9
--- /dev/null
+++ b/result/relaxng/tutor8_2_2
@@ -0,0 +1 @@
+./test/relaxng/tutor8_2_2.xml validates
diff --git a/result/relaxng/tutor8_2_2.err b/result/relaxng/tutor8_2_2.err
new file mode 100644
index 0000000..258bedf
--- /dev/null
+++ b/result/relaxng/tutor8_2_2.err
@@ -0,0 +1,38 @@
+xmlRelaxNGComputeInterleaves(interleave0)
+ 6 child
+ 6 groups
+xmlRelaxNGValidateDefinition(): validated title : 0
+xmlRelaxNGValidateDefinition(): validated base : 0
+xmlRelaxNGValidateDefinition(): validated style : 0
+xmlRelaxNGValidateDefinition(): validated style : 0
+xmlRelaxNGValidateDefinition(): validated style : 0
+xmlRelaxNGValidateDefinition(): validated style : 0
+xmlRelaxNGValidateDefinition(): validated style : 0
+xmlRelaxNGValidateDefinition(): validated style : 0
+xmlRelaxNGValidateDefinition(): validated style : 0
+xmlRelaxNGValidateDefinition(): validated style : 0
+xmlRelaxNGValidateDefinition(): validated script : 0
+xmlRelaxNGValidateDefinition(): validated script : 0
+xmlRelaxNGValidateDefinition(): validated script : 0
+xmlRelaxNGValidateDefinition(): validated script : 0
+xmlRelaxNGValidateDefinition(): validated script : 0
+xmlRelaxNGValidateDefinition(): validated script : 0
+xmlRelaxNGValidateDefinition(): validated script : 0
+xmlRelaxNGValidateDefinition(): validated script : 0
+xmlRelaxNGValidateDefinition(): validated link : 0
+xmlRelaxNGValidateDefinition(): validated link : 0
+xmlRelaxNGValidateDefinition(): validated link : 0
+xmlRelaxNGValidateDefinition(): validated link : 0
+xmlRelaxNGValidateDefinition(): validated link : 0
+xmlRelaxNGValidateDefinition(): validated link : 0
+xmlRelaxNGValidateDefinition(): validated link : 0
+xmlRelaxNGValidateDefinition(): validated link : 0
+xmlRelaxNGValidateDefinition(): validated meta : 0
+xmlRelaxNGValidateDefinition(): validated meta : 0
+xmlRelaxNGValidateDefinition(): validated meta : 0
+xmlRelaxNGValidateDefinition(): validated meta : 0
+xmlRelaxNGValidateDefinition(): validated meta : 0
+xmlRelaxNGValidateDefinition(): validated meta : 0
+xmlRelaxNGValidateDefinition(): validated meta : 0
+xmlRelaxNGValidateDefinition(): validated meta : 0
+xmlRelaxNGValidateDefinition(): validated head : 0
diff --git a/result/relaxng/tutor8_2_3 b/result/relaxng/tutor8_2_3
new file mode 100644
index 0000000..21abe93
--- /dev/null
+++ b/result/relaxng/tutor8_2_3
@@ -0,0 +1 @@
+./test/relaxng/tutor8_2_3.xml validates
diff --git a/result/relaxng/tutor8_2_3.err b/result/relaxng/tutor8_2_3.err
new file mode 100644
index 0000000..eb816f0
--- /dev/null
+++ b/result/relaxng/tutor8_2_3.err
@@ -0,0 +1,5 @@
+xmlRelaxNGComputeInterleaves(interleave0)
+ 6 child
+ 6 groups
+xmlRelaxNGValidateDefinition(): validated title : 0
+xmlRelaxNGValidateDefinition(): validated head : 0
diff --git a/result/relaxng/tutor8_2_4 b/result/relaxng/tutor8_2_4
new file mode 100644
index 0000000..9554ec3
--- /dev/null
+++ b/result/relaxng/tutor8_2_4
@@ -0,0 +1,2 @@
+Extra content for element head
+./test/relaxng/tutor8_2_4.xml validation generated an internal error
diff --git a/result/relaxng/tutor8_2_4.err b/result/relaxng/tutor8_2_4.err
new file mode 100644
index 0000000..9871e82
--- /dev/null
+++ b/result/relaxng/tutor8_2_4.err
@@ -0,0 +1,7 @@
+xmlRelaxNGComputeInterleaves(interleave0)
+ 6 child
+ 6 groups
+xmlRelaxNGValidateDefinition(): validated title : 0
+xmlRelaxNGValidateDefinition(): validated title : 0
+error detected at relaxng.c:3941
+xmlRelaxNGValidateDefinition(): validated head : -1
diff --git a/result/relaxng/tutor8_2_5 b/result/relaxng/tutor8_2_5
new file mode 100644
index 0000000..d6aed29
--- /dev/null
+++ b/result/relaxng/tutor8_2_5
@@ -0,0 +1,3 @@
+Expecting an element
+Extra content for element head
+./test/relaxng/tutor8_2_5.xml validation generated an internal error
diff --git a/result/relaxng/tutor8_2_5.err b/result/relaxng/tutor8_2_5.err
new file mode 100644
index 0000000..3ce1e71
--- /dev/null
+++ b/result/relaxng/tutor8_2_5.err
@@ -0,0 +1,6 @@
+xmlRelaxNGComputeInterleaves(interleave0)
+ 6 child
+ 6 groups
+error detected at relaxng.c:3887
+error detected at relaxng.c:3941
+xmlRelaxNGValidateDefinition(): validated head : -1
diff --git a/result/relaxng/tutor8_2_6 b/result/relaxng/tutor8_2_6
new file mode 100644
index 0000000..f7ede6f
--- /dev/null
+++ b/result/relaxng/tutor8_2_6
@@ -0,0 +1,2 @@
+Extra content for element head
+./test/relaxng/tutor8_2_6.xml validation generated an internal error
diff --git a/result/relaxng/tutor8_2_6.err b/result/relaxng/tutor8_2_6.err
new file mode 100644
index 0000000..5fedf88
--- /dev/null
+++ b/result/relaxng/tutor8_2_6.err
@@ -0,0 +1,8 @@
+xmlRelaxNGComputeInterleaves(interleave0)
+ 6 child
+ 6 groups
+xmlRelaxNGValidateDefinition(): validated title : 0
+xmlRelaxNGValidateDefinition(): validated base : 0
+xmlRelaxNGValidateDefinition(): validated base : 0
+error detected at relaxng.c:3941
+xmlRelaxNGValidateDefinition(): validated head : -1
diff --git a/test/relaxng/tutor8_2.rng b/test/relaxng/tutor8_2.rng
new file mode 100644
index 0000000..495968e
--- /dev/null
+++ b/test/relaxng/tutor8_2.rng
@@ -0,0 +1,57 @@
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+ <start>
+ <ref name="head"/>
+ </start>
+ <define name="head">
+ <element name="head">
+ <interleave>
+ <ref name="title"/>
+ <optional>
+ <ref name="base"/>
+ </optional>
+ <zeroOrMore>
+ <ref name="style"/>
+ </zeroOrMore>
+ <zeroOrMore>
+ <ref name="script"/>
+ </zeroOrMore>
+ <zeroOrMore>
+ <ref name="link"/>
+ </zeroOrMore>
+ <zeroOrMore>
+ <ref name="meta"/>
+ </zeroOrMore>
+ </interleave>
+ </element>
+ </define>
+ <define name="title">
+ <element name="title">
+ <text/>
+ </element>
+ </define>
+ <define name="base">
+ <element name="base">
+ <text/>
+ </element>
+ </define>
+ <define name="style">
+ <element name="style">
+ <text/>
+ </element>
+ </define>
+ <define name="script">
+ <element name="script">
+ <text/>
+ </element>
+ </define>
+ <define name="meta">
+ <element name="meta">
+ <text/>
+ </element>
+ </define>
+ <define name="link">
+ <element name="link">
+ <text/>
+ </element>
+ </define>
+</grammar>
diff --git a/test/relaxng/tutor8_2_1.xml b/test/relaxng/tutor8_2_1.xml
new file mode 100644
index 0000000..fed80d4
--- /dev/null
+++ b/test/relaxng/tutor8_2_1.xml
@@ -0,0 +1,5 @@
+<head>
+ <meta>meta1</meta>
+ <title>foo</title>
+ <meta>meta2</meta>
+</head>
diff --git a/test/relaxng/tutor8_2_2.xml b/test/relaxng/tutor8_2_2.xml
new file mode 100644
index 0000000..24c2e6b
--- /dev/null
+++ b/test/relaxng/tutor8_2_2.xml
@@ -0,0 +1,36 @@
+<head>
+ <meta>meta</meta>
+ <meta>meta</meta>
+ <script>script</script>
+ <link>link</link>
+ <style>link</style>
+ <script>script</script>
+ <link>link</link>
+ <style>link</style>
+ <base>base</base>
+ <title>foo</title>
+ <meta>meta</meta>
+ <script>script</script>
+ <link>link</link>
+ <style>link</style>
+ <meta>meta</meta>
+ <meta>meta</meta>
+ <meta>meta</meta>
+ <meta>meta</meta>
+ <meta>meta</meta>
+ <script>script</script>
+ <link>link</link>
+ <style>link</style>
+ <script>script</script>
+ <link>link</link>
+ <style>link</style>
+ <script>script</script>
+ <link>link</link>
+ <style>link</style>
+ <script>script</script>
+ <link>link</link>
+ <style>link</style>
+ <script>script</script>
+ <link>link</link>
+ <style>link</style>
+</head>
diff --git a/test/relaxng/tutor8_2_3.xml b/test/relaxng/tutor8_2_3.xml
new file mode 100644
index 0000000..920f99d
--- /dev/null
+++ b/test/relaxng/tutor8_2_3.xml
@@ -0,0 +1,3 @@
+<head>
+ <title>title</title>
+</head>
diff --git a/test/relaxng/tutor8_2_4.xml b/test/relaxng/tutor8_2_4.xml
new file mode 100644
index 0000000..68f3865
--- /dev/null
+++ b/test/relaxng/tutor8_2_4.xml
@@ -0,0 +1,6 @@
+<head>
+ <meta>meta1</meta>
+ <title>foo</title>
+ <meta>meta2</meta>
+ <title>error</title>
+</head>
diff --git a/test/relaxng/tutor8_2_5.xml b/test/relaxng/tutor8_2_5.xml
new file mode 100644
index 0000000..75b9d53
--- /dev/null
+++ b/test/relaxng/tutor8_2_5.xml
@@ -0,0 +1,3 @@
+<head>
+ <meta>meta2</meta>
+</head>
diff --git a/test/relaxng/tutor8_2_6.xml b/test/relaxng/tutor8_2_6.xml
new file mode 100644
index 0000000..20fb4c7
--- /dev/null
+++ b/test/relaxng/tutor8_2_6.xml
@@ -0,0 +1,5 @@
+<head>
+ <base>base</base>
+ <title>foo</title>
+ <base>error</base>
+</head>
diff --git a/test/relaxng/tutor8_3.rng b/test/relaxng/tutor8_3.rng
new file mode 100644
index 0000000..b68814d
--- /dev/null
+++ b/test/relaxng/tutor8_3.rng
@@ -0,0 +1,9 @@
+<element name="content" xmlns="http://relaxng.org/ns/structure/1.0">
+ <interleave>
+ <text/>
+ <element name="p">
+ <text/>
+ </element>
+ </interleave>
+</element>
+
diff --git a/test/relaxng/tutor8_3_1.xml b/test/relaxng/tutor8_3_1.xml
new file mode 100644
index 0000000..86ea447
--- /dev/null
+++ b/test/relaxng/tutor8_3_1.xml
@@ -0,0 +1 @@
+<content> how are you <p> 'yau de poelle </p> ? </content>