using Larkdown.Parser.Ast; using Larkdown.Parser.Lexer; using System; using System.Collections.Generic; using System.Text; namespace Larkdown.Parser { public class Parser { public Parser() { } public Ast.Ast Parse(string source) { var ast = new Ast.Ast(); var lexer = new Lexer.Lexer(source); var node = new TextNode(0); foreach (var token in lexer.Tokens()) { switch (token.Type) { case TokenType.Empty: if (!node.IsEmpty()) { ast.Add(node); } node = new TextNode(0); break; case TokenType.Indentation: if (token.Content.Length != node.Indent) { if (!node.IsEmpty()) { ast.Add(node); } node = new TextNode(token.Content.Length); } break; case TokenType.Text: node.AddText(token.Content); break; } } if (!node.IsEmpty()) { ast.Add(node); } return ast; } } }