@Override public boolean consume(CodeReader code, MarkdownOutput output) { output.append((char)code.pop()); return true; } }
private void handleBeforeAttributeValue(CodeReader codeReader, TagNode element) { Attribute attribute; if (!element.getAttributes().isEmpty()) { attribute = element.getAttributes().get(element.getAttributes().size() - 1); StringBuilder sbValue = new StringBuilder(); int ch = codeReader.peek(); if (isQuote((char) ch)) { codeReader.pop(); if (codeReader.peek() != ch) { codeReader.popTo(new QuoteMatcher((char) ch), sbValue); attribute.setValue(unescapeQuotes(sbValue.toString(), (char) ch)); } codeReader.pop(); attribute.setQuoteChar((char) ch); } else { codeReader.popTo(endTokenMatcher, sbValue); attribute.setValue(sbValue.toString().trim()); } } }
private static void handleBeforeAttributeValue(CodeReader codeReader, TagNode element) { Attribute attribute; if (!element.getAttributes().isEmpty()) { attribute = element.getAttributes().get(element.getAttributes().size() - 1); StringBuilder sbValue = new StringBuilder(); int ch = codeReader.peek(); if (isQuote((char) ch)) { codeReader.pop(); if (codeReader.peek() != ch) { codeReader.popTo(new QuoteMatcher((char) ch), sbValue); attribute.setValue(unescapeQuotes(sbValue.toString(), (char) ch)); } codeReader.pop(); attribute.setQuoteChar((char) ch); } else { codeReader.popTo(endUnquotedAttributeMatcher, sbValue); attribute.setValue(sbValue.toString().trim()); } } }
@Override public boolean consume(CodeReader code, Tokens cpdTokens) { code.pop(); return true; }
private static void handleBeforeAttributeValue(CodeReader codeReader, TagNode element) { Attribute attribute; if (!element.getAttributes().isEmpty()) { attribute = element.getAttributes().get(element.getAttributes().size() - 1); StringBuilder sbValue = new StringBuilder(); int ch = codeReader.peek(); if (isQuote((char) ch)) { codeReader.pop(); if (codeReader.peek() != ch) { QuoteMatcher quoteMatcher = new QuoteMatcher((char) ch); quoteMatcher.match(codeReader.peek()); codeReader.popTo(quoteMatcher, sbValue); attribute.setValue(unescapeQuotes(sbValue.toString(), (char) ch)); } codeReader.pop(); attribute.setQuoteChar((char) ch); } else { codeReader.popTo(endUnquotedAttributeMatcher, sbValue); attribute.setValue(sbValue.toString().trim()); } } }
private static void nestedTag(TagNode element, CodeReader codeReader, ParseMode mode) { // found a nested tag if (mode == ParseMode.BEFORE_ATTRIBUTE_NAME) { parseNestedTag(codeReader, element); } else { codeReader.pop(); } }
@Override public boolean consume(CodeReader codeReader, T nodeList) { if (equalsIgnoreCase(codeReader.peek(startChars.length), startChars)) { Node node = createNode(); setStartPosition(codeReader, node); StringBuilder stringBuilder = new StringBuilder(); codeReader.popTo(getEndMatcher(codeReader), stringBuilder); for (int i = 0; i < endChars.length; i++) { codeReader.pop(stringBuilder); } node.setCode(stringBuilder.toString()); setEndPosition(codeReader, node); addNode(nodeList, node); return true; } else { return false; } }
private static void nestedTag(TagNode element, CodeReader codeReader, ParseMode mode) { // found a nested tag if (mode == ParseMode.BEFORE_ATTRIBUTE_NAME) { parseNestedTag(codeReader, element); } else { codeReader.pop(); } }
@Override public boolean consume(CodeReader codeReader, T nodeList) { if (equalsIgnoreCase(codeReader.peek(startChars.length), startChars)) { Node node = createNode(); setStartPosition(codeReader, node); StringBuilder stringBuilder = new StringBuilder(); codeReader.popTo(getEndMatcher(codeReader), stringBuilder); for (int i = 0; i < endChars.length; i++) { codeReader.pop(stringBuilder); } node.setCode(stringBuilder.toString()); setEndPosition(codeReader, node); addNode(nodeList, node); return true; } else { return false; } }
private void nestedTag(TagNode element, CodeReader codeReader, ParseMode mode) { // found a nested tag if (mode == ParseMode.BEFORE_ATTRIBUTE_NAME) { parseNestedTag(codeReader, element); } else { codeReader.pop(); } }
@Override public boolean consume(CodeReader codeReader, T nodeList) { if (equalsIgnoreCase(codeReader.peek(startChars.length), startChars)) { Node node = createNode(); setStartPosition(codeReader, node); StringBuilder stringBuilder = new StringBuilder(); codeReader.popTo(getEndMatcher(codeReader), stringBuilder); for (int i = 0; i < endChars.length; i++) { codeReader.pop(stringBuilder); } node.setCode(stringBuilder.toString()); setEndPosition(codeReader, node); addNode(nodeList, node); return true; } else { return false; } }
/** * Read and consume the next character * * @param appendable * the read character is appended to appendable */ public final void pop(Appendable appendable) { try { appendable.append((char) pop()); } catch (IOException e) { throw new ChannelException(e.getMessage(), e); } }
private boolean consumeEndElement(CodeReader code, HtmlCodeBuilder codeBuilder, String endElement) { if (Arrays.equals(code.peek(endElement.length()), endElement.toCharArray())) { codeBuilder.appendWithoutTransforming(tagBeforeElement); // Consume end element for (int i = 0; i < endElement.length(); i++) { code.pop(codeBuilder); } codeBuilder.appendWithoutTransforming(tagAfterElement); setElementStarted(codeBuilder, false); return true; } return false; }
private boolean consumeEndElement(CodeReader code, HtmlCodeBuilder codeBuilder, String endElement) { if (Arrays.equals(code.peek(endElement.length()), endElement.toCharArray())) { codeBuilder.appendWithoutTransforming(tagBeforeElement); // Consume end element for (int i = 0; i < endElement.length(); i++) { code.pop(codeBuilder); } codeBuilder.appendWithoutTransforming(tagAfterElement); setElementStarted(codeBuilder, false); return true; } return false; }
/** * @deprecated in 2.2, use {@link #popTo(Matcher matcher, Appendable appendable)} instead */ @Deprecated public final void popTo(EndMatcher matcher, Appendable appendable) { previousCursor = getCursor().clone(); try { do { appendable.append((char) pop()); } while (!matcher.match(peek()) && peek() != -1); } catch (IOException e) { throw new ChannelException(e.getMessage(), e); } }
/** * Consume attribute value until eol or same quote */ private void consumeAttributeValueUntilQuoteOrEol(CodeReader code, HtmlCodeBuilder codeBuilder, char quote) { // consume attribute value until eol or same quote while (code.peek() != quote && code.peek() != '\r' && code.peek() != '\n') { code.pop(codeBuilder); } if (code.charAt(0) == quote) { // consume the closing quote code.pop(codeBuilder); setAttributeStarted(codeBuilder, false); setAttributeValueStarted(codeBuilder, null); } codeBuilder.appendWithoutTransforming(tagAfterAttributeValue); }
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()); } }
/** * Consume attribute value until eol or same quote */ private void consumeAttributeValueUntilQuoteOrEol(CodeReader code, HtmlCodeBuilder codeBuilder, char quote) { // consume attribute value until eol or same quote while (code.peek() != quote && code.peek() != '\r' && code.peek() != '\n') { code.pop(codeBuilder); } if (code.charAt(0) == quote) { // consume the closing quote code.pop(codeBuilder); setAttributeStarted(codeBuilder, false); setAttributeValueStarted(codeBuilder, null); } codeBuilder.appendWithoutTransforming(tagAfterAttributeValue); }
/** * {@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; }
@Override public boolean consume(CodeReader code, HtmlCodeBuilder codeBuilder) { int lineNumber = code.getLinePosition(); if (code.peek() == LF || code.peek() == CR) { code.pop(); if (lineNumber != code.getLinePosition()) { codeBuilder.appendWithoutTransforming(getTagAfter()); codeBuilder.appendWithoutTransforming(getTagBefore()); } return true; } return false; }