aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnhgelus Morhtuuzh <william@herges.fr>2025-09-30 21:40:34 +0200
committerAnhgelus Morhtuuzh <william@herges.fr>2025-09-30 21:40:34 +0200
commit96f395276f524105ff281c40413c883b55d3e9da (patch)
tree379808fc0dd5c6eff41a6864383cbf0a830a502b
parentc4ba44b1c3e066f98ccc406c15a8c1de170e4709 (diff)
fix(markdown): invalid modifier organization
-rw-r--r--mardown/ast_modifier.go9
-rw-r--r--mardown/ast_test.go14
2 files changed, 21 insertions, 2 deletions
diff --git a/mardown/ast_modifier.go b/mardown/ast_modifier.go
index b9e53a1..7437ab8 100644
--- a/mardown/ast_modifier.go
+++ b/mardown/ast_modifier.go
@@ -57,13 +57,13 @@ func modifier(lxs *lexers) (*astModifier, error) {
}
}
}
- n := len(modInside.symbols)
var s string
for lxs.Next() {
switch lxs.Current().Type {
case lexerLiteral:
s += lxs.Current().Value
case lexerModifier:
+ n := len(modInside.symbols)
if len(lxs.Current().Value) < n {
return nil, ErrInvalidModifier
}
@@ -92,8 +92,13 @@ func modifierDetect(val string) *astModifier {
return mod
}
if val[:2] == "**" || val[:2] == "__" {
- mod.symbols = val
+ mod.symbols = val[:2]
mod.tag = boldTag
+ if len(val) > 2 {
+ next := modifierDetect(val[2:])
+ next.parent = mod
+ mod.content = append(mod.content, next)
+ }
} else {
mod = modifierDetect(val[:1])
next := modifierDetect(val[1:])
diff --git a/mardown/ast_test.go b/mardown/ast_test.go
index 11a9639..6712497 100644
--- a/mardown/ast_test.go
+++ b/mardown/ast_test.go
@@ -17,4 +17,18 @@ func TestAst(t *testing.T) {
t.Errorf("failed, got %s", c)
t.Logf("lxs: %s\ntree: %s", lxs, tree)
}
+ content = "***bon*soir**"
+ lxs = lex(content)
+ tree, err = ast(lxs)
+ if err != nil {
+ t.Fatal(err)
+ }
+ c, err = tree.Eval()
+ if err != nil {
+ t.Fatal(err)
+ }
+ if c != "<p><b><em>bon</em>soir</b></p>" {
+ t.Errorf("failed, got %s", c)
+ t.Logf("lxs: %s\ntree: %s", lxs, tree)
+ }
}