/** * Parse a nested node. */ @SuppressWarnings("rawtypes") public List<Node> nestedParse(CodeReader reader) { List<Node> nodeList = new ArrayList<>(); for (Channel<List<Node>> tokenizer : tokenizers) { if (tokenizer.consume(reader, nodeList)) { break; } } return nodeList; }
public final void colorize(CodeReader code, HtmlCodeBuilder colorizedCode) { cloneNotThreadSafeTokenizers(); nextChar: while (code.peek() != -1) { for (Channel<HtmlCodeBuilder> codeTokenizer : tokenizers) { if (codeTokenizer.consume(code, colorizedCode)) { continue nextChar; } } colorizedCode.append((char) code.pop()); } }
@Override public boolean consume(CodeReader code, O output) { int nextChar = code.peek(); while (nextChar != -1) { boolean characterConsumed = false; for (Channel<O> channel : channels) { if (channel.consume(code, output)) { characterConsumed = true; break; } } if ( !characterConsumed) { if (LOG.isDebugEnabled() || failIfNoChannelToConsumeOneCharacter) { String message = "None of the channel has been able to handle character '" + (char) code.peek() + "' (decimal value " + code.peek() + ") at line " + code.getLinePosition() + ", column " + code.getColumnPosition(); if (failIfNoChannelToConsumeOneCharacter) { throw new IllegalStateException(message); } LOG.debug(message); } code.pop(); } nextChar = code.peek(); } return true; }
/** * {@inheritDoc} */ @Override public int read(char[] filteredBuffer, int offset, int length) throws IOException { if (internalCodeReader.peek() == -1) { return -1; } int initialOffset = offset; while (offset < filteredBuffer.length) { if (internalCodeReader.peek() == -1) { break; } boolean consumed = false; for (Channel<O> channel : channels) { if (channel.consume(internalCodeReader, getOutput())) { consumed = true; break; } } if ( !consumed) { int charRead = internalCodeReader.pop(); filteredBuffer[offset++] = (char) charRead; } } return offset - initialOffset; }