void parsePCData() throws java.lang.Exception {
        char c;

        // Start with a little cheat -- in most
        // cases, the entire sequence of
        // character data will already be in
        // the readBuffer; if not, fall through to
        // the normal approach.
        if (USE_CHEATS) {
            int lineAugment = 0;
            int columnAugment = 0;

            /*loop:*/for (int i = readBufferPos; i < readBufferLength; i++) {
                switch (readBuffer[i]) {
                case '\n':
                    lineAugment++;
                    columnAugment = 0;
                    break;

                case '&':
                case '<':

                    int start = readBufferPos;
                    columnAugment++;
                    readBufferPos = i;

                    if (lineAugment > 0) {
                        line += lineAugment;
                        column = columnAugment;
                    } else {
                        column += columnAugment;
                    }

                    dataBufferAppend(readBuffer, start, i - start);
                    return;

                default:
                    columnAugment++;
                }
            }
        }

        // OK, the cheat didn't work; start over
        // and do it by the book.
        while (true) {
            c = readCh();

            switch (c) {
            case '<':
            case '&':
                unread(c);
                return;

            default:
                dataBufferAppend(c);
                break;
            }
        }
    }