isExtender was missing a char % are acceptable in the internal subset if

* xmlInternald.c: isExtender was missing a char
* parser.c include/libxml/parser.h: % are acceptable in the
  internal subset if within a PUBLIC ID
Daniel
diff --git a/ChangeLog b/ChangeLog
index 44c96bf..c29d678 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+Mon Feb 18 20:16:15 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+	* xmlInternald.c: isExtender was missing a char 
+	* parser.c include/libxml/parser.h: % are acceptable in the
+	  internal subset if within a PUBLIC ID
+
 Mon Feb 18 19:27:32 CET 2002 Daniel Veillard <daniel@veillard.com>
 
 	* SAX.c parserInternals.c valid.c: more work on the conformance
diff --git a/include/libxml/parser.h b/include/libxml/parser.h
index eb7e62f..341c559 100644
--- a/include/libxml/parser.h
+++ b/include/libxml/parser.h
@@ -112,7 +112,8 @@
     XML_PARSER_ATTRIBUTE_VALUE,	/* within an attribute value */
     XML_PARSER_SYSTEM_LITERAL,	/* within a SYSTEM value */
     XML_PARSER_EPILOG, 		/* the Misc* after the last end tag */
-    XML_PARSER_IGNORE		/* within an IGNORED section */
+    XML_PARSER_IGNORE,		/* within an IGNORED section */
+    XML_PARSER_PUBLIC_LITERAL 	/* within a PUBLIC value */
 } xmlParserInputState;
 
 /**
diff --git a/parser.c b/parser.c
index da0e2ed..83a850a 100644
--- a/parser.c
+++ b/parser.c
@@ -727,6 +727,7 @@
         case XML_PARSER_ATTRIBUTE_VALUE:
         case XML_PARSER_PI:
 	case XML_PARSER_SYSTEM_LITERAL:
+	case XML_PARSER_PUBLIC_LITERAL:
 	    /* we just ignore it there */
 	    return;
         case XML_PARSER_EPILOG:
@@ -2468,6 +2469,7 @@
     xmlChar cur;
     xmlChar stop;
     int count = 0;
+    xmlParserInputState oldstate = ctxt->instate;
 
     SHRINK;
     if (RAW == '"') {
@@ -2491,6 +2493,7 @@
 		"malloc of %d byte failed\n", size);
 	return(NULL);
     }
+    ctxt->instate = XML_PARSER_PUBLIC_LITERAL;
     cur = CUR;
     while ((IS_PUBIDCHAR(cur)) && (cur != stop)) { /* checked */
 	if (len + 1 >= size) {
@@ -2526,6 +2529,7 @@
     } else {
 	NEXT;
     }
+    ctxt->instate = oldstate;
     return(buf);
 }
 
@@ -3417,7 +3421,11 @@
 			    (ctxt->sax->error != NULL))
 			    ctxt->sax->error(ctxt->userData,
 				        "Invalid URI: %s\n", URI);
-			ctxt->wellFormed = 0;
+			/*
+			 * This really ought to be a well formedness error
+			 * but the XML Core WG decided otherwise c.f. issue
+			 * E26 of the XML erratas.
+			 */
 		    } else {
 			if (uri->fragment != NULL) {
 			    ctxt->errNo = XML_ERR_URI_FRAGMENT;
@@ -3426,6 +3434,10 @@
 				(ctxt->sax->error != NULL))
 				ctxt->sax->error(ctxt->userData,
 					    "Fragment not allowed: %s\n", URI);
+			    /*
+			     * Okay this is foolish to block those but not
+			     * invalid URIs.
+			     */
 			    ctxt->wellFormed = 0;
 			} else {
 			    if ((ctxt->sax != NULL) &&
@@ -3468,7 +3480,11 @@
 			    (ctxt->sax->error != NULL))
 			    ctxt->sax->error(ctxt->userData,
 				        "Invalid URI: %s\n", URI);
-			ctxt->wellFormed = 0;
+			/*
+			 * This really ought to be a well formedness error
+			 * but the XML Core WG decided otherwise c.f. issue
+			 * E26 of the XML erratas.
+			 */
 		    } else {
 			if (uri->fragment != NULL) {
 			    ctxt->errNo = XML_ERR_URI_FRAGMENT;
@@ -3477,6 +3493,10 @@
 				(ctxt->sax->error != NULL))
 				ctxt->sax->error(ctxt->userData,
 					    "Fragment not allowed: %s\n", URI);
+			    /*
+			     * Okay this is foolish to block those but not
+			     * invalid URIs.
+			     */
 			    ctxt->wellFormed = 0;
 			}
 			xmlFreeURI(uri);
@@ -8649,6 +8669,15 @@
 			"PP: entering START_TAG\n");
 #endif
 		break;
+            case XML_PARSER_PUBLIC_LITERAL:
+		xmlGenericError(xmlGenericErrorContext,
+			"PP: internal error, state == PUBLIC_LITERAL\n");
+		ctxt->instate = XML_PARSER_START_TAG;
+#ifdef DEBUG_PUSH
+		xmlGenericError(xmlGenericErrorContext,
+			"PP: entering START_TAG\n");
+#endif
+		break;
 	}
     }
 done:    
diff --git a/parserInternals.c b/parserInternals.c
index 16759ec..cdf8dcb 100644
--- a/parserInternals.c
+++ b/parserInternals.c
@@ -817,7 +817,7 @@
     case 0x0640: case 0x0E46: case 0x0EC6: case 0x3005:
     case 0x3031: case 0x3032: case 0x3033: case 0x3034:
     case 0x3035: case 0x309D: case 0x309E: case 0x30FC:
-    case 0x30FE:
+    case 0x30FD: case 0x30FE:
 	return 1;
     default:
 	return 0;