diff --git a/build.gradle.kts b/build.gradle.kts index b7b36c3..7c81767 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -8,7 +8,7 @@ plugins { } group = "nl.astraeus" -version = "1.0.11" +version = "1.1.0" repositories { mavenCentral() diff --git a/src/commonMain/kotlin/nl/astraeus/markdown/parser/Markdown.kt b/src/commonMain/kotlin/nl/astraeus/markdown/parser/Markdown.kt index 3a319a5..5e9fce0 100644 --- a/src/commonMain/kotlin/nl/astraeus/markdown/parser/Markdown.kt +++ b/src/commonMain/kotlin/nl/astraeus/markdown/parser/Markdown.kt @@ -66,7 +66,7 @@ sealed class MarkdownPart { ) : MarkdownPart() data class UnorderedList( - val lines: List, + val lines: List>, ) : MarkdownPart() data class CheckboxList( diff --git a/src/commonMain/kotlin/nl/astraeus/markdown/parser/Parser.kt b/src/commonMain/kotlin/nl/astraeus/markdown/parser/Parser.kt index a83989d..ac4a2cd 100644 --- a/src/commonMain/kotlin/nl/astraeus/markdown/parser/Parser.kt +++ b/src/commonMain/kotlin/nl/astraeus/markdown/parser/Parser.kt @@ -80,7 +80,7 @@ fun markdown(text: String): List { continue } else if (line.startsWith("- ") || line.startsWith("* ")) { buffer.append("\n") - buffer.append(line.substring(2)) + buffer.append(rawLine) } else { buffer.append(" ") buffer.append(line) @@ -146,7 +146,7 @@ fun markdown(text: String): List { line.startsWith("- ") || line.startsWith("* ") -> { parseBuffer() type = MarkdownType.UNORDERED_LIST - buffer.append(line.substring(2)) + buffer.append(rawLine) } line.startsWith("|") -> { @@ -220,6 +220,16 @@ private fun addCheckbox( buffer.clear() } +private fun String.countSpaces(): Int { + var count = 0 + + while (count < this.length && this[count] == ' ') { + count++ + } + + return count +} + private fun handleBuffer( type: MarkdownType, text: String, @@ -242,7 +252,14 @@ private fun handleBuffer( } MarkdownType.UNORDERED_LIST -> { - listOf(MarkdownPart.UnorderedList(text.lines())) + val lines = text.lines() + val list = mutableListOf>() + + for (line in lines) { + val indent: Int = line.countSpaces() + list.add((indent / 2) to line.substring(indent + 2)) + } + listOf(MarkdownPart.UnorderedList(list)) } MarkdownType.CHECKBOX_LIST -> { diff --git a/src/commonTest/kotlin/nl/astraeus/markdown/parser/ParseTest.kt b/src/commonTest/kotlin/nl/astraeus/markdown/parser/ParseTest.kt index 5e0b99d..646b8a9 100644 --- a/src/commonTest/kotlin/nl/astraeus/markdown/parser/ParseTest.kt +++ b/src/commonTest/kotlin/nl/astraeus/markdown/parser/ParseTest.kt @@ -86,6 +86,26 @@ class ParseTest { printMarkdownParts(md) } + @Test + fun testUnorderedListIndentation() { + val input = """ + Dit is een text + + * First + More text + * Second + More text + * Sub 1 + * Sub 2 + + Another paragraph + """.trimIndent() + + val md = markdown(input) + + printMarkdownParts(md) + } + @Test fun testOrderedList() { val input = """