Add test for autolink parsing, extend parser with autolink support, and bump version to 2.1.0

This commit is contained in:
2026-02-27 15:15:05 +01:00
parent 5c0d09e38f
commit bda99a5d56
3 changed files with 38 additions and 3 deletions

View File

@@ -8,7 +8,7 @@ plugins {
} }
group = "nl.astraeus" group = "nl.astraeus"
version = "2.0.1" version = "2.1.0"
repositories { repositories {
mavenCentral() mavenCentral()

View File

@@ -1,6 +1,14 @@
package nl.astraeus.markdown.parser 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 { private enum class ParType {
TEXT, TEXT,
@@ -19,6 +27,7 @@ private enum class ParType {
LINK_IMAGE_ALT, LINK_IMAGE_ALT,
LINK_IMAGE_SRC, LINK_IMAGE_SRC,
LINK_IMAGE_LINK, LINK_IMAGE_LINK,
AUTOLINK,
} }
private typealias ParagraphData = MutableMap<ParType, String> private typealias ParagraphData = MutableMap<ParType, String>
@@ -114,6 +123,21 @@ private val states = listOf(
ParState(ParType.ITALIC, "*", ParType.TEXT) { data -> ParState(ParType.ITALIC, "*", ParType.TEXT) { data ->
Italic(data[ParType.ITALIC]!!) 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 { private fun String.test(index: Int, value: String): Boolean {

View File

@@ -364,7 +364,6 @@ class ParseTest {
assertEquals(2, list2.lines[2].indentation) assertEquals(2, list2.lines[2].indentation)
} }
@Test @Test
fun testCheckboxListError() { fun testCheckboxListError() {
val input = """ val input = """
@@ -396,4 +395,16 @@ class ParseTest {
assertEquals("markdown", (p.parts[1] as MarkdownPart.ParagraphPart.Bold).text) assertEquals("markdown", (p.parts[1] as MarkdownPart.ParagraphPart.Bold).text)
} }
@Test
fun testAutlinks() {
val input = """
Dit is een text met <info@example.com> mail autolink and <http://www.nu.nl> http autolink.
""".trimIndent()
val md = markdown(input)
assertEquals(1, md.size)
val paragraph = md[0] as MarkdownPart.Paragraph
assertEquals(5, paragraph.parts.size)
}
} }