Просто используйте unsafe
внутри вашего тега, чтобы предотвратить кодирование HTML.
body {
unsafe {
+"""<form class="formClass"/>"""
}
}
Все, что внутри appendHTML
будет закодировано. Если вы хотите добавить исходный текст, вы можете использовать appendln
.
Пример из Потоковая передача · Kotlin / kotlinx.html Wiki · GitHub :
val text = StringBuilder {
appendln("<!DOCTYPE html>")
appendHTML().html {
body {
a("http://kotlinlang.org") { +"link" }
}
}
appendln()
}
Решение A (ограниченное) было бы взломать DSL и использовать onTagContentUnsafe
:
this.consumer.onTagContentUnsafe { +"hello"}
Каждый Tag
обладает свойством consumer
. Это объект, который действительно имеет дело с DOM. В случае генерации HTML этот объект HTMLStreamBuilder
. У него есть метод onTagContentUnsafe
, который дает вам доступ к построителю потока.
Я использую вспомогательную функцию:
fun Tag.rawHtml(html: String) {
assert(this.consumer is HTMLStreamBuilder)
this.consumer.onTagContentUnsafe { +"$html\n"}
}
Как отмечалось в @orangy, это решение работает генерация кода, но вы не можете использовать его для создания JVM DOM и т. д. Для этого есть билет: https://github.com/Kotlin/kotlinx.html/issues/8