diff options
| author | Anhgelus Morhtuuzh <william@herges.fr> | 2025-09-30 17:33:31 +0200 |
|---|---|---|
| committer | Anhgelus Morhtuuzh <william@herges.fr> | 2025-09-30 17:33:31 +0200 |
| commit | c40941359d46468ecd0b71919e34a1c481c7bee2 (patch) | |
| tree | 15a96ebf103c2d861f8a93f23ad96c66ecf4eb35 /mardown/ast.go | |
| parent | de803487db3f02946eee753d50db00e625888049 (diff) | |
feat(markdown): simple ast with header base
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 +} |
