aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnhgelus Morhtuuzh <william@herges.fr>2025-09-30 18:56:23 +0200
committerAnhgelus Morhtuuzh <william@herges.fr>2025-09-30 19:38:10 +0200
commit9b6eb662150adbcd5ffe293a8719ffc4d7c14996 (patch)
treea47bcdcab27e91b4fa5b368add1256127943df3f
parentbaccf109b9d7eb7e95f084579eaea7b6d88b782b (diff)
feat(markdown): set eval return type
-rw-r--r--mardown/ast.go10
-rw-r--r--mardown/ast_header.go23
-rw-r--r--mardown/ast_literal.go9
3 files changed, 36 insertions, 6 deletions
diff --git a/mardown/ast.go b/mardown/ast.go
index 819d73a..fb78113 100644
--- a/mardown/ast.go
+++ b/mardown/ast.go
@@ -3,20 +3,21 @@ package mardown
import (
"errors"
"fmt"
+ "html/template"
)
var ErrUnkownLexType = errors.New("unkown lex type")
type block interface {
- Eval() error
+ Eval() (template.HTML, error)
}
type tree struct {
blocks []block
}
-func (t *tree) Eval() error {
- return nil
+func (t *tree) Eval() (template.HTML, error) {
+ return "", nil
}
func ast(lxs lexers) (*tree, error) {
@@ -42,7 +43,8 @@ func getBlock(lxs lexers) (block, error) {
case lexerCode:
case lexerEscape:
case lexerQuote:
- case lexerLiteral, lexerBreak:
+ case lexerBreak:
+ case lexerLiteral:
b = astLiteral(lxs.Current().Value)
default:
err = errors.Join(ErrUnkownLexType, fmt.Errorf("type received: %s", lxs.Current().Type))
diff --git a/mardown/ast_header.go b/mardown/ast_header.go
index c7bc85d..7c997d5 100644
--- a/mardown/ast_header.go
+++ b/mardown/ast_header.go
@@ -1,12 +1,31 @@
package mardown
+import (
+ "errors"
+ "fmt"
+ "html/template"
+)
+
+var ErrInvalidHeader = errors.New("invalid header")
+
type astHeader struct {
level uint
content []block
}
-func (a *astHeader) Eval() error {
- return nil
+func (a *astHeader) Eval() (template.HTML, error) {
+ if a.level > 6 {
+ return "", ErrInvalidHeader
+ }
+ var content template.HTML
+ for _, b := range a.content {
+ c, err := b.Eval()
+ if err != nil {
+ return "", err
+ }
+ content += c
+ }
+ return template.HTML(fmt.Sprintf("<h%d>%s<h%d>", a.level, content, a.level)), nil
}
func header(lxs lexers) (block, error) {
diff --git a/mardown/ast_literal.go b/mardown/ast_literal.go
new file mode 100644
index 0000000..23b9004
--- /dev/null
+++ b/mardown/ast_literal.go
@@ -0,0 +1,9 @@
+package mardown
+
+import "html/template"
+
+type astLiteral string
+
+func (a astLiteral) Eval() (template.HTML, error) {
+ return template.HTML(template.HTMLEscapeString(string(a))), nil
+}