@Override public boolean consume(CodeReader code, HtmlCodeBuilder codeBuilder) { if (!isCDATAStarted(codeBuilder) && code.peek() == startToken[0] && Arrays.equals(code.peek(startToken.length), startToken)) { codeBuilder.appendWithoutTransforming(tagBefore); // Consume CDATA start code.popTo(Pattern.compile(Pattern.quote(CDATA_START)).matcher(""), codeBuilder); codeBuilder.appendWithoutTransforming(tagAfter); setCDATAStarted(codeBuilder, true); return true; } if (isCDATAStarted(codeBuilder)) { if (code.peek() == endToken[0] && Arrays.equals(code.peek(endToken.length), endToken)) { codeBuilder.appendWithoutTransforming(tagBefore); // Consume CDATA end code.popTo(Pattern.compile(Pattern.quote(CDATA_END)).matcher(""), codeBuilder); codeBuilder.appendWithoutTransforming(tagAfter); setCDATAStarted(codeBuilder, false); } else { // Consume everything between CDATA code.pop(codeBuilder); } return true; } return false; }
public static List<Tokenizer> createTokenizers() { return Arrays.asList( new CDataDocTokenizer(span("k"), END_TAG), new DoctypeTokenizer(span("j"), END_TAG), new MultilinesDocTokenizer("<!--", "-->", span("j"), END_TAG), new MultilinesDocTokenizer("</", ">", span("k"), END_TAG), new XmlStartElementTokenizer(span("k"), END_TAG, span("c"), END_TAG, span("s"), END_TAG)); }
public boolean isCDATABloc(CodeReader code, HtmlCodeBuilder codeBuilder) { return isCDATAStarted(codeBuilder) || (code.peek() != '\n' && code.peek() != '\r' && (code.peek() == startToken[0] && Arrays.equals(code.peek(startToken.length), startToken))); }
public static List<Tokenizer> createTokenizers() { return Arrays.asList( new CDataDocTokenizer(span("k"), END_TAG), new RegexpTokenizer(span("j"), END_TAG, "<!DOCTYPE.*>"), new MultilinesDocTokenizer("<!--", "-->", span("j"), END_TAG), new MultilinesDocTokenizer("</", ">", span("k"), END_TAG), new XmlStartElementTokenizer(span("k"), END_TAG, span("c"), END_TAG, span("s"), END_TAG)); }
@Override public boolean consume(CodeReader code, HtmlCodeBuilder codeBuilder) { if (!isCDATAStarted(codeBuilder) && code.peek() == startToken[0] && Arrays.equals(code.peek(startToken.length), startToken)) { codeBuilder.appendWithoutTransforming(tagBefore); // Consume CDATA start code.popTo(Pattern.compile(Pattern.quote(CDATA_START)).matcher(""), codeBuilder); codeBuilder.appendWithoutTransforming(tagAfter); setCDATAStarted(codeBuilder, true); return true; } if (isCDATAStarted(codeBuilder)) { if (code.peek() == endToken[0] && Arrays.equals(code.peek(endToken.length), endToken)) { codeBuilder.appendWithoutTransforming(tagBefore); // Consume CDATA end code.popTo(Pattern.compile(Pattern.quote(CDATA_END)).matcher(""), codeBuilder); codeBuilder.appendWithoutTransforming(tagAfter); setCDATAStarted(codeBuilder, false); } else { // Consume everything between CDATA code.pop(codeBuilder); } return true; } return false; }