trying to nail down the remaining ##other issues completed the tests and

* xmlregexp.c xmlschemas.c: trying to nail down the remaining
  ##other issues
* result/schemas/any7* test/schemas/any7: completed the tests
  and added the results
* result/schemas/any3_0_0.err result/schemas/any5_0_0.err
  result/schemas/any5_1_0.err: this slightly chnages the output
  from 3 existing tests
Daniel
diff --git a/xmlregexp.c b/xmlregexp.c
index 700b886..cf5f942 100644
--- a/xmlregexp.c
+++ b/xmlregexp.c
@@ -246,6 +246,7 @@
     xmlRegCounter *counters;
 
     int determinist;
+    int negs;
 };
 
 struct _xmlRegexp {
@@ -419,6 +420,7 @@
 
     if ((ret->determinist != 0) &&
 	(ret->nbCounters == 0) &&
+	(ctxt->negs == 0) &&
 	(ret->atoms != NULL) &&
 	(ret->atoms[0] != NULL) &&
 	(ret->atoms[0]->type == XML_REGEXP_STRING)) {
@@ -661,6 +663,7 @@
 	ret->string = xmlStrdup(string);
     ret->cur = ret->string;
     ret->neg = 0;
+    ret->negs = 0;
     ret->error = 0;
     ret->determinist = -1;
     return(ret);
@@ -1902,8 +1905,9 @@
 	default:
 	    return(1);
     }
-    if (atom1->neg != atom2->neg)
+    if (atom1->neg != atom2->neg) {
         ret = !ret;
+    }
     return(ret);
 }
 
@@ -2903,19 +2907,20 @@
 }
 
 /**
- * xmlRegExecPushString:
+ * xmlRegExecPushStringInternal:
  * @exec: a regexp execution context or NULL to indicate the end
  * @value: a string token input
  * @data: data associated to the token to reuse in callbacks
+ * @compound: value was assembled from 2 strings
  *
  * Push one input token in the execution context
  *
  * Returns: 1 if the regexp reached a final state, 0 if non-final, and
  *     a negative value in case of error.
  */
-int
-xmlRegExecPushString(xmlRegExecCtxtPtr exec, const xmlChar *value,
-	             void *data) {
+static int
+xmlRegExecPushStringInternal(xmlRegExecCtxtPtr exec, const xmlChar *value,
+	                     void *data, int compound) {
     xmlRegTransPtr trans;
     xmlRegAtomPtr atom;
     int ret;
@@ -3057,8 +3062,11 @@
 		break;
 	    } else if (value != NULL) {
 		ret = xmlRegStrEqualWildcard(atom->valuep, value);
-		if (atom->neg)
+		if (atom->neg) {
 		    ret = !ret;
+		    if (!compound)
+		        ret = 0;
+		}
 		if ((ret == 1) && (trans->counter >= 0)) {
 		    xmlRegCounterPtr counter;
 		    int count;
@@ -3258,6 +3266,23 @@
 }
 
 /**
+ * xmlRegExecPushString:
+ * @exec: a regexp execution context or NULL to indicate the end
+ * @value: a string token input
+ * @data: data associated to the token to reuse in callbacks
+ *
+ * Push one input token in the execution context
+ *
+ * Returns: 1 if the regexp reached a final state, 0 if non-final, and
+ *     a negative value in case of error.
+ */
+int
+xmlRegExecPushString(xmlRegExecCtxtPtr exec, const xmlChar *value,
+	             void *data) {
+    return(xmlRegExecPushStringInternal(exec, value, data, 0));
+}
+
+/**
  * xmlRegExecPushString2:
  * @exec: a regexp execution context or NULL to indicate the end
  * @value: the first string token input
@@ -3306,7 +3331,7 @@
     if (exec->comp->compact != NULL)
 	ret = xmlRegCompactPushString(exec, exec->comp, str, data);
     else
-        ret = xmlRegExecPushString(exec, str, data);
+        ret = xmlRegExecPushStringInternal(exec, str, data, 1);
 
     if (str != buf)
         xmlFree(buf);
@@ -4917,6 +4942,8 @@
  * If @to is NULL, this creates first a new target state in the automata
  * and then adds a transition from the @from state to the target state
  * activated by any value except (@token,@token2)
+ * Note that if @token2 is not NULL, then (X, NULL) won't match to follow
+ # the semantic of XSD ##other
  *
  * Returns the target state or NULL in case of error
  */
@@ -4963,6 +4990,7 @@
         xmlRegFreeAtom(atom);
 	return(NULL);
     }
+    am->negs++;
     if (to == NULL)
 	return(am->state);
     return(to);