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;
            }
        }
    }