From bda99a5d56aa012f291899ca3d9bc8d7deec98a2 Mon Sep 17 00:00:00 2001 From: rnentjes Date: Fri, 27 Feb 2026 15:15:05 +0100 Subject: [PATCH] Add test for autolink parsing, extend parser with autolink support, and bump version to 2.1.0 --- build.gradle.kts | 2 +- .../nl/astraeus/markdown/parser/Paragraph.kt | 26 ++++++++++++++++++- .../nl/astraeus/markdown/parser/ParseTest.kt | 13 +++++++++- 3 files changed, 38 insertions(+), 3 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 13f3806..04d2858 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -8,7 +8,7 @@ plugins { } group = "nl.astraeus" -version = "2.0.1" +version = "2.1.0" repositories { mavenCentral() diff --git a/src/commonMain/kotlin/nl/astraeus/markdown/parser/Paragraph.kt b/src/commonMain/kotlin/nl/astraeus/markdown/parser/Paragraph.kt index 01c773c..f5c8a50 100644 --- a/src/commonMain/kotlin/nl/astraeus/markdown/parser/Paragraph.kt +++ b/src/commonMain/kotlin/nl/astraeus/markdown/parser/Paragraph.kt @@ -1,6 +1,14 @@ package nl.astraeus.markdown.parser -import nl.astraeus.markdown.parser.MarkdownPart.ParagraphPart.* +import nl.astraeus.markdown.parser.MarkdownPart.ParagraphPart.Bold +import nl.astraeus.markdown.parser.MarkdownPart.ParagraphPart.BoldItalic +import nl.astraeus.markdown.parser.MarkdownPart.ParagraphPart.Image +import nl.astraeus.markdown.parser.MarkdownPart.ParagraphPart.InlineCode +import nl.astraeus.markdown.parser.MarkdownPart.ParagraphPart.Italic +import nl.astraeus.markdown.parser.MarkdownPart.ParagraphPart.LineBreak +import nl.astraeus.markdown.parser.MarkdownPart.ParagraphPart.Link +import nl.astraeus.markdown.parser.MarkdownPart.ParagraphPart.StrikeThrough +import nl.astraeus.markdown.parser.MarkdownPart.ParagraphPart.Text private enum class ParType { TEXT, @@ -19,6 +27,7 @@ private enum class ParType { LINK_IMAGE_ALT, LINK_IMAGE_SRC, LINK_IMAGE_LINK, + AUTOLINK, } private typealias ParagraphData = MutableMap @@ -114,6 +123,21 @@ private val states = listOf( ParState(ParType.ITALIC, "*", ParType.TEXT) { data -> Italic(data[ParType.ITALIC]!!) }, + + // Autolinks + ParState(ParType.TEXT, "<", ParType.AUTOLINK) { data -> + Text(data[ParType.TEXT]!!) + }, + ParState(ParType.AUTOLINK, ">", ParType.TEXT) { data -> + val content = data[ParType.AUTOLINK]!! + + if (content.contains("@") and content.contains(".")) { + Link("mailto:$content", content) + } else { + Link(content, content) + } + }, + ) private fun String.test(index: Int, value: String): Boolean { diff --git a/src/commonTest/kotlin/nl/astraeus/markdown/parser/ParseTest.kt b/src/commonTest/kotlin/nl/astraeus/markdown/parser/ParseTest.kt index 7f34cf8..bf71c2d 100644 --- a/src/commonTest/kotlin/nl/astraeus/markdown/parser/ParseTest.kt +++ b/src/commonTest/kotlin/nl/astraeus/markdown/parser/ParseTest.kt @@ -364,7 +364,6 @@ class ParseTest { assertEquals(2, list2.lines[2].indentation) } - @Test fun testCheckboxListError() { val input = """ @@ -396,4 +395,16 @@ class ParseTest { assertEquals("markdown", (p.parts[1] as MarkdownPart.ParagraphPart.Bold).text) } + @Test + fun testAutlinks() { + val input = """ + Dit is een text met mail autolink and http autolink. + """.trimIndent() + + val md = markdown(input) + + assertEquals(1, md.size) + val paragraph = md[0] as MarkdownPart.Paragraph + assertEquals(5, paragraph.parts.size) + } }