diff options
| author | Anhgelus Morhtuuzh <william@herges.fr> | 2025-09-30 16:55:03 +0200 |
|---|---|---|
| committer | Anhgelus Morhtuuzh <william@herges.fr> | 2025-09-30 16:55:03 +0200 |
| commit | 29dcf9acb98d1f4ebde3156ce7021b3b4e5d679c (patch) | |
| tree | 09ed13c62b26f72144a8b07819377a3d2c62b71b /mardown | |
| parent | 34d16f28f2d85bc1762e65a73d426de4ac8c30ed (diff) | |
feat(markdown): support external ref and test
Diffstat (limited to 'mardown')
| -rw-r--r-- | mardown/lexer.go | 15 | ||||
| -rw-r--r-- | mardown/lexer_test.go | 22 |
2 files changed, 37 insertions, 0 deletions
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) + } +} |
