A simple HTML renderer for Compose Multiplatform.
HtmlText("<b>Your <u>HTML</u> here!</b>")Optionally, specify a baseUri including http(s) prefix so URLs pointing to /<dir> are picked up.
- Headings:
- Bold:
<b> - Italic:
<i>or<em> - Underline:
<u> Strikethrough:<strike>- Links:
<a href=""> -
- Ordered Lists:
<ol> - UnorderedLists:
<ul>
- Ordered Lists:
-
Blockquotes:
<blockquote> -
Tables Implementation (WIP) <table><tbody></tbody></table> : <img src="">
HtmlText additionally supports implementing your own tags, or overriding the existing implementations:
private enum class NamedColor(val color: Color) {
Red(Color.Red),
Green(Color.Green),
Blue(Color.Blue)
// ...
}
/**
* A colourable HTML element, using an attribute `color` to set its content's colour.
*/
val HtmlColorable = HtmlElementRenderer { element, modifier ->
val color = element.attr("color")
.takeIf { it.isNotBlank() }
?.lowercase()
?.let { NamedColor.entries.find { entry -> entry.name.lowercase() == it } }
?.color
?: LocalContentColor.current
ProvideTextStyle(TextStyle(color = color)) {
HtmlChildRenderer(element, modifier)
}
}
@Composable
fun App() {
val originalTagMap = LocalHtmlTextTagMap.current
val extendedTagMap = remember {
originalTagMap.extend(
"colorable" to HtmlColorable
)
}
CompositionLocalProvider(LocalHtmlTextTagMap provides extendedTagMap) {
HtmlText(document)
}
}

