fixing some Negative Character Group and Character Class Subtraction

* xmlregexp.c: fixing some Negative Character Group and
  Character Class Subtraction handling.
Daniel
diff --git a/xmlregexp.c b/xmlregexp.c
index c8d1ad1..a26b8bb 100644
--- a/xmlregexp.c
+++ b/xmlregexp.c
@@ -141,7 +141,7 @@
 typedef xmlRegRange *xmlRegRangePtr;
 
 struct _xmlRegRange {
-    int neg;
+    int neg;		/* 0 normal, 1 not, 2 exclude */
     xmlRegAtomType type;
     int start;
     int end;
@@ -1995,14 +1995,20 @@
 
 	    for (i = 0;i < atom->nbRanges;i++) {
 		range = atom->ranges[i];
-		if (range->neg) {
+		if (range->neg == 2) {
 		    ret = xmlRegCheckCharacterRange(range->type, codepoint,
 						0, range->start, range->end,
 						range->blockName);
 		    if (ret != 0)
 			return(0); /* excluded char */
-		    else
+		} else if (range->neg) {
+		    ret = xmlRegCheckCharacterRange(range->type, codepoint,
+						0, range->start, range->end,
+						range->blockName);
+		    if (ret == 0)
 		        accept = 1;
+		    else
+		        return(0);
 		} else {
 		    ret = xmlRegCheckCharacterRange(range->type, codepoint,
 						0, range->start, range->end,
@@ -3634,8 +3640,9 @@
 	    xmlFAParsePosCharGroup(ctxt);
 	    ctxt->neg = neg;
 	} else if (CUR == '-') {
+	    int neg = ctxt->neg;
 	    NEXT;
-	    ctxt->neg = !ctxt->neg;
+	    ctxt->neg = 2;
 	    if (CUR != '[') {
 		ERROR("charClassExpr: '[' expected");
 		break;
@@ -3648,6 +3655,7 @@
 		ERROR("charClassExpr: ']' expected");
 		break;
 	    }
+	    ctxt->neg = neg;
 	    break;
 	} else if (CUR != ']') {
 	    xmlFAParsePosCharGroup(ctxt);