diff --git a/vector/src/main/java/im/vector/app/features/html/EventHtmlRenderer.kt b/vector/src/main/java/im/vector/app/features/html/EventHtmlRenderer.kt
index 36acad8854..5fc1306b42 100644
--- a/vector/src/main/java/im/vector/app/features/html/EventHtmlRenderer.kt
+++ b/vector/src/main/java/im/vector/app/features/html/EventHtmlRenderer.kt
@@ -17,9 +17,11 @@
package im.vector.app.features.html
import android.content.Context
+import android.content.res.Resources
import android.text.Spannable
import androidx.core.text.toSpannable
import im.vector.app.core.resources.ColorProvider
+import im.vector.app.core.utils.DimensionConverter
import im.vector.app.features.settings.VectorPreferences
import io.noties.markwon.AbstractMarkwonPlugin
import io.noties.markwon.Markwon
@@ -53,11 +55,11 @@ class EventHtmlRenderer @Inject constructor(
.usePlugin(object : AbstractMarkwonPlugin() { // Markwon expects maths to be in a specific format: https://noties.io/Markwon/docs/v4/ext-latex
override fun processMarkdown(markdown: String): String {
return markdown
- .replace(Regex(""".*?""")) {
- matchResult -> "$$" + matchResult.groupValues[1] + "$$"
+ .replace(Regex(""".*?""")) { matchResult ->
+ "$$" + matchResult.groupValues[1] + "$$"
}
- .replace(Regex("""
.*?
""")) {
- matchResult -> "\n$$\n" + matchResult.groupValues[1] + "\n$$\n"
+ .replace(Regex(""".*?
""")) { matchResult ->
+ "\n$$\n" + matchResult.groupValues[1] + "\n$$\n"
}
}
})
@@ -112,11 +114,12 @@ class EventHtmlRenderer @Inject constructor(
}
}
-class MatrixHtmlPluginConfigure @Inject constructor(private val colorProvider: ColorProvider) : HtmlPlugin.HtmlConfigure {
+class MatrixHtmlPluginConfigure @Inject constructor(private val colorProvider: ColorProvider, private val resources: Resources) : HtmlPlugin.HtmlConfigure {
override fun configureHtml(plugin: HtmlPlugin) {
plugin
.addHandler(FontTagHandler())
+ .addHandler(ParagraphHandler(DimensionConverter(resources)))
.addHandler(MxReplyTagHandler())
.addHandler(SpanHandler(colorProvider))
}
diff --git a/vector/src/main/java/im/vector/app/features/html/ParagraphHandler.kt b/vector/src/main/java/im/vector/app/features/html/ParagraphHandler.kt
new file mode 100644
index 0000000000..e62134ae7c
--- /dev/null
+++ b/vector/src/main/java/im/vector/app/features/html/ParagraphHandler.kt
@@ -0,0 +1,48 @@
+/*
+ * Copyright 2019 New Vector Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package im.vector.app.features.html
+
+import android.content.res.Resources
+import im.vector.app.core.utils.DimensionConverter
+import io.noties.markwon.MarkwonVisitor
+import io.noties.markwon.SpannableBuilder
+import io.noties.markwon.html.HtmlTag
+import io.noties.markwon.html.MarkwonHtmlRenderer
+import io.noties.markwon.html.TagHandler
+import me.gujun.android.span.style.VerticalPaddingSpan
+import org.commonmark.node.BlockQuote
+
+class ParagraphHandler(private val dimensionConverter: DimensionConverter) : TagHandler() {
+
+ override fun supportedTags() = listOf("p")
+
+ override fun handle(visitor: MarkwonVisitor, renderer: MarkwonHtmlRenderer, tag: HtmlTag) {
+ if (tag.isBlock) {
+ visitChildren(visitor, renderer, tag.asBlock)
+ }
+ val configuration = visitor.configuration()
+ val factory = configuration.spansFactory().get(BlockQuote::class.java)
+ if (factory != null) {
+ SpannableBuilder.setSpans(
+ visitor.builder(),
+ VerticalPaddingSpan(dimensionConverter.dpToPx(16), 0),
+ tag.start(),
+ tag.end()
+ )
+ }
+ }
+}