From 29dcf9acb98d1f4ebde3156ce7021b3b4e5d679c Mon Sep 17 00:00:00 2001 From: Anhgelus Morhtuuzh Date: Tue, 30 Sep 2025 16:55:03 +0200 Subject: feat(markdown): support external ref and test --- mardown/lexer.go | 15 +++++++++++++++ mardown/lexer_test.go | 22 ++++++++++++++++++++++ 2 files changed, 37 insertions(+) create mode 100644 mardown/lexer_test.go (limited to 'mardown') diff --git a/mardown/lexer.go b/mardown/lexer.go index a7b364d..42519e7 100644 --- a/mardown/lexer.go +++ b/mardown/lexer.go @@ -12,6 +12,8 @@ const ( lexerHeader lexerType = "header" lexerQuote lexerType = "quote" + lexerExternal lexerType = "external" + lexerLiteral lexerType = "literal" ) @@ -38,6 +40,14 @@ func (l *lexers) Finished() bool { return l.current+1 >= len(l.lexers) } +func (l *lexers) String() string { + s := "Lexers[" + for _, l := range l.lexers { + s += l.String() + " " + } + return s + "]" +} + func lex(s string) *lexers { lxs := &lexers{current: -1} var lexs []lexer @@ -63,10 +73,15 @@ func lex(s string) *lexers { fn(c, lexerHeader) case '>': fn(c, lexerQuote) + case '[', ']', '(', ')', '!': + fn(c, lexerExternal) default: fn(c, lexerLiteral) } } + if len(previous) > 0 { + lexs = append(lexs, lexer{Type: currentType, Value: previous}) + } lxs.lexers = lexs return lxs } diff --git a/mardown/lexer_test.go b/mardown/lexer_test.go new file mode 100644 index 0000000..296e9b9 --- /dev/null +++ b/mardown/lexer_test.go @@ -0,0 +1,22 @@ +package mardown + +import "testing" + +func TestLex(t *testing.T) { + lxs := lex("bonjour les gens") + if lxs.String() != "Lexers[literal(bonjour les gens) ]" { + t.Errorf("invalid lex, got %s", lxs) + } + lxs = lex("# bonjour les gens") + if lxs.String() != "Lexers[header(#) literal( bonjour les gens) ]" { + t.Errorf("invalid lex, got %s", lxs) + } + lxs = lex("# bonjour les gens\nComment ça va ?") + if lxs.String() != "Lexers[header(#) literal( bonjour les gens) break(\n) literal(Comment ça va ?) ]" { + t.Errorf("invalid lex, got %s", lxs) + } + lxs = lex("**hey**, what's up?") + if lxs.String() != "Lexers[modifier(**) literal(hey) modifier(**) literal(, what's up?) ]" { + t.Errorf("invalid lex, got %s", lxs) + } +} -- cgit v1.2.3