more bugfixes updated the results Daniel

* relaxng.c: more bugfixes
* result/relaxng/*: updated the results
Daniel
diff --git a/ChangeLog b/ChangeLog
index 1e4f413..2081a67 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+Wed Feb 19 18:30:30 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+	* relaxng.c: more bugfixes
+	* result/relaxng/*: updated the results
+
 Wed Feb 19 15:39:56 CET 2003 Igor Zlatkovic <igor@zlatkovic.com>
 
 	* DOCBparser.c: obsoleted xmlNormalizeWindowsPath
diff --git a/relaxng.c b/relaxng.c
index 13beb42..a2dbe61 100644
--- a/relaxng.c
+++ b/relaxng.c
@@ -710,6 +710,47 @@
 }
 
 /**
+ * xmlRelaxNGEqualValidState:
+ * @ctxt:  a Relax-NG validation context
+ * @state1:  a validation state
+ * @state2:  a validation state
+ *
+ * Compare the validation states for equality
+ *
+ * Returns 1 if equald, 0 otherwise
+ */
+static int
+xmlRelaxNGEqualValidState(xmlRelaxNGValidCtxtPtr ctxt ATTRIBUTE_UNUSED,
+	                 xmlRelaxNGValidStatePtr state1,
+			 xmlRelaxNGValidStatePtr state2)
+{
+    int i;
+
+    if ((state1 == NULL) || (state2 == NULL))
+	return(0);
+    if (state1 == state2)
+	return(1);
+    if (state1->node != state2->node)
+	return(0);
+    if (state1->seq != state2->seq)
+	return(0);
+    if (state1->nbAttrLeft != state2->nbAttrLeft)
+	return(0);
+    if (state1->nbAttrs != state2->nbAttrs)
+	return(0);
+    if (state1->endvalue != state2->endvalue)
+	return(0);
+    if ((state1->value != state2->value) &&
+	(!xmlStrEqual(state1->value, state2->value)))
+	return(0);
+    for (i = 0;i < state1->nbAttrs;i++) {
+	if (state1->attrs[i] != state2->attrs[i])
+	    return(0);
+    }
+    return(1);
+}
+
+/**
  * xmlRelaxNGFreeValidState:
  * @state:  a validation state structure
  *
@@ -5965,21 +6006,25 @@
 	    ret = -1;
 	    break;
         case XML_RELAXNG_TEXT:
+#if 0
 	    if (node == NULL) {
 		ret = 0;
 		break;
 	    }
+#endif
 	    while ((node != NULL) &&
 		   ((node->type == XML_TEXT_NODE) ||
 		    (node->type == XML_COMMENT_NODE) ||
 		    (node->type == XML_PI_NODE) ||
 		    (node->type == XML_CDATA_SECTION_NODE)))
 		node = node->next;
+#if 0
 	    if (node == ctxt->state->seq) {
 		VALID_CTXT();
 		VALID_ERROR("Expecting text content\n");
 		ret = -1;
 	    }
+#endif
 	    ctxt->state->seq = node;
 	    break;
         case XML_RELAXNG_ELEMENT:
@@ -6149,6 +6194,7 @@
 	}
         case XML_RELAXNG_CHOICE: {
 	    xmlRelaxNGDefinePtr list = define->content;
+	    int success = 0;
 
 	    oldflags = ctxt->flags;
 	    ctxt->flags |= FLAGS_IGNORABLE;
@@ -6157,14 +6203,24 @@
 		oldstate = xmlRelaxNGCopyValidState(ctxt, ctxt->state);
 		ret = xmlRelaxNGValidateDefinition(ctxt, list);
 		if (ret == 0) {
-		    xmlRelaxNGFreeValidState(oldstate);
-		    break;
+		    if (xmlRelaxNGEqualValidState(ctxt, ctxt->state, oldstate)){
+			/*
+			 * if that pattern was nullable flag it but try 
+			 * to make more progresses
+			 */
+			success = 1;
+		    } else {
+			xmlRelaxNGFreeValidState(oldstate);
+			break;
+		    }
 		}
 		xmlRelaxNGFreeValidState(ctxt->state);
 		ctxt->state = oldstate;
 		list = list->next;
 	    }
 	    ctxt->flags = oldflags;
+	    if (success == 1)
+		ret = 0;
 	    break;
 	}
         case XML_RELAXNG_DEF:
diff --git a/result/relaxng/spec1_err b/result/relaxng/spec1_err
index eae9def..99cf052 100644
--- a/result/relaxng/spec1_err
+++ b/result/relaxng/spec1_err
@@ -1 +1 @@
-Unimplemented block at relaxng.c:5656
+Unimplemented block at relaxng.c:5697
diff --git a/result/relaxng/tutor10_1_4.err b/result/relaxng/tutor10_1_4.err
index 93b43db..d553dca 100644
--- a/result/relaxng/tutor10_1_4.err
+++ b/result/relaxng/tutor10_1_4.err
@@ -1,4 +1,4 @@
-error detected at relaxng.c:5840
+error detected at relaxng.c:5881
 Expecting a namespace for element foo
-error detected at relaxng.c:6406
+error detected at relaxng.c:6462
 extra data on the document
diff --git a/result/relaxng/tutor10_1_5.err b/result/relaxng/tutor10_1_5.err
index 47a9cab..0310479 100644
--- a/result/relaxng/tutor10_1_5.err
+++ b/result/relaxng/tutor10_1_5.err
@@ -1,4 +1,4 @@
-error detected at relaxng.c:5845
+error detected at relaxng.c:5886
 Expecting element foo has wrong namespace: expecting http://www.example.com
-error detected at relaxng.c:6406
+error detected at relaxng.c:6462
 extra data on the document
diff --git a/result/relaxng/tutor10_1_6.err b/result/relaxng/tutor10_1_6.err
index 47a9cab..0310479 100644
--- a/result/relaxng/tutor10_1_6.err
+++ b/result/relaxng/tutor10_1_6.err
@@ -1,4 +1,4 @@
-error detected at relaxng.c:5845
+error detected at relaxng.c:5886
 Expecting element foo has wrong namespace: expecting http://www.example.com
-error detected at relaxng.c:6406
+error detected at relaxng.c:6462
 extra data on the document
diff --git a/result/relaxng/tutor10_2_3.err b/result/relaxng/tutor10_2_3.err
index 737e254..79a821f 100644
--- a/result/relaxng/tutor10_2_3.err
+++ b/result/relaxng/tutor10_2_3.err
@@ -1,4 +1,4 @@
-error detected at relaxng.c:5857
+error detected at relaxng.c:5898
 Expecting no namespace for element foo
-error detected at relaxng.c:6406
+error detected at relaxng.c:6462
 extra data on the document
diff --git a/result/relaxng/tutor10_2_4.err b/result/relaxng/tutor10_2_4.err
index 737e254..79a821f 100644
--- a/result/relaxng/tutor10_2_4.err
+++ b/result/relaxng/tutor10_2_4.err
@@ -1,4 +1,4 @@
-error detected at relaxng.c:5857
+error detected at relaxng.c:5898
 Expecting no namespace for element foo
-error detected at relaxng.c:6406
+error detected at relaxng.c:6462
 extra data on the document
diff --git a/result/relaxng/tutor10_7_3.err b/result/relaxng/tutor10_7_3.err
index 7e030d2..2b28114 100644
--- a/result/relaxng/tutor10_7_3.err
+++ b/result/relaxng/tutor10_7_3.err
@@ -1,2 +1,2 @@
-error detected at relaxng.c:6047
+error detected at relaxng.c:6092
 Extra content for element addressBook: card
diff --git a/result/relaxng/tutor10_8_3.err b/result/relaxng/tutor10_8_3.err
index 7e030d2..2b28114 100644
--- a/result/relaxng/tutor10_8_3.err
+++ b/result/relaxng/tutor10_8_3.err
@@ -1,2 +1,2 @@
-error detected at relaxng.c:6047
+error detected at relaxng.c:6092
 Extra content for element addressBook: card
diff --git a/result/relaxng/tutor11_2_2.err b/result/relaxng/tutor11_2_2.err
index bae7c4b..91c4f3e 100644
--- a/result/relaxng/tutor11_2_2.err
+++ b/result/relaxng/tutor11_2_2.err
@@ -1,2 +1,2 @@
-error detected at relaxng.c:6060
+error detected at relaxng.c:6105
 Invalid attribute foo for element card
diff --git a/result/relaxng/tutor11_2_3.err b/result/relaxng/tutor11_2_3.err
index 80ff29c..8d7f898 100644
--- a/result/relaxng/tutor11_2_3.err
+++ b/result/relaxng/tutor11_2_3.err
@@ -1,2 +1,2 @@
-error detected at relaxng.c:6060
+error detected at relaxng.c:6105
 Invalid attribute b for element card
diff --git a/result/relaxng/tutor12_1_err b/result/relaxng/tutor12_1_err
index eae9def..99cf052 100644
--- a/result/relaxng/tutor12_1_err
+++ b/result/relaxng/tutor12_1_err
@@ -1 +1 @@
-Unimplemented block at relaxng.c:5656
+Unimplemented block at relaxng.c:5697
diff --git a/result/relaxng/tutor3_2_1.err b/result/relaxng/tutor3_2_1.err
index 6668a65..5e5a24c 100644
--- a/result/relaxng/tutor3_2_1.err
+++ b/result/relaxng/tutor3_2_1.err
@@ -1,4 +1,4 @@
-error detected at relaxng.c:5832
+error detected at relaxng.c:5873
 Expecting element name, got email
-error detected at relaxng.c:6047
+error detected at relaxng.c:6092
 Extra content for element card: email
diff --git a/result/relaxng/tutor3_5_2.err b/result/relaxng/tutor3_5_2.err
index 7e030d2..2b28114 100644
--- a/result/relaxng/tutor3_5_2.err
+++ b/result/relaxng/tutor3_5_2.err
@@ -1,2 +1,2 @@
-error detected at relaxng.c:6047
+error detected at relaxng.c:6092
 Extra content for element addressBook: card
diff --git a/result/relaxng/tutor3_7_err b/result/relaxng/tutor3_7_err
index af8755c..f7198a5 100644
--- a/result/relaxng/tutor3_7_err
+++ b/result/relaxng/tutor3_7_err
@@ -1,2 +1,2 @@
-error detected at relaxng.c:6406
+error detected at relaxng.c:6462
 extra data on the document
diff --git a/result/relaxng/tutor5_3_1.err b/result/relaxng/tutor5_3_1.err
index 03afffd..9f72a68 100644
--- a/result/relaxng/tutor5_3_1.err
+++ b/result/relaxng/tutor5_3_1.err
@@ -1,6 +1,6 @@
-error detected at relaxng.c:6200
+error detected at relaxng.c:6256
 Element bad has child elements
-error detected at relaxng.c:5994
+error detected at relaxng.c:6039
 Expecting an element got 3 type
-error detected at relaxng.c:6047
+error detected at relaxng.c:6092
 Extra content for element bad: text
diff --git a/result/relaxng/tutor6_1_3.err b/result/relaxng/tutor6_1_3.err
index 898a8bc..8d8f0ba 100644
--- a/result/relaxng/tutor6_1_3.err
+++ b/result/relaxng/tutor6_1_3.err
@@ -1,2 +1,2 @@
-error detected at relaxng.c:6060
+error detected at relaxng.c:6105
 Invalid attribute preferredFormat for element card
diff --git a/result/relaxng/tutor6_2_4.err b/result/relaxng/tutor6_2_4.err
index 75b4405..48ca795 100644
--- a/result/relaxng/tutor6_2_4.err
+++ b/result/relaxng/tutor6_2_4.err
@@ -1,2 +1,2 @@
-error detected at relaxng.c:6047
+error detected at relaxng.c:6092
 Extra content for element preferredFormat: text
diff --git a/result/relaxng/tutor6_3_1.err b/result/relaxng/tutor6_3_1.err
index 898a8bc..8d8f0ba 100644
--- a/result/relaxng/tutor6_3_1.err
+++ b/result/relaxng/tutor6_3_1.err
@@ -1,2 +1,2 @@
-error detected at relaxng.c:6060
+error detected at relaxng.c:6105
 Invalid attribute preferredFormat for element card
diff --git a/result/relaxng/tutor7_1_2.err b/result/relaxng/tutor7_1_2.err
index c2b0194..cbfe2f8 100644
--- a/result/relaxng/tutor7_1_2.err
+++ b/result/relaxng/tutor7_1_2.err
@@ -1,6 +1,6 @@
-error detected at relaxng.c:4943
+error detected at relaxng.c:4984
 Internal: failed to validate type float
-error detected at relaxng.c:6338
+error detected at relaxng.c:6394
 error validating list
-error detected at relaxng.c:6047
+error detected at relaxng.c:6092
 Extra content for element vector: text
diff --git a/result/relaxng/tutor7_1_3.err b/result/relaxng/tutor7_1_3.err
index 13434ca..92eef34 100644
--- a/result/relaxng/tutor7_1_3.err
+++ b/result/relaxng/tutor7_1_3.err
@@ -1,6 +1,6 @@
-error detected at relaxng.c:5183
+error detected at relaxng.c:5224
 Extra data in list: 5.6
-error detected at relaxng.c:6338
+error detected at relaxng.c:6394
 error validating list
-error detected at relaxng.c:6047
+error detected at relaxng.c:6092
 Extra content for element vector: text
diff --git a/result/relaxng/tutor7_2_4.err b/result/relaxng/tutor7_2_4.err
index 784629a..7ff321d 100644
--- a/result/relaxng/tutor7_2_4.err
+++ b/result/relaxng/tutor7_2_4.err
@@ -1,4 +1,4 @@
-error detected at relaxng.c:4943
+error detected at relaxng.c:4984
 Internal: failed to validate type double
-error detected at relaxng.c:6338
+error detected at relaxng.c:6394
 error validating list
diff --git a/result/relaxng/tutor7_3_4.err b/result/relaxng/tutor7_3_4.err
index 8211131..9a414cf 100644
--- a/result/relaxng/tutor7_3_4.err
+++ b/result/relaxng/tutor7_3_4.err
@@ -1,6 +1,6 @@
-error detected at relaxng.c:5183
+error detected at relaxng.c:5224
 Extra data in list: 5.6
-error detected at relaxng.c:6338
+error detected at relaxng.c:6394
 error validating list
-error detected at relaxng.c:6047
+error detected at relaxng.c:6092
 Extra content for element path: text
diff --git a/result/relaxng/tutor7_3_5.err b/result/relaxng/tutor7_3_5.err
index 336daf8..fbf3e99 100644
--- a/result/relaxng/tutor7_3_5.err
+++ b/result/relaxng/tutor7_3_5.err
@@ -1,6 +1,6 @@
-error detected at relaxng.c:4943
+error detected at relaxng.c:4984
 Internal: failed to validate type double
-error detected at relaxng.c:6338
+error detected at relaxng.c:6394
 error validating list
-error detected at relaxng.c:6047
+error detected at relaxng.c:6092
 Extra content for element path: text
diff --git a/result/relaxng/tutor8_2_4.err b/result/relaxng/tutor8_2_4.err
index 873922e..bde5901 100644
--- a/result/relaxng/tutor8_2_4.err
+++ b/result/relaxng/tutor8_2_4.err
@@ -1,4 +1,4 @@
-Unimplemented block at relaxng.c:5656
-Unimplemented block at relaxng.c:5656
-error detected at relaxng.c:6047
+Unimplemented block at relaxng.c:5697
+Unimplemented block at relaxng.c:5697
+error detected at relaxng.c:6092
 Extra content for element head: meta
diff --git a/result/relaxng/tutor8_2_5.err b/result/relaxng/tutor8_2_5.err
index 27d1af0..7e38529 100644
--- a/result/relaxng/tutor8_2_5.err
+++ b/result/relaxng/tutor8_2_5.err
@@ -1,4 +1,4 @@
-error detected at relaxng.c:5988
+error detected at relaxng.c:6033
 Expecting an element, got empty
-error detected at relaxng.c:6047
+error detected at relaxng.c:6092
 Extra content for element head: meta
diff --git a/result/relaxng/tutor8_2_6.err b/result/relaxng/tutor8_2_6.err
index 9eef580..240c7f4 100644
--- a/result/relaxng/tutor8_2_6.err
+++ b/result/relaxng/tutor8_2_6.err
@@ -1,2 +1,2 @@
-error detected at relaxng.c:6047
+error detected at relaxng.c:6092
 Extra content for element head: base
diff --git a/result/relaxng/tutor9_5_2.err b/result/relaxng/tutor9_5_2.err
index 7e030d2..2b28114 100644
--- a/result/relaxng/tutor9_5_2.err
+++ b/result/relaxng/tutor9_5_2.err
@@ -1,2 +1,2 @@
-error detected at relaxng.c:6047
+error detected at relaxng.c:6092
 Extra content for element addressBook: card
diff --git a/result/relaxng/tutor9_5_3.err b/result/relaxng/tutor9_5_3.err
index 7e030d2..2b28114 100644
--- a/result/relaxng/tutor9_5_3.err
+++ b/result/relaxng/tutor9_5_3.err
@@ -1,2 +1,2 @@
-error detected at relaxng.c:6047
+error detected at relaxng.c:6092
 Extra content for element addressBook: card
diff --git a/result/relaxng/tutor9_6_2.err b/result/relaxng/tutor9_6_2.err
index 7e030d2..2b28114 100644
--- a/result/relaxng/tutor9_6_2.err
+++ b/result/relaxng/tutor9_6_2.err
@@ -1,2 +1,2 @@
-error detected at relaxng.c:6047
+error detected at relaxng.c:6092
 Extra content for element addressBook: card
diff --git a/result/relaxng/tutor9_6_3.err b/result/relaxng/tutor9_6_3.err
index 7e030d2..2b28114 100644
--- a/result/relaxng/tutor9_6_3.err
+++ b/result/relaxng/tutor9_6_3.err
@@ -1,2 +1,2 @@
-error detected at relaxng.c:6047
+error detected at relaxng.c:6092
 Extra content for element addressBook: card