aboutsummaryrefslogtreecommitdiff
path: root/core/src/main/kotlin/markdown
diff options
context:
space:
mode:
authorBłażej Kardyś <bkardys@virtuslab.com>2019-11-27 17:45:33 +0100
committerBłażej Kardyś <bkardys@virtuslab.com>2019-11-28 12:53:21 +0100
commitd37cf2f32840779706154a3cddbb2239cd80fd84 (patch)
tree97e2199624100550456e218a02d1e1590581b781 /core/src/main/kotlin/markdown
parent970bb62105af3828234eb871230ee9c1cd216af7 (diff)
downloaddokka-d37cf2f32840779706154a3cddbb2239cd80fd84.tar.gz
dokka-d37cf2f32840779706154a3cddbb2239cd80fd84.tar.bz2
dokka-d37cf2f32840779706154a3cddbb2239cd80fd84.zip
Cleaning package naming
Diffstat (limited to 'core/src/main/kotlin/markdown')
-rw-r--r--core/src/main/kotlin/markdown/MarkdownProcessor.kt53
1 files changed, 53 insertions, 0 deletions
diff --git a/core/src/main/kotlin/markdown/MarkdownProcessor.kt b/core/src/main/kotlin/markdown/MarkdownProcessor.kt
new file mode 100644
index 00000000..1304d58e
--- /dev/null
+++ b/core/src/main/kotlin/markdown/MarkdownProcessor.kt
@@ -0,0 +1,53 @@
+package org.jetbrains.dokka.markdown
+
+import org.intellij.markdown.IElementType
+import org.intellij.markdown.MarkdownElementTypes
+import org.intellij.markdown.ast.ASTNode
+import org.intellij.markdown.ast.LeafASTNode
+import org.intellij.markdown.ast.getTextInNode
+import org.intellij.markdown.flavours.commonmark.CommonMarkFlavourDescriptor
+import org.intellij.markdown.parser.MarkdownParser
+
+class MarkdownNode(val node: ASTNode, val parent: MarkdownNode?, val markdown: String) {
+ val children: List<MarkdownNode> = node.children.map { MarkdownNode(it, this, markdown) }
+ val type: IElementType get() = node.type
+ val text: String get() = node.getTextInNode(markdown).toString()
+ fun child(type: IElementType): MarkdownNode? = children.firstOrNull { it.type == type }
+
+ val previous get() = parent?.children?.getOrNull(parent.children.indexOf(this) - 1)
+
+ override fun toString(): String = StringBuilder().apply { presentTo(this) }.toString()
+}
+
+fun MarkdownNode.visit(action: (MarkdownNode, () -> Unit) -> Unit) {
+ action(this) {
+ for (child in children) {
+ child.visit(action)
+ }
+ }
+}
+
+fun MarkdownNode.toTestString(): String {
+ val sb = StringBuilder()
+ var level = 0
+ visit { node, visitChildren ->
+ sb.append(" ".repeat(level * 2))
+ node.presentTo(sb)
+ sb.appendln()
+ level++
+ visitChildren()
+ level--
+ }
+ return sb.toString()
+}
+
+private fun MarkdownNode.presentTo(sb: StringBuilder) {
+ sb.append(type.toString())
+ sb.append(":" + text.replace("w\n", "\u23CE"))
+}
+
+fun parseMarkdown(markdown: String): MarkdownNode {
+ if (markdown.isEmpty())
+ return MarkdownNode(LeafASTNode(MarkdownElementTypes.MARKDOWN_FILE, 0, 0), null, markdown)
+ return MarkdownNode(MarkdownParser(CommonMarkFlavourDescriptor()).buildMarkdownTreeFromString(markdown), null, markdown)
+}