diff options
author | Błażej Kardyś <bkardys@virtuslab.com> | 2019-11-27 17:45:33 +0100 |
---|---|---|
committer | Błażej Kardyś <bkardys@virtuslab.com> | 2019-11-28 12:53:21 +0100 |
commit | d37cf2f32840779706154a3cddbb2239cd80fd84 (patch) | |
tree | 97e2199624100550456e218a02d1e1590581b781 /core/src/main/kotlin/markdown | |
parent | 970bb62105af3828234eb871230ee9c1cd216af7 (diff) | |
download | dokka-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.kt | 53 |
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) +} |