checked and fixed the compilation of RNG schemas, fixes a couple of bugs
* relaxng.c result/relaxng/*: checked and fixed the compilation
of RNG schemas, fixes a couple of bugs #117097 and #117001 .
This slightly changes the output messages of some regression tests.
Daniel
diff --git a/ChangeLog b/ChangeLog
index e50a9f4..0809e1c 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+Wed Jul 23 20:52:36 IST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * relaxng.c result/relaxng/*: checked and fixed the compilation
+ of RNG schemas, fixes a couple of bugs #117097 and #117001 .
+ This slightly changes the output messages of some regression tests.
+
Wed Jul 23 15:15:08 IST 2003 Daniel Veillard <daniel@veillard.com>
* xmlreader.c: fixed an out of bound error #118052 , the good
diff --git a/relaxng.c b/relaxng.c
index 28eef44..054277c 100644
--- a/relaxng.c
+++ b/relaxng.c
@@ -2701,18 +2701,7 @@
(def->dflags & IS_NOT_COMPILABLE))
return(0);
switch(def->type) {
- case XML_RELAXNG_REF:
- case XML_RELAXNG_EXTERNALREF:
- case XML_RELAXNG_PARENTREF:
- if (def->depth == -20) {
- return(1);
- } else {
- def->depth = -20;
- ret = xmlRelaxNGIsCompileable(def->content);
- }
- break;
case XML_RELAXNG_NOOP:
- case XML_RELAXNG_START:
ret = xmlRelaxNGIsCompileable(def->content);
break;
case XML_RELAXNG_TEXT:
@@ -2722,15 +2711,41 @@
case XML_RELAXNG_ELEMENT:
if (((def->dflags & IS_NOT_COMPILABLE) == 0) &&
((def->dflags & IS_COMPILABLE) == 0)) {
- ret = xmlRelaxNGIsCompileable(def->content);
+ xmlRelaxNGDefinePtr list;
+ list = def->content;
+ while (list != NULL) {
+ ret = xmlRelaxNGIsCompileable(list);
+ if (ret != 1)
+ break;
+ list = list->next;
+ }
if (ret == 0) def->dflags |= IS_NOT_COMPILABLE;
if (ret == 1) def->dflags |= IS_COMPILABLE;
}
- if ((def->nameClass != NULL) || (def->name == NULL))
- return(0);
- else
- return(1);
+ if (ret == 1) {
+ if ((def->nameClass != NULL) || (def->name == NULL))
+ ret = 0;
+ }
break;
+ case XML_RELAXNG_REF:
+ case XML_RELAXNG_EXTERNALREF:
+ case XML_RELAXNG_PARENTREF:
+ if (def->depth == -20) {
+ return(1);
+ } else {
+ xmlRelaxNGDefinePtr list;
+
+ def->depth = -20;
+ list = def->content;
+ while (list != NULL) {
+ ret = xmlRelaxNGIsCompileable(list);
+ if (ret != 1)
+ break;
+ list = list->next;
+ }
+ }
+ break;
+ case XML_RELAXNG_START:
case XML_RELAXNG_OPTIONAL:
case XML_RELAXNG_ZEROORMORE:
case XML_RELAXNG_ONEORMORE:
@@ -2853,9 +2868,6 @@
ctxt->am = oldam;
}
break;
- case XML_RELAXNG_REF:
- case XML_RELAXNG_EXTERNALREF:
- case XML_RELAXNG_PARENTREF:
case XML_RELAXNG_NOOP:
ret = xmlRelaxNGCompile(ctxt, def->content);
break;
@@ -2905,7 +2917,9 @@
list = def->content;
while (list != NULL) {
ctxt->state = oldstate;
- xmlRelaxNGCompile(ctxt, list);
+ ret = xmlRelaxNGCompile(ctxt, list);
+ if (ret != 0)
+ break;
if (target == NULL)
target = ctxt->state;
else {
@@ -2917,11 +2931,16 @@
break;
}
+ case XML_RELAXNG_REF:
+ case XML_RELAXNG_EXTERNALREF:
+ case XML_RELAXNG_PARENTREF:
case XML_RELAXNG_GROUP:
case XML_RELAXNG_DEF:
list = def->content;
while (list != NULL) {
- xmlRelaxNGCompile(ctxt, list);
+ ret = xmlRelaxNGCompile(ctxt, list);
+ if (ret != 0)
+ break;
list = list->next;
}
break;
@@ -2978,15 +2997,28 @@
if ((def->dflags & IS_COMPILABLE) && (def->depth != -25)) {
ctxt->am = NULL;
ret = xmlRelaxNGCompile(ctxt, def);
+#ifdef DEBUG_PROGRESSIVE
+ if (ret == 0) {
+ if (def->type == XML_RELAXNG_START)
+ xmlGenericError(xmlGenericErrorContext,
+ "compiled the start\n");
+ else
+ xmlGenericError(xmlGenericErrorContext,
+ "compiled element %s\n", def->name);
+ } else {
+ if (def->type == XML_RELAXNG_START)
+ xmlGenericError(xmlGenericErrorContext,
+ "failed to compile the start\n");
+ else
+ xmlGenericError(xmlGenericErrorContext,
+ "failed to compile element %s\n", def->name);
+ }
+#endif
return(ret);
}
}
switch(def->type) {
- case XML_RELAXNG_REF:
- case XML_RELAXNG_EXTERNALREF:
- case XML_RELAXNG_PARENTREF:
case XML_RELAXNG_NOOP:
- case XML_RELAXNG_START:
ret = xmlRelaxNGTryCompile(ctxt, def->content);
break;
case XML_RELAXNG_TEXT:
@@ -3004,6 +3036,10 @@
case XML_RELAXNG_CHOICE:
case XML_RELAXNG_GROUP:
case XML_RELAXNG_DEF:
+ case XML_RELAXNG_START:
+ case XML_RELAXNG_REF:
+ case XML_RELAXNG_EXTERNALREF:
+ case XML_RELAXNG_PARENTREF:
list = def->content;
while (list != NULL) {
ret = xmlRelaxNGTryCompile(ctxt, list);
diff --git a/result/relaxng/tutor10_7_3.err b/result/relaxng/tutor10_7_3.err
index bc3d6ac..ebbc9aa 100644
--- a/result/relaxng/tutor10_7_3.err
+++ b/result/relaxng/tutor10_7_3.err
@@ -1,2 +1,2 @@
RNG validity error: file ./test/relaxng/tutor10_7_3.xml line 2 element card
-Element card failed to validate attributes
+Element addressBook has extra content: card
diff --git a/result/relaxng/tutor10_8_3.err b/result/relaxng/tutor10_8_3.err
index 06229bf..34eb5e9 100644
--- a/result/relaxng/tutor10_8_3.err
+++ b/result/relaxng/tutor10_8_3.err
@@ -1,2 +1,2 @@
RNG validity error: file ./test/relaxng/tutor10_8_3.xml line 2 element card
-Element card failed to validate attributes
+Element addressBook has extra content: card
diff --git a/result/relaxng/tutor3_5_2.err b/result/relaxng/tutor3_5_2.err
index 80acb18..ed09a33 100644
--- a/result/relaxng/tutor3_5_2.err
+++ b/result/relaxng/tutor3_5_2.err
@@ -1,4 +1,2 @@
-RNG validity error: file ./test/relaxng/tutor3_5_2.xml line 2 element email
-Expecting element name, got email
-RNG validity error: file ./test/relaxng/tutor3_5_2.xml line 2 element email
-Element card failed to validate content
+RNG validity error: file ./test/relaxng/tutor3_5_2.xml line 2 element card
+Element addressBook has extra content: card
diff --git a/result/relaxng/tutor9_5_2.err b/result/relaxng/tutor9_5_2.err
index ede3b45..650ca98 100644
--- a/result/relaxng/tutor9_5_2.err
+++ b/result/relaxng/tutor9_5_2.err
@@ -1,4 +1,2 @@
RNG validity error: file ./test/relaxng/tutor9_5_2.xml line 2 element card
-Invalid sequence in interleave
-RNG validity error: file ./test/relaxng/tutor9_5_2.xml line 2 element card
-Element card failed to validate attributes
+Element addressBook has extra content: card
diff --git a/result/relaxng/tutor9_5_3.err b/result/relaxng/tutor9_5_3.err
index 4566bcc..eee06c7 100644
--- a/result/relaxng/tutor9_5_3.err
+++ b/result/relaxng/tutor9_5_3.err
@@ -1,2 +1,2 @@
RNG validity error: file ./test/relaxng/tutor9_5_3.xml line 2 element card
-Invalid attribute error for element card
+Element addressBook has extra content: card
diff --git a/result/relaxng/tutor9_6_2.err b/result/relaxng/tutor9_6_2.err
index 1a10f1b..259cb07 100644
--- a/result/relaxng/tutor9_6_2.err
+++ b/result/relaxng/tutor9_6_2.err
@@ -1,2 +1,2 @@
RNG validity error: file ./test/relaxng/tutor9_6_2.xml line 2 element card
-Element card failed to validate attributes
+Element addressBook has extra content: card
diff --git a/result/relaxng/tutor9_6_3.err b/result/relaxng/tutor9_6_3.err
index e92c5f1..2157e52 100644
--- a/result/relaxng/tutor9_6_3.err
+++ b/result/relaxng/tutor9_6_3.err
@@ -1,2 +1,2 @@
RNG validity error: file ./test/relaxng/tutor9_6_3.xml line 2 element card
-Invalid attribute error for element card
+Element addressBook has extra content: card