From c176f81dc60d558edfe626ac805a0173c12f317d Mon Sep 17 00:00:00 2001 From: Anhgelus Morhtuuzh Date: Thu, 2 Oct 2025 11:05:30 +0200 Subject: feat(markdown): support * as unordered list --- mardown/lexer.go | 30 ++++++++++++++++++++++-------- 1 file changed, 22 insertions(+), 8 deletions(-) (limited to 'mardown/lexer.go') 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) } } -- cgit v1.2.3