CreoleRenderer.java 文件源码

java
阅读 22 收藏 0 点赞 0 评论 0

项目:reviki 作者:
/**
 * 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;
}
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号