diff --git a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/messages/ToPlainText.kt b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/messages/ToPlainText.kt index ef7f1f915c..7e37be8614 100644 --- a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/messages/ToPlainText.kt +++ b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/messages/ToPlainText.kt @@ -57,10 +57,16 @@ private class PlainTextNodeVisitor : NodeVisitor { if (node is TextNode && node.text().isNotBlank()) { builder.append(node.text()) } else if (node is Element && node.tagName() == "li") { - val index = node.elementSiblingIndex() + val index = node.elementSiblingIndex() + 1 val isOrdered = node.parent()?.nodeName()?.lowercase() == "ol" if (isOrdered) { - builder.append("${index + 1}. ") + val startIndex = node.parent()?.attr("start")?.toIntOrNull() + val actualIndex = if (startIndex != null) { + startIndex + index - 1 + } else { + index + } + builder.append("$actualIndex. ") } else { builder.append("• ") } diff --git a/libraries/matrixui/src/test/kotlin/io/element/android/libraries/matrix/ui/messages/ToPlainTextTest.kt b/libraries/matrixui/src/test/kotlin/io/element/android/libraries/matrix/ui/messages/ToPlainTextTest.kt index 11f5d2fd5a..9444081f7f 100644 --- a/libraries/matrixui/src/test/kotlin/io/element/android/libraries/matrix/ui/messages/ToPlainTextTest.kt +++ b/libraries/matrixui/src/test/kotlin/io/element/android/libraries/matrix/ui/messages/ToPlainTextTest.kt @@ -96,6 +96,29 @@ class ToPlainTextTest { ) } + @Test + fun `TextMessageType toPlainText - respects the ol start attr if present`() { + val messageType = TextMessageType( + body = "1. First item\n2. Second item\n", + formatted = FormattedBody( + format = MessageFormat.HTML, + body = """ +
    +
  1. First item.
  2. +
  3. Second item.
  4. +
+
+ """.trimIndent() + ) + ) + assertThat(messageType.toPlainText(permalinkParser = FakePermalinkParser())).isEqualTo( + """ + 11. First item. + 12. Second item. + """.trimIndent() + ) + } + @Test fun `TextMessageType toPlainText - returns the markdown body if the formatted one cannot be parsed`() { val messageType = TextMessageType(