| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- 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;
- }
- }
- }
|