Ejemplo n.º 1
0
        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);
        }