aboutsummaryrefslogtreecommitdiff
path: root/mardown
diff options
context:
space:
mode:
authorAnhgelus Morhtuuzh <william@herges.fr>2025-10-02 15:25:48 +0200
committerAnhgelus Morhtuuzh <william@herges.fr>2025-10-02 15:25:48 +0200
commitb5d7d7816e9b7c5e3b2598e3a1dc322580aec65b (patch)
tree60da32b330b6ad4ab6cedbf246d0e8e4002d1d77 /mardown
parent4aafb0de729aaf9c8bc2658b4992ac6a3536d471 (diff)
feat(markdown): better error indicator
Diffstat (limited to 'mardown')
-rw-r--r--mardown/ast_modifier.go8
-rw-r--r--mardown/error.go20
2 files changed, 17 insertions, 11 deletions
diff --git a/mardown/ast_modifier.go b/mardown/ast_modifier.go
index 93a5af3..36c6193 100644
--- a/mardown/ast_modifier.go
+++ b/mardown/ast_modifier.go
@@ -8,7 +8,7 @@ import (
)
var (
- ErrInvalidModifier = errors.Join(ErrInvalidParagraph, errors.New("invalid modifier organization"))
+ ErrInvalidUsage = errors.Join(ErrInvalidParagraph, errors.New("invalid modifier usage"))
ErrInvalidTypeInModifier = errors.Join(ErrInvalidParagraph, errors.New("invalid type in modifier"))
)
@@ -110,7 +110,7 @@ func modifier(lxs *lexers) (*astModifier, error) {
case lexerBreak:
lxs.Before() // because we did not use it
if len(s) != 0 {
- return nil, ErrInvalidModifier
+ return nil, ErrInvalidUsage
}
return mod, nil
case lexerExternal:
@@ -128,7 +128,7 @@ func modifier(lxs *lexers) (*astModifier, error) {
}
}
if len(s) != 0 {
- return nil, ErrInvalidModifier
+ return nil, ErrInvalidUsage
}
return mod, nil
}
@@ -144,7 +144,7 @@ func modifierDetect(val string) (*astModifier, error) {
case 3:
mod.super = true
default:
- return nil, ErrInvalidModifier
+ return nil, ErrInvalidUsage
}
return mod, nil
}
diff --git a/mardown/error.go b/mardown/error.go
index bdcd9df..ad279fe 100644
--- a/mardown/error.go
+++ b/mardown/error.go
@@ -24,14 +24,20 @@ func (e *ParseError) Pretty() string {
ind := ""
for lxs.Next() && lxs.Current().Type != lexerBreak {
contxt += lxs.Current().Value
- ln := len(lxs.Current().Value)
- if lxs.current == current-1 {
- ln--
- ind += "^"
- }
- for range ln {
- ind += "~"
+ if lxs.current <= current {
+ ch := "~"
+ if lxs.current == current {
+ ch = "^"
+ }
+ for range len(lxs.Current().Value) {
+ ind += ch
+ }
}
}
+ if lxs.current == current {
+ runes := []rune(ind)
+ runes[len(runes)-1] = '^'
+ ind = string(runes)
+ }
return fmt.Sprintf("%v\n\n%s\n%s", e, contxt, ind)
}