aboutsummaryrefslogtreecommitdiff
path: root/src/main/kotlin/org/pacien/pandoc/filter/plantuml/PandocNode.kt
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/kotlin/org/pacien/pandoc/filter/plantuml/PandocNode.kt')
-rw-r--r--src/main/kotlin/org/pacien/pandoc/filter/plantuml/PandocNode.kt30
1 files changed, 30 insertions, 0 deletions
diff --git a/src/main/kotlin/org/pacien/pandoc/filter/plantuml/PandocNode.kt b/src/main/kotlin/org/pacien/pandoc/filter/plantuml/PandocNode.kt
new file mode 100644
index 0000000..8b3ddde
--- /dev/null
+++ b/src/main/kotlin/org/pacien/pandoc/filter/plantuml/PandocNode.kt
@@ -0,0 +1,30 @@
1package org.pacien.pandoc.filter.plantuml
2
3import com.fasterxml.jackson.databind.JsonNode
4import com.fasterxml.jackson.databind.node.ObjectNode
5import com.fasterxml.jackson.databind.node.TextNode
6
7// Structure of a content node:
8// {
9// "t": "CodeBlock",
10// "c": [
11// [
12// "",
13// [ "puml", "otherClass" ],
14// [ ["scale", "0.5"], ["key", "value"] ]
15// ],
16// "@startuml\n@enduml"
17// ]
18// }
19
20fun JsonNode.type(): String = path("t").asText()
21fun JsonNode.classes(): JsonNode = path("c").path(0).path(1)
22fun JsonNode.classNames(): List<String> = classes().map(JsonNode::asText)
23fun JsonNode.attributes(): JsonNode = path("c").path(0).path(2)
24fun JsonNode.attributePair(): Pair<String, String> = Pair(path(0).asText(), path(1).asText())
25fun JsonNode.attributeMap(): Map<String, String> = attributes().associate(JsonNode::attributePair)
26fun JsonNode.content(): String = path("c").path(1).asText()
27
28fun ObjectNode.setBlockType(type: String) = apply { set("t", TextNode.valueOf(type)) }
29fun ObjectNode.setBlockContent(content: JsonNode) = apply { set("c", content) }
30fun ObjectNode.setBlock(type: String, content: JsonNode) = setBlockType(type).setBlockContent(content)