diff options
Diffstat (limited to 'plugins/base/src/main/kotlin')
-rw-r--r-- | plugins/base/src/main/kotlin/renderers/html/HtmlRenderer.kt | 27 | ||||
-rw-r--r-- | plugins/base/src/main/kotlin/renderers/html/Tags.kt | 10 |
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) |