aboutsummaryrefslogtreecommitdiff
path: root/plugins/base/src/main/kotlin
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/base/src/main/kotlin')
-rw-r--r--plugins/base/src/main/kotlin/renderers/html/HtmlRenderer.kt27
-rw-r--r--plugins/base/src/main/kotlin/renderers/html/Tags.kt10
2 files changed, 33 insertions, 4 deletions
diff --git a/plugins/base/src/main/kotlin/renderers/html/HtmlRenderer.kt b/plugins/base/src/main/kotlin/renderers/html/HtmlRenderer.kt
index 6d6f71fb..5a6f7c83 100644
--- a/plugins/base/src/main/kotlin/renderers/html/HtmlRenderer.kt
+++ b/plugins/base/src/main/kotlin/renderers/html/HtmlRenderer.kt
@@ -703,18 +703,37 @@ open class HtmlRenderer(
}
}
- override fun FlowContent.buildText(textNode: ContentText) =
+ override fun FlowContent.buildText(textNode: ContentText) = buildText(textNode, textNode.style)
+
+ private fun FlowContent.buildText(textNode: ContentText, unappliedStyles: Set<Style>) {
when {
textNode.extra[HtmlContent] != null -> {
consumer.onTagContentUnsafe { raw(textNode.text) }
}
- textNode.hasStyle(TextStyle.Indented) -> {
+ unappliedStyles.contains(TextStyle.Indented) -> {
consumer.onTagContentEntity(Entities.nbsp)
- text(textNode.text)
+ buildText(textNode, unappliedStyles - TextStyle.Indented)
+ }
+ unappliedStyles.size == 1 && unappliedStyles.contains(TextStyle.Cover) -> buildBreakableText(textNode.text)
+ unappliedStyles.isNotEmpty() -> {
+ val styleToApply = unappliedStyles.first()
+ applyStyle(styleToApply){
+ buildText(textNode, unappliedStyles - styleToApply)
+ }
}
- textNode.hasStyle(TextStyle.Cover) -> buildBreakableText(textNode.text)
else -> text(textNode.text)
}
+ }
+
+ private inline fun FlowContent.applyStyle(styleToApply: Style, crossinline body: FlowContent.() -> Unit){
+ when(styleToApply){
+ TextStyle.Bold -> b { body() }
+ TextStyle.Italic -> i { body() }
+ TextStyle.Strikethrough -> strike { body() }
+ TextStyle.Strong -> strong { body() }
+ else -> body()
+ }
+ }
override fun render(root: RootPageNode) {
shouldRenderSourceSetBubbles = shouldRenderSourceSetBubbles(root)
diff --git a/plugins/base/src/main/kotlin/renderers/html/Tags.kt b/plugins/base/src/main/kotlin/renderers/html/Tags.kt
index 729fc966..f79d1633 100644
--- a/plugins/base/src/main/kotlin/renderers/html/Tags.kt
+++ b/plugins/base/src/main/kotlin/renderers/html/Tags.kt
@@ -17,6 +17,16 @@ open class WBR(initialAttributes: Map<String, String>, consumer: TagConsumer<*>)
HTMLTag("wbr", consumer, initialAttributes, namespace = null, inlineTag = true, emptyTag = false),
HtmlBlockInlineTag
+/**
+ * Work-around until next version of kotlinx.html doesn't come out
+ */
+@HtmlTagMarker
+inline fun FlowOrPhrasingContent.strike(classes : String? = null, crossinline block : STRIKE.() -> Unit = {}) : Unit = STRIKE(attributesMapOf("class", classes), consumer).visit(block)
+
+open class STRIKE(initialAttributes : Map<String, String>, override val consumer : TagConsumer<*>) : HTMLTag("strike", consumer, initialAttributes, null, false, false), HtmlBlockInlineTag {
+
+}
+
fun FlowOrMetaDataContent.templateCommand(data: Command, block: TemplateBlock = {}): Unit =
(consumer as? ImmediateResolutionTagConsumer)?.processCommand(data, block)
?: TemplateCommand(attributesMapOf("data", toJsonString(data)), consumer).visit(block)