aboutsummaryrefslogtreecommitdiff
path: root/core/src/main/kotlin/utilities/nodeDebug.kt
diff options
context:
space:
mode:
Diffstat (limited to 'core/src/main/kotlin/utilities/nodeDebug.kt')
-rw-r--r--core/src/main/kotlin/utilities/nodeDebug.kt50
1 files changed, 50 insertions, 0 deletions
diff --git a/core/src/main/kotlin/utilities/nodeDebug.kt b/core/src/main/kotlin/utilities/nodeDebug.kt
new file mode 100644
index 00000000..3290202e
--- /dev/null
+++ b/core/src/main/kotlin/utilities/nodeDebug.kt
@@ -0,0 +1,50 @@
+package org.jetbrains.dokka.utilities
+
+import org.jetbrains.dokka.model.DocumentationNode
+import org.jetbrains.dokka.pages.*
+
+const val DOWN = '\u2503'
+const val BRANCH = '\u2523'
+const val LAST = '\u2517'
+
+fun DocumentationNode.pretty(prefix: String = "", isLast: Boolean = true): String {
+ val nextPrefix = prefix + (if (isLast) ' ' else DOWN) + ' '
+
+ return prefix + (if (isLast) LAST else BRANCH) + this.toString() +
+ children.dropLast(1)
+ .map { it.pretty(nextPrefix, false) }
+ .plus(children.lastOrNull()?.pretty(nextPrefix))
+ .filterNotNull()
+ .takeIf { it.isNotEmpty() }
+ ?.joinToString(prefix = "\n", separator = "")
+ .orEmpty() + if (children.isEmpty()) "\n" else ""
+}
+
+//fun Any.genericPretty(prefix: String = "", isLast: Boolean = true): String {
+// val nextPrefix = prefix + (if (isLast) ' ' else DOWN) + ' '
+//
+// return prefix + (if (isLast) LAST else BRANCH) + this.stringify() +
+// allChildren().dropLast(1)
+// .map { it.genericPretty(nextPrefix, false) }
+// .plus(allChildren().lastOrNull()?.genericPretty(nextPrefix))
+// .filterNotNull()
+// .takeIf { it.isNotEmpty() }
+// ?.joinToString(prefix = "\n", separator = "")
+// .orEmpty() + if (allChildren().isEmpty()) "\n" else ""
+//}
+private fun Any.stringify() = when(this) {
+ is ContentNode -> toString() + this.dci
+ is PageNode -> this.name + this::class.simpleName
+ else -> toString()
+}
+//private fun Any.allChildren() = when(this){
+// is PageNode -> children + content
+// is ContentBlock -> this.children
+// is ContentHeader -> this.items
+// is ContentStyle -> this.items
+// is ContentSymbol -> this.parts
+// is ContentComment -> this.parts
+// is ContentGroup -> this.children
+// is ContentList -> this.items
+// else -> emptyList()
+//}