Coverage Summary for Class: TableMarkdownNodeRenderer (io.heapy.kotmark.ext.gfm.tables.internal)
| Class |
Method, %
|
Branch, %
|
Line, %
|
Instruction, %
|
| TableMarkdownNodeRenderer |
100%
(7/7)
|
76.9%
(10/13)
|
97.2%
(35/36)
|
94.8%
(145/153)
|
| TableMarkdownNodeRenderer$WhenMappings |
|
| Total |
100%
(7/7)
|
76.9%
(10/13)
|
97.2%
(35/36)
|
94.8%
(145/153)
|
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.markdown.MarkdownNodeRendererContext
import io.heapy.kotmark.text.asciiMatcher
class TableMarkdownNodeRenderer(
private val context: MarkdownNodeRendererContext,
) : TableNodeRenderer() {
private val writer = context.writer
private val pipe = asciiMatcher { c('|') }
private val columns = mutableListOf<TableCell.Alignment?>()
override fun renderBlock(node: TableBlock) {
columns.clear()
writer.pushTight(true)
renderChildren(node)
writer.popTight()
writer.block()
}
override fun renderHead(node: TableHead) {
renderChildren(node)
for (alignment in columns) {
writer.raw('|')
writer.raw(
when (alignment) {
TableCell.Alignment.LEFT -> ":---"
TableCell.Alignment.RIGHT -> "---:"
TableCell.Alignment.CENTER -> ":---:"
null -> "---"
},
)
}
writer.raw("|")
writer.block()
}
override fun renderBody(node: TableBody) {
renderChildren(node)
}
override fun renderRow(node: TableRow) {
renderChildren(node)
writer.raw("|")
writer.block()
}
override fun renderCell(node: TableCell) {
if (node.parent?.parent is TableHead) {
columns.add(node.alignment)
}
writer.raw("|")
writer.pushRawEscape(pipe)
renderChildren(node)
writer.popRawEscape()
}
private fun renderChildren(parent: Node) {
var child = parent.firstChild
while (child != null) {
val next = child.next
context.render(child)
child = next
}
}
}