/**
* Render a stream of text.
*
* @param in The input stream to render.
* @param visitor The visitor to do the rendering.
* @param macros List of macros to apply.
* @param reset Whether to reset the expansion limit or not.
* @return The AST of the page, after macro expansion.
*/
private static ASTNode renderInternal(final ANTLRInputStream in, final CreoleASTBuilder visitor, final Supplier<List<Macro>> macros, final CreoleTokens lexer, final boolean reset) {
lexer.setInputStream(in);
CommonTokenStream tokens = new CommonTokenStream(lexer);
Creole parser = new Creole(tokens);
// First try parsing in SLL mode. This is really fast for pages with no
// parse errors.
Optional<ParseTree> tree = tryParse(tokens, parser, PredictionMode.SLL);
if (!tree.isPresent()) {
tree = tryParse(tokens, parser, PredictionMode.LL);
}
ASTNode rendered = visitor.visit(tree.get());
// Expand macros
if (reset) {
_expansionLimit = MACRO_DEPTH_LIMIT;
}
ASTNode expanded = rendered;
if (_expansionLimit > 0) {
_expansionLimit--;
expanded = rendered.expandMacros(macros);
_expansionLimit++;
}
return expanded;
}
CreoleRenderer.java 文件源码
java
阅读 22
收藏 0
点赞 0
评论 0
项目:reviki
作者:
评论列表
文章目录