diff --git a/utils/src/main/java/ru/touchin/roboswag/components/utils/spans/SpanUtils.kt b/utils/src/main/java/ru/touchin/roboswag/components/utils/spans/SpanUtils.kt index 5ad792f..25b6fec 100644 --- a/utils/src/main/java/ru/touchin/roboswag/components/utils/spans/SpanUtils.kt +++ b/utils/src/main/java/ru/touchin/roboswag/components/utils/spans/SpanUtils.kt @@ -13,8 +13,9 @@ fun String.getSpannedTextWithUrls( removeUnderline: Boolean = true, flags: Int = HtmlCompat.FROM_HTML_MODE_COMPACT ): Spanned { - - val spannableText = SpannableString(HtmlCompat.fromHtml(this, flags)) + // HtmlCompat.fromHtml doesn't respect line breaks + val text = this.replace(lineBreakRegex, "
") + val spannableText = SpannableString(HtmlCompat.fromHtml(text, flags)) // Linkify removes all previous URLSpan's, we need to save all created spans for reapply after Linkify val spans = spannableText.getUrlSpans() @@ -38,6 +39,10 @@ fun String.getSpannedTextWithUrls( return spannableText } +private val lineBreakRegex by lazy(LazyThreadSafetyMode.NONE) { + "\r?\n".toRegex() +} + private fun SpannableString.getUrlSpans() = getSpans(0, length, URLSpan::class.java) .map { UrlSpanWithBorders(it, this.getSpanStart(it), this.getSpanEnd(it)) }