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