popInput (); break; } }  char c = readBuffer [readBufferPos++];  if (c == '\n') { line++; column = 0; } else { if (c == '<') {  } else if (((c < 0x0020 && (c != '\t') && (c != '\r')) || c > 0xFFFD) || ((c >= 0x007f) && (c <= 0x009f) && (c != 0x0085) && xmlVersion == XML_11)) error ("illegal XML character U+" + Integer.toHexString (c));      else if (c == '%' && expandPE) { if (peIsError) error ("PE reference within decl in internal subset."); parsePEReference (); return readCh (); } column++; }  return c; }
return c; }
    private char readCh ()    throws SAXException, IOException    {	// As long as there's nothing in the	// read buffer, try reading more data	// (for an external entity) or popping	// the entity stack (for either).	while (readBufferPos >= readBufferLength) {	    switch (sourceType) {	    case INPUT_READER:	    case INPUT_STREAM:		readDataChunk ();		while (readBufferLength < 1) {		    popInput ();		    if (readBufferLength < 1) {			readDataChunk ();		    }		}		break;	    default:		popInput ();		break;	    }	}	char c = readBuffer [readBufferPos++];       	if (c == '\n') {	    line++;	    column = 0;	} else {	    if (c == '<') {		/* the most common return to parseContent () ... NOP */	    } else if (((c < 0x0020 && (c != '\t') && (c != '\r')) || c > 0xFFFD)	    		|| ((c >= 0x007f) && (c <= 0x009f) && (c != 0x0085) 	    		   && xmlVersion == XML_11)) 		error ("illegal XML character U+"			+ Integer.toHexString (c));	    // If we're in the DTD and in a context where PEs get expanded,	    // do so ... 1/14/2000 errata identify those contexts.  There	    // are also spots in the internal subset where PE refs are fatal	    // errors, hence yet another flag.	    else if (c == '%' && expandPE) {		if (peIsError)		    error ("PE reference within decl in internal subset.");		parsePEReference ();		return readCh ();	    }	    column++;	}	return c;    }