From 760ff510614ba8e2e7cd4747852817cfb434661a Mon Sep 17 00:00:00 2001 From: Jorge Martin Espinosa Date: Fri, 18 Jul 2025 13:23:26 +0200 Subject: [PATCH] Fix `toPlainText` where `
    ` tags appear (#5044) --- .../matrix/ui/messages/ToPlainText.kt | 10 ++++++-- .../matrix/ui/messages/ToPlainTextTest.kt | 23 +++++++++++++++++++ 2 files changed, 31 insertions(+), 2 deletions(-) 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(