@@ -26,7 +26,6 @@ internal object RichTextStateMarkdownParser : RichTextStateParser<String> {
26
26
@OptIn(ExperimentalRichTextApi ::class )
27
27
override fun encode (input : String ): RichTextState {
28
28
val openedNodes = mutableListOf<ASTNode >()
29
- val stringBuilder = StringBuilder ()
30
29
val richParagraphList = mutableListOf (RichParagraph ())
31
30
var currentRichSpan: RichSpan ? = null
32
31
var currentRichParagraphType: ParagraphType = DefaultParagraph ()
@@ -36,8 +35,6 @@ internal object RichTextStateMarkdownParser : RichTextStateParser<String> {
36
35
onText = { text ->
37
36
if (text.isEmpty()) return @encodeMarkdownToRichText
38
37
39
- stringBuilder.append(text)
40
-
41
38
if (richParagraphList.isEmpty())
42
39
richParagraphList.add(RichParagraph ())
43
40
@@ -47,7 +44,10 @@ internal object RichTextStateMarkdownParser : RichTextStateParser<String> {
47
44
if (safeCurrentRichSpan.children.isEmpty()) {
48
45
safeCurrentRichSpan.text + = text
49
46
} else {
50
- val newRichSpan = RichSpan (paragraph = currentRichParagraph)
47
+ val newRichSpan = RichSpan (
48
+ paragraph = currentRichParagraph,
49
+ parent = safeCurrentRichSpan,
50
+ )
51
51
newRichSpan.text = text
52
52
safeCurrentRichSpan.children.add(newRichSpan)
53
53
}
@@ -63,8 +63,6 @@ internal object RichTextStateMarkdownParser : RichTextStateParser<String> {
63
63
val tagSpanStyle = markdownElementsSpanStyleEncodeMap[node.type]
64
64
65
65
if (node.type in markdownBlockElements) {
66
- stringBuilder.append(' ' )
67
-
68
66
val currentRichParagraph = richParagraphList.last()
69
67
70
68
// Get paragraph type from markdown element
@@ -127,6 +125,7 @@ internal object RichTextStateMarkdownParser : RichTextStateParser<String> {
127
125
currentRichSpan?.spanStyle = currentRichSpan?.spanStyle?.merge(child.spanStyle) ? : child.spanStyle
128
126
currentRichSpan?.style = child.style
129
127
currentRichSpan?.children?.clear()
128
+ currentRichSpan?.children?.addAll(child.children)
130
129
}
131
130
}
132
131
@@ -166,7 +165,7 @@ internal object RichTextStateMarkdownParser : RichTextStateParser<String> {
166
165
167
166
richTextState.richParagraphList.fastForEachIndexed { index, richParagraph ->
168
167
// Append paragraph start text
169
- builder.append (richParagraph.type.startRichSpan.text )
168
+ builder.appendParagraphStartText (richParagraph)
170
169
171
170
richParagraph.getFirstNonEmptyChild()?.let { firstNonEmptyChild ->
172
171
if (firstNonEmptyChild.text.isNotEmpty()) {
@@ -222,6 +221,19 @@ internal object RichTextStateMarkdownParser : RichTextStateParser<String> {
222
221
return stringBuilder.toString()
223
222
}
224
223
224
+ private fun StringBuilder.appendParagraphStartText (paragraph : RichParagraph ) {
225
+ when (val type = paragraph.type) {
226
+ is OrderedList ->
227
+ append(" ${type.number} . " )
228
+
229
+ is UnorderedList ->
230
+ append(" - " )
231
+
232
+ else ->
233
+ Unit
234
+ }
235
+ }
236
+
225
237
/* *
226
238
* Encodes Markdown elements to [SpanStyle].
227
239
*
0 commit comments