|
|
@@ -16,17 +16,41 @@ namespace Larkdown.Parser
|
|
|
{
|
|
|
var ast = new Ast.Ast();
|
|
|
var lexer = new Lexer.Lexer(source);
|
|
|
- var node = new ParagraphNode();
|
|
|
+ var node = new TextNode(0);
|
|
|
|
|
|
foreach (var token in lexer.Tokens())
|
|
|
{
|
|
|
- if (token.Type == TokenType.Text)
|
|
|
+ switch (token.Type)
|
|
|
{
|
|
|
- node.AddText(token.Content);
|
|
|
+ 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;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- ast.Add(node);
|
|
|
+ if (!node.IsEmpty())
|
|
|
+ {
|
|
|
+ ast.Add(node);
|
|
|
+ }
|
|
|
|
|
|
return ast;
|
|
|
}
|