aboutsummaryrefslogtreecommitdiff
path: root/mardown/ast.go
diff options
context:
space:
mode:
authorAnhgelus Morhtuuzh <william@herges.fr>2025-09-30 17:33:31 +0200
committerAnhgelus Morhtuuzh <william@herges.fr>2025-09-30 17:33:31 +0200
commitc40941359d46468ecd0b71919e34a1c481c7bee2 (patch)
tree15a96ebf103c2d861f8a93f23ad96c66ecf4eb35 /mardown/ast.go
parentde803487db3f02946eee753d50db00e625888049 (diff)
feat(markdown): simple ast with header base
Diffstat (limited to 'mardown/ast.go')
-rw-r--r--mardown/ast.go51
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
+}