aboutsummaryrefslogtreecommitdiff
path: root/mardown/lexer.go
diff options
context:
space:
mode:
authorAnhgelus Morhtuuzh <william@herges.fr>2025-10-02 11:05:30 +0200
committerAnhgelus Morhtuuzh <william@herges.fr>2025-10-02 11:05:30 +0200
commitc176f81dc60d558edfe626ac805a0173c12f317d (patch)
tree59706257e2e8b30b6dcec9ed609c5ff676524a5b /mardown/lexer.go
parent597e15a5cde4127105ce7a6109d52491d6976be7 (diff)
feat(markdown): support * as unordered list
Diffstat (limited to 'mardown/lexer.go')
-rw-r--r--mardown/lexer.go30
1 files changed, 22 insertions, 8 deletions
diff --git a/mardown/lexer.go b/mardown/lexer.go
index 52e5788..c4ff988 100644
--- a/mardown/lexer.go
+++ b/mardown/lexer.go
@@ -73,8 +73,10 @@ func lex(s string) *lexers {
currentType = t
previous += string(c)
}
+ newLine := true
literalNext := false
- for _, c := range []rune(s) {
+ runes := []rune(s)
+ for i, c := range runes {
if literalNext {
fn(c, lexerLiteral)
literalNext = false
@@ -86,27 +88,39 @@ func lex(s string) *lexers {
}
switch c {
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 = ""
+ if c == '*' && newLine && i < len(runes)-1 && runes[i+1] == ' ' {
+ fn(c, lexerList)
+ } 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)
}
- currentType = lexerModifier
- previous += string(c)
+ newLine = false
case '`':
+ newLine = false
fn(c, lexerCode)
case '\n':
+ newLine = true
fn(c, lexerBreak)
case '#':
+ newLine = false
fn(c, lexerHeader)
case '>':
+ newLine = false
fn(c, lexerQuote)
case '[', ']', '(', ')', '!':
+ newLine = false
fn(c, lexerExternal)
case '-', '1', '2', '3', '4', '5', '6', '7', '8', '9', '.':
+ newLine = false
fn(c, lexerList)
default:
+ newLine = false
fn(c, lexerLiteral)
}
}