public void parse()

in nbxml/src/main/java/org/apache/vysper/xml/sax/impl/XMLTokenizer.java [62:137]


    public void parse(IoBuffer byteBuffer, CharsetDecoder decoder) throws SAXException {
        while (byteBuffer.hasRemaining() && state != State.CLOSED) {
            byte c = byteBuffer.get();

            if (state == State.START) {
                if (c == '<') {
                    emit(c);
                    state = State.IN_TAG;
                } else if (Character.isWhitespace(c)) {
                    // ignore
                } else {
                    state = State.IN_TEXT;
                    buffer.put(c);
                }
            } else if (state == State.IN_TEXT) {
                if (c == '<') {
                    emit(decoder);
                    emit(c);
                    state = State.IN_TAG;
                } else {
                    buffer.put(c);
                }
            } else if (state == State.IN_TAG) {
                if (c == '>') {
                    emit(c);
                    state = State.START;
                } else if (c == '"') {
                    emit(c);
                    state = State.IN_DOUBLE_ATTRIBUTE_VALUE;
                } else if (c == '\'') {
                    emit(c);
                    state = State.IN_SINGLE_ATTRIBUTE_VALUE;
                } else if (c == '-') {
                    emit(c);
                } else if (isControlChar(c)) {
                    emit(c);
                } else if (Character.isWhitespace(c)) {
                    buffer.clear();
                } else {
                    state = State.IN_STRING;
                    buffer.put(c);
                }
            } else if (state == State.IN_STRING) {
                if (c == '>') {
                    emit(CharsetUtil.getDecoder());
                    emit(c);
                    state = State.START;
                } else if (isControlChar(c)) {
                    emit(CharsetUtil.getDecoder());
                    emit(c);
                    state = State.IN_TAG;
                } else if (Character.isWhitespace(c)) {
                    emit(CharsetUtil.getDecoder());
                    state = State.IN_TAG;
                } else {
                    buffer.put(c);
                }
            } else if (state == State.IN_DOUBLE_ATTRIBUTE_VALUE) {
                if (c == '"') {
                    emit(decoder);
                    emit(c);
                    state = State.IN_TAG;
                } else {
                    buffer.put(c);
                }
            } else if (state == State.IN_SINGLE_ATTRIBUTE_VALUE) {
                if (c == '\'') {
                    emit(decoder);
                    emit(c);
                    state = State.IN_TAG;
                } else {
                    buffer.put(c);
                }
            }
        }
    }