diff options
Diffstat (limited to 'mardown/ast.go')
| -rw-r--r-- | mardown/ast.go | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/mardown/ast.go b/mardown/ast.go new file mode 100644 index 0000000..76328f4 --- /dev/null +++ b/mardown/ast.go @@ -0,0 +1,51 @@ +package mardown + +import ( + "errors" + "fmt" +) + +var ErrUnkownLexType = errors.New("unkown lex type") + +type block interface { + Eval() error +} + +type tree struct { + blocks []block +} + +func (t *tree) Eval() error { + return nil +} + +func ast(lxs lexers) (*tree, error) { + tr := new(tree) + for lxs.Next() { + b, err := getBlock(lxs) + if err != nil { + return nil, err + } + tr.blocks = append(tr.blocks, b) + } + return tr, nil +} + +func getBlock(lxs lexers) (block, error) { + var b block + var err error + switch lxs.Current().Type { + case lexerHeader: + b, err = header(lxs) + case lexerBreak: + case lexerExternal: + case lexerModifier: + case lexerCode: + case lexerEscape: + case lexerQuote: + case lexerLiteral: + default: + err = errors.Join(ErrUnkownLexType, fmt.Errorf("type received: %s", lxs.Current().Type)) + } + return b, err +} |
