aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnhgelus Morhtuuzh <william@herges.fr>2025-09-30 16:55:03 +0200
committerAnhgelus Morhtuuzh <william@herges.fr>2025-09-30 16:55:03 +0200
commit29dcf9acb98d1f4ebde3156ce7021b3b4e5d679c (patch)
tree09ed13c62b26f72144a8b07819377a3d2c62b71b
parent34d16f28f2d85bc1762e65a73d426de4ac8c30ed (diff)
feat(markdown): support external ref and test
-rw-r--r--mardown/lexer.go15
-rw-r--r--mardown/lexer_test.go22
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)
+ }
+}