more bugfixes updated the results Daniel

* relaxng.c: more bugfixes
* result/relaxng/*: updated the results
Daniel
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: