From c40941359d46468ecd0b71919e34a1c481c7bee2 Mon Sep 17 00:00:00 2001 From: Anhgelus Morhtuuzh Date: Tue, 30 Sep 2025 17:33:31 +0200 Subject: feat(markdown): simple ast with header base --- mardown/ast.go | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 mardown/ast.go (limited to 'mardown/ast.go') 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 +} -- cgit v1.2.3