private List <Node> Parse(List <MarkdownObject> markdownObjects) { var tokens = new List <IToken>(markdownObjects.Count); var errorListener = new AntlrErrorListener(_logger); foreach (MarkdownObject markdownObject in markdownObjects) { var blockSpan = markdownObject.Span; if (markdownObject is HtmlBlock || markdownObject is HtmlInline) { var lexer = new HtmlLexer(new CaseInsensitiveInputStream(_file.GetSubstring(blockSpan.Start, blockSpan.Length))); lexer.AddErrorListener(errorListener); var currentTokens = lexer.GetAllTokens(); foreach (IToken token in currentTokens) { tokens.Add(new HtmlToken(_file, token.Type, tokens.Count, token.StartIndex + blockSpan.Start, token.StopIndex + blockSpan.Start, token.Text, token.Channel)); } } else { var markdownNode = ParseMarkdown(markdownObject); if (markdownNode != null) { tokens.Add(new MarkdownToken(_file, tokens.Count, blockSpan.Start, blockSpan.End, markdownNode)); } } } var parser = new HtmlParser(new CommonTokenStream(new ListTokenSource(tokens)), _logger); parser.AddErrorListener(errorListener); var root = parser.root(); var children = new List <Node>(root.content().Length); foreach (var contentContext in root.content()) { children.Add(ParseContent(contentContext)); } return(children); }