Timeline: Add spacing to quote

This commit is contained in:
ganfra 2022-01-21 16:01:13 +01:00
parent 8c4dff4db9
commit 713f6f7a59
2 changed files with 56 additions and 5 deletions

View file

@ -17,9 +17,11 @@
package im.vector.app.features.html package im.vector.app.features.html
import android.content.Context import android.content.Context
import android.content.res.Resources
import android.text.Spannable import android.text.Spannable
import androidx.core.text.toSpannable import androidx.core.text.toSpannable
import im.vector.app.core.resources.ColorProvider import im.vector.app.core.resources.ColorProvider
import im.vector.app.core.utils.DimensionConverter
import im.vector.app.features.settings.VectorPreferences import im.vector.app.features.settings.VectorPreferences
import io.noties.markwon.AbstractMarkwonPlugin import io.noties.markwon.AbstractMarkwonPlugin
import io.noties.markwon.Markwon 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 .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 { override fun processMarkdown(markdown: String): String {
return markdown return markdown
.replace(Regex("""<span\s+data-mx-maths="([^"]*)">.*?</span>""")) { .replace(Regex("""<span\s+data-mx-maths="([^"]*)">.*?</span>""")) { matchResult ->
matchResult -> "$$" + matchResult.groupValues[1] + "$$" "$$" + matchResult.groupValues[1] + "$$"
} }
.replace(Regex("""<div\s+data-mx-maths="([^"]*)">.*?</div>""")) { .replace(Regex("""<div\s+data-mx-maths="([^"]*)">.*?</div>""")) { matchResult ->
matchResult -> "\n$$\n" + matchResult.groupValues[1] + "\n$$\n" "\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) { override fun configureHtml(plugin: HtmlPlugin) {
plugin plugin
.addHandler(FontTagHandler()) .addHandler(FontTagHandler())
.addHandler(ParagraphHandler(DimensionConverter(resources)))
.addHandler(MxReplyTagHandler()) .addHandler(MxReplyTagHandler())
.addHandler(SpanHandler(colorProvider)) .addHandler(SpanHandler(colorProvider))
} }

View file

@ -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()
)
}
}
}