if ((currentElementContent == CONTENT_ELEMENTS) && !isDirtyCurrentElement) { pureWhite = true; }
    private void parseCharData ()    throws Exception    {	char	c;	int	state = 0;	boolean pureWhite = false;	// assert (dataBufferPos == 0);	// are we expecting pure whitespace?  it might be dirty...	if ((currentElementContent == CONTENT_ELEMENTS) && !isDirtyCurrentElement)	    pureWhite = true;	// always report right out of readBuffer	// to minimize (pointless) buffer copies	while (true) {	    int lineAugment = 0;	    int columnAugment = 0;	    int i;loop:	    for (i = readBufferPos; i < readBufferLength; i++) {		switch (c = readBuffer [i]) {		case '\n':		    lineAugment++;		    columnAugment = 0;		    // pureWhite unmodified		    break;		case '\r':	// should not happen!!		case '\t':		case ' ':		    // pureWhite unmodified		    columnAugment++;		    break;		case '&':		case '<':		    columnAugment++;		    // pureWhite unmodified		    // CLEAN end of text sequence		    state = 1;		    break loop;		case ']':		    // that's not a whitespace char, and		    // can not terminate pure whitespace either		    pureWhite = false;		    if ((i + 2) < readBufferLength) {			if (readBuffer [i + 1] == ']'				&& readBuffer [i + 2] == '>') {			    // ERROR end of text sequence			    state = 2;			    break loop;			}		    } else {			// FIXME missing two end-of-buffer cases		    }		    columnAugment++;		    break;		default:			if ((c < 0x0020 || c > 0xFFFD)			   || ((c >= 0x007f) && (c <= 0x009f) && (c != 0x0085) 			       && xmlVersion == XML_11)) 				error ("illegal XML character U+"					+ Integer.toHexString (c));		    // that's not a whitespace char		    pureWhite = false;		    columnAugment++;		}	    }	    // report text thus far	    if (lineAugment > 0) {		line += lineAugment;		column = columnAugment;	    } else {		column += columnAugment;	    }	    // report characters/whitspace	    int		length = i - readBufferPos;	    if (length != 0) {		if (pureWhite)		    handler.ignorableWhitespace (readBuffer,		    		readBufferPos, length);		else		    handler.charData (readBuffer, readBufferPos, length);		readBufferPos = i;	    }	    	    if (state != 0)		break;	    // fill next buffer from this entity, or	    // pop stack and continue with previous entity	    unread (readCh ());	}        if (!pureWhite)           isDirtyCurrentElement = true;	// finish, maybe with error	if (state != 1)	// finish, no error	    error ("character data may not contain ']]>'");    }