Coverage Summary for Class: TableHtmlNodeRenderer (io.heapy.kotmark.ext.gfm.tables.internal)
| Class |
Class, %
|
Method, %
|
Branch, %
|
Line, %
|
Instruction, %
|
| TableHtmlNodeRenderer |
100%
(1/1)
|
100%
(8/8)
|
87.5%
(7/8)
|
100%
(25/25)
|
100%
(129/129)
|
package io.heapy.kotmark.ext.gfm.tables.internal
import io.heapy.kotmark.ext.gfm.tables.TableBlock
import io.heapy.kotmark.ext.gfm.tables.TableBody
import io.heapy.kotmark.ext.gfm.tables.TableCell
import io.heapy.kotmark.ext.gfm.tables.TableHead
import io.heapy.kotmark.ext.gfm.tables.TableRow
import io.heapy.kotmark.node.Node
import io.heapy.kotmark.renderer.html.HtmlNodeRendererContext
class TableHtmlNodeRenderer(
private val context: HtmlNodeRendererContext,
) : TableNodeRenderer() {
private val html = context.writer
override fun renderBlock(node: TableBlock) {
renderContainer(node, "table")
}
override fun renderHead(node: TableHead) {
renderContainer(node, "thead")
}
override fun renderBody(node: TableBody) {
renderContainer(node, "tbody")
}
override fun renderRow(node: TableRow) {
renderContainer(node, "tr")
}
override fun renderCell(node: TableCell) {
val tag = if (node.isHeader) "th" else "td"
html.line()
val attributes =
node.alignment?.let { mapOf("align" to it.name.lowercase()) } ?: emptyMap()
html.tag(tag, context.extendAttributes(node, tag, attributes))
renderChildren(node)
html.tag("/$tag")
html.line()
}
private fun renderContainer(node: Node, tag: String) {
html.line()
html.tag(tag, context.extendAttributes(node, tag, emptyMap()))
renderChildren(node)
html.tag("/$tag")
html.line()
}
private fun renderChildren(parent: Node) {
var child = parent.firstChild
while (child != null) {
val next = child.next
context.render(child)
child = next
}
}
}