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/ChangeLog b/ChangeLog
index 0ce9029..bf37ae5 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+Tue Aug  9 13:07:27 CEST 2005 Daniel Veillard <daniel@veillard.com>
+
+	* 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
+
 Mon Aug  8 22:33:08 CEST 2005 Daniel Veillard <daniel@veillard.com>
 
 	* nanoftp.c nanohttp.c xmlschemastypes.c: applied patch from 
diff --git a/result/schemas/any3_0_0.err b/result/schemas/any3_0_0.err
index 19036ce..49ce581 100644
--- a/result/schemas/any3_0_0.err
+++ b/result/schemas/any3_0_0.err
@@ -1 +1 @@
-./test/schemas/any3_0.xml:12: element bar.A: Schemas validity error : Element 'bar.A': This element is not expected. Expected is one of ( {##other:http://FOO}* ).
+./test/schemas/any3_0.xml:12: element bar.A: Schemas validity error : Element 'bar.A': This element is not expected. Expected is ( ##other{http://FOO}* ).
diff --git a/result/schemas/any5_0_0.err b/result/schemas/any5_0_0.err
index 137229b..b69fd57 100644
--- a/result/schemas/any5_0_0.err
+++ b/result/schemas/any5_0_0.err
@@ -1 +1 @@
-./test/schemas/any5_0.xml:6: element boo: Schemas validity error : Element '{urn:test:foo}boo': This element is not expected. Expected is ( not {urn:test:foo}* ).
+./test/schemas/any5_0.xml:6: element boo: Schemas validity error : Element '{urn:test:foo}boo': This element is not expected. Expected is ( ##other{urn:test:foo}* ).
diff --git a/result/schemas/any5_1_0.err b/result/schemas/any5_1_0.err
index 137229b..b69fd57 100644
--- a/result/schemas/any5_1_0.err
+++ b/result/schemas/any5_1_0.err
@@ -1 +1 @@
-./test/schemas/any5_0.xml:6: element boo: Schemas validity error : Element '{urn:test:foo}boo': This element is not expected. Expected is ( not {urn:test:foo}* ).
+./test/schemas/any5_0.xml:6: element boo: Schemas validity error : Element '{urn:test:foo}boo': This element is not expected. Expected is ( ##other{urn:test:foo}* ).
diff --git a/result/schemas/any7_1_0 b/result/schemas/any7_1_0
new file mode 100644
index 0000000..cfd9dcc
--- /dev/null
+++ b/result/schemas/any7_1_0
@@ -0,0 +1 @@
+./test/schemas/any7_0.xml fails to validate
diff --git a/result/schemas/any7_1_0.err b/result/schemas/any7_1_0.err
new file mode 100644
index 0000000..a4274f8
--- /dev/null
+++ b/result/schemas/any7_1_0.err
@@ -0,0 +1 @@
+./test/schemas/any7_0.xml:18: element moo: Schemas validity error : Element 'moo': This element is not expected. Expected is ( ##other{urn:test:foo}* ).
diff --git a/result/schemas/any7_1_1 b/result/schemas/any7_1_1
new file mode 100644
index 0000000..2a6f5d7
--- /dev/null
+++ b/result/schemas/any7_1_1
@@ -0,0 +1 @@
+./test/schemas/any7_1.xml fails to validate
diff --git a/result/schemas/any7_1_1.err b/result/schemas/any7_1_1.err
new file mode 100644
index 0000000..8745468
--- /dev/null
+++ b/result/schemas/any7_1_1.err
@@ -0,0 +1 @@
+./test/schemas/any7_1.xml:17: element bar: Schemas validity error : Element '{urn:test:foo}bar': This element is not expected. Expected is ( ##other{urn:test:foo}* ).
diff --git a/result/schemas/any7_2_0 b/result/schemas/any7_2_0
new file mode 100644
index 0000000..cfd9dcc
--- /dev/null
+++ b/result/schemas/any7_2_0
@@ -0,0 +1 @@
+./test/schemas/any7_0.xml fails to validate
diff --git a/result/schemas/any7_2_0.err b/result/schemas/any7_2_0.err
new file mode 100644
index 0000000..a4274f8
--- /dev/null
+++ b/result/schemas/any7_2_0.err
@@ -0,0 +1 @@
+./test/schemas/any7_0.xml:18: element moo: Schemas validity error : Element 'moo': This element is not expected. Expected is ( ##other{urn:test:foo}* ).
diff --git a/result/schemas/any7_2_1 b/result/schemas/any7_2_1
new file mode 100644
index 0000000..2a6f5d7
--- /dev/null
+++ b/result/schemas/any7_2_1
@@ -0,0 +1 @@
+./test/schemas/any7_1.xml fails to validate
diff --git a/result/schemas/any7_2_1.err b/result/schemas/any7_2_1.err
new file mode 100644
index 0000000..8745468
--- /dev/null
+++ b/result/schemas/any7_2_1.err
@@ -0,0 +1 @@
+./test/schemas/any7_1.xml:17: element bar: Schemas validity error : Element '{urn:test:foo}bar': This element is not expected. Expected is ( ##other{urn:test:foo}* ).
diff --git a/test/schemas/any7_0.xml b/test/schemas/any7_0.xml
index d8f23d2..288b1e7 100755
--- a/test/schemas/any7_0.xml
+++ b/test/schemas/any7_0.xml
@@ -16,4 +16,4 @@
 	xsi:schemaLocation="urn:test:foo any-2_1.xsd">
 	<foo:bar/>
 	<moo/>
-</foo:foo>
\ No newline at end of file
+</foo:foo>
diff --git a/test/schemas/any7_2.xsd b/test/schemas/any7_2.xsd
new file mode 100755
index 0000000..cabfd98
--- /dev/null
+++ b/test/schemas/any7_2.xsd
@@ -0,0 +1,13 @@
+<?xml version="1.0"?>

+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"

+	targetNamespace="urn:test:foo"

+	elementFormDefault="qualified">

+	<xs:element name="foo">

+		<xs:complexType>

+			<xs:sequence>

+				<xs:element name="bar"/>

+				<xs:any namespace="##other" processContents="lax" maxOccurs="2"/>

+			</xs:sequence>

+		</xs:complexType>

+	</xs:element>

+</xs:schema>

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);
diff --git a/xmlschemas.c b/xmlschemas.c
index 3ee5563..7a016a2 100644
--- a/xmlschemas.c
+++ b/xmlschemas.c
@@ -1935,7 +1935,7 @@
 	        (cur[3] == ' ')) {
 	        is_not = 1;
 		cur += 4;
-		str = xmlStrcat(str, BAD_CAST "not ");
+		str = xmlStrcat(str, BAD_CAST "##other");
 	    } else {
 	        is_not = 0;
 	    }
@@ -11137,20 +11137,9 @@
 		    } while (ns != NULL);
 
 		} else if (wild->negNsSet != NULL) {
-
-		    /*
-		    * Lead nodes with the negated namespace to the sink-state
-		    * {"*", "##other"}.
-		    */
-		    pctxt->state = xmlAutomataNewTransition2(pctxt->am, start, NULL,
-			BAD_CAST "*", wild->negNsSet->value, wild);
-		    /*
-		    * Open a door for nodes with any other namespace
-		    * {"*", "*"}
-		    */
-		    pctxt->state = xmlAutomataNewTransition2(pctxt->am,
-			start, NULL, BAD_CAST "*", BAD_CAST "*", wild);
-		    xmlAutomataNewEpsilon(pctxt->am, pctxt->state, end);
+		    pctxt->state = xmlAutomataNewNegTrans(pctxt->am,
+			start, end, BAD_CAST "*", wild->negNsSet->value,
+			wild);
 		}
 	    } else {
 		int counter;