Coverage Summary for Class: MathMarkdownNodeRendererKt (io.heapy.kotmark.ext.math.internal)
| Class |
Method, %
|
Branch, %
|
Line, %
|
Instruction, %
|
| MathMarkdownNodeRendererKt |
100%
(2/2)
|
92.9%
(13/14)
|
100%
(19/19)
|
100%
(10/10)
|
| MathMarkdownNodeRendererKt$mathNodeRenderers$$inlined$nodeRenderer$1 |
0%
(0/2)
|
|
| MathMarkdownNodeRendererKt$mathNodeRenderers$$inlined$nodeRenderer$1$1 |
0%
(0/2)
|
|
| MathMarkdownNodeRendererKt$mathNodeRenderers$$inlined$nodeRenderer$default$1 |
0%
(0/2)
|
|
| MathMarkdownNodeRendererKt$mathNodeRenderers$$inlined$nodeRenderer$default$1$1 |
0%
(0/2)
|
|
| Total |
20%
(2/10)
|
92.9%
(13/14)
|
100%
(19/19)
|
100%
(10/10)
|
package io.heapy.kotmark.ext.math.internal
import io.heapy.kotmark.ext.math.InlineMath
import io.heapy.kotmark.ext.math.MathBlock
import io.heapy.kotmark.renderer.markdown.MarkdownRenderer
import io.heapy.kotmark.renderer.markdown.nodeRenderer
internal fun MarkdownRenderer.Configuration.mathNodeRenderers() {
nodeRenderer<InlineMath>(specialCharacters = setOf('$')) { node ->
writer.raw('$')
writer.raw(node.literal)
writer.raw('$')
}
nodeRenderer<MathBlock> { node ->
val lines = if (node.literal.isEmpty()) emptyList() else node.literal.removeSuffix("\n").split('\n')
// Indentation stripped by the parser can expose a fence-looking
// content line. Restore three spaces so it cannot close the block.
val indent = if (lines.any { line ->
val spaces = line.takeWhile { it == ' ' }.length
spaces in 1..3 && line.trim(' ', '\t') == "$$"
}) " " else ""
writer.raw(indent + "$$")
writer.line()
// line() maintains list/blockquote prefixes; raw multiline text does not.
for (line in lines) {
writer.raw(indent + line)
writer.line()
}
writer.raw(indent + "$$")
writer.block()
}
}