aboutsummaryrefslogtreecommitdiff
path: root/markdown/lexer.go
diff options
context:
space:
mode:
authorAnhgelus Morhtuuzh <william@herges.fr>2026-02-04 21:45:35 +0100
committerAnhgelus Morhtuuzh <william@herges.fr>2026-02-05 16:36:41 +0000
commitd2273b16237e1c3d731a173f01632cf4f51848dd (patch)
treed541f990bf6278edf31e3d15fb611497fffa60a8 /markdown/lexer.go
parentbc632433bd6102c5c259ea4ad131d545f1989c15 (diff)
refactor(markdown): simplify lexer
Diffstat (limited to 'markdown/lexer.go')
-rw-r--r--markdown/lexer.go34
1 files changed, 15 insertions, 19 deletions
diff --git a/markdown/lexer.go b/markdown/lexer.go
index 5520310..afdc4a0 100644
--- a/markdown/lexer.go
+++ b/markdown/lexer.go
@@ -110,46 +110,42 @@ func lex(s string, opt *Option) *lexers {
continue
}
switch c {
- case '*', '_':
- if c == '*' && newLine && i < len(runes)-1 && runes[i+1] == ' ' {
+ case '*':
+ if newLine && i < len(runes)-1 && runes[i+1] == ' ' {
fn(c, lexerList, nil)
- } else {
- if (currentType != lexerModifier && len(previous) > 0) ||
- (len(previous) > 0 && []rune(previous)[0] != c) ||
- len(previous) >= 3 {
- lexs = append(lexs, lexer{Type: currentType, Value: previous})
- previous = ""
- }
- currentType = lexerModifier
- previous += string(c)
+ newLine = false
+ continue
+ }
+ fallthrough
+ case '_':
+ if (currentType != lexerModifier && len(previous) > 0) ||
+ (len(previous) > 0 && []rune(previous)[0] != c) ||
+ len(previous) >= 3 {
+ lexs = append(lexs, lexer{Type: currentType, Value: previous})
+ previous = ""
}
- newLine = false
+ currentType = lexerModifier
+ previous += string(c)
case '`':
- newLine = false
fn(c, lexerCode, nil)
case '\n':
- newLine = true
fn(c, lexerBreak, nil)
case '#':
- newLine = false
fn(c, lexerHeading, nil)
case '>':
- newLine = false
fn(c, lexerQuote, nil)
case '[', ']', '(', ')', '!':
- newLine = false
fn(c, lexerExternal, func(c rune) bool { return validExternal(previous + string(c)) })
case '-', '1', '2', '3', '4', '5', '6', '7', '8', '9', '.':
- newLine = false
fn(c, lexerList, nil)
default:
- newLine = false
if _, ok := opt.Replaces[c]; ok {
fn(c, lexerReplace, func(c rune) bool { return false })
} else {
fn(c, lexerLiteral, nil)
}
}
+ newLine = c == '\n'
}
if len(previous) > 0 {
lexs = append(lexs, lexer{Type: currentType, Value: previous})