aboutsummaryrefslogtreecommitdiff
path: root/plugins/base/src/main/kotlin/translators/documentables/PageBuilder.kt
diff options
context:
space:
mode:
authorKamil Doległo <kamilok1965@interia.pl>2020-02-21 15:47:08 +0100
committerPaweł Marks <Kordyjan@users.noreply.github.com>2020-02-27 10:51:51 +0100
commitf2c477f4f7126d462e1e42a6118355431bff9af6 (patch)
treee217664f8bf72b90ff9414c8f574bc9d4068a7eb /plugins/base/src/main/kotlin/translators/documentables/PageBuilder.kt
parent1ff50691f11876101b53ba02ba6c344ab688d5df (diff)
downloaddokka-f2c477f4f7126d462e1e42a6118355431bff9af6.tar.gz
dokka-f2c477f4f7126d462e1e42a6118355431bff9af6.tar.bz2
dokka-f2c477f4f7126d462e1e42a6118355431bff9af6.zip
Refactor PageBuilder and PageContentBuilder
Also PageBuilder has been renamed to DefaultPageCreator
Diffstat (limited to 'plugins/base/src/main/kotlin/translators/documentables/PageBuilder.kt')
-rw-r--r--plugins/base/src/main/kotlin/translators/documentables/PageBuilder.kt159
1 files changed, 0 insertions, 159 deletions
diff --git a/plugins/base/src/main/kotlin/translators/documentables/PageBuilder.kt b/plugins/base/src/main/kotlin/translators/documentables/PageBuilder.kt
deleted file mode 100644
index 82419a77..00000000
--- a/plugins/base/src/main/kotlin/translators/documentables/PageBuilder.kt
+++ /dev/null
@@ -1,159 +0,0 @@
-package org.jetbrains.dokka.base.translators.documentables
-
-import org.jetbrains.dokka.model.*
-import org.jetbrains.dokka.model.Enum
-import org.jetbrains.dokka.model.Function
-import org.jetbrains.dokka.model.doc.TagWrapper
-import org.jetbrains.dokka.pages.*
-
-open class DefaultPageBuilder(
- override val rootContentGroup: RootContentBuilder
-) : PageBuilder {
-
- override fun pageForModule(m: Module): ModulePageNode =
- ModulePageNode(m.name.ifEmpty { "root" }, contentForModule(m), m, m.packages.map { pageForPackage(it) })
-
- override fun pageForPackage(p: Package) =
- PackagePageNode(p.name, contentForPackage(p), setOf(p.dri), p,
- p.classlikes.map { pageForClasslike(it) } +
- p.functions.map { pageForMember(it) })
-
- override fun pageForClasslike(c: Classlike): ClasslikePageNode {
- val constructors = when (c) {
- is Class -> c.constructors
- is Enum -> c.constructors
- else -> emptyList()
- }
-
- return ClasslikePageNode(c.name, contentForClasslike(c), setOf(c.dri), c,
- constructors.map { pageForMember(it) } +
- c.classlikes.map { pageForClasslike(it) } +
- c.functions.map { pageForMember(it) })
- }
-
- override fun pageForMember(m: CallableNode): MemberPageNode =
- when (m) {
- is Function ->
- MemberPageNode(m.name, contentForFunction(m), setOf(m.dri), m)
- else -> throw IllegalStateException("$m should not be present here")
- }
-
- protected open fun group(node: Documentable, content: PageContentBuilderFunction) =
- rootContentGroup(node, ContentKind.Main, content)
-
- protected open fun contentForModule(m: Module) = group(m) {
- header(1) { text("root") }
- block("Packages", 2, ContentKind.Packages, m.packages, m.platformData) {
- link(it.name, it.dri)
- }
- text("Index\n")
- text("Link to allpage here")
- }
-
- protected open fun contentForPackage(p: Package) = group(p) {
- header(1) { text("Package ${p.name}") }
- block("Types", 2, ContentKind.Properties, p.classlikes, p.platformData) {
- link(it.name, it.dri)
- text(it.briefDocTagString)
- }
- block("Functions", 2, ContentKind.Functions, p.functions, p.platformData) {
- link(it.name, it.dri)
- signature(it)
- text(it.briefDocTagString)
- }
- }
-
- open fun contentForClasslike(c: Classlike): ContentGroup = when (c) {
- is Class -> contentForClass(c)
- is Enum -> contentForEnum(c)
- else -> throw IllegalStateException("$c should not be present here")
- }
-
- protected fun contentForClass(c: Class) = group(c) {
- header(1) { text(c.name) }
-
- c.inherited.takeIf { it.isNotEmpty() }?.let {
- header(2) { text("SuperInterfaces") }
- linkTable(it)
- }
- contentForComments(c)
- block("Constructors", 2, ContentKind.Functions, c.constructors, c.platformData) {
- link(it.name, it.dri)
- signature(it)
- text(it.briefDocTagString)
- }
- block("Functions", 2, ContentKind.Functions, c.functions, c.platformData) {
- link(it.name, it.dri)
- signature(it)
- text(it.briefDocTagString)
- }
- block("Properties", 2, ContentKind.Properties, c.properties, c.platformData) {
- link(it.name, it.dri)
- text(it.briefDocTagString)
-
- }
- }
-
- fun contentForEnum(c: Enum): ContentGroup = group(c) {
- header(1) { text("enum ${c.name}") }
-
- block("Entries", 2, ContentKind.Properties, c.entries, c.platformData) { entry ->
- link(entry.name, entry.dri)
- contentForComments(entry)
- }
-
- c.inherited.takeIf { it.isNotEmpty() }?.let {
- header(2) { text("SuperInterfaces") }
- linkTable(it)
- }
- contentForComments(c)
- block("Constructors", 2, ContentKind.Functions, c.constructors, c.platformData) {
- link(it.name, it.dri)
- signature(it)
- text(it.briefDocTagString)
- }
- block("Functions", 2, ContentKind.Functions, c.functions, c.platformData) {
- link(it.name, it.dri)
- signature(it)
- text(it.briefDocTagString)
- }
- block("Properties", 2, ContentKind.Properties, c.properties, c.platformData) {
- link(it.name, it.dri)
- text(it.briefDocTagString)
- }
- }
-
- private fun PageContentBuilder.contentForComments(d: Documentable) =
- d.platformInfo.forEach { platformInfo ->
- platformInfo.documentationNode.children.forEach {
- header(3) {
- text(it.toHeaderString())
- text(" [${platformInfo.platformData.joinToString(", ") { it.platformType.name }}]")
- }
- comment(it.root)
- text("\n")
- }
- }
-
- private fun contentForFunction(f: Function) = group(f) {
- header(1) { text(f.name) }
- signature(f)
- contentForComments(f)
- block("Parameters", 2, ContentKind.Parameters, f.children, f.platformData) {
- text(it.name ?: "<receiver>")
- it.platformInfo.forEach { it.documentationNode.children.forEach { comment(it.root) } }
- }
- }
-
- private fun TagWrapper.toHeaderString() = this.javaClass.toGenericString().split('.').last()
-}
-
-typealias RootContentBuilder = (Documentable, Kind, PageContentBuilderFunction) -> ContentGroup
-
-interface PageBuilder {
- val rootContentGroup: RootContentBuilder
- fun pageForModule(m: Module): ModulePageNode
- fun pageForPackage(p: Package): PackagePageNode
- fun pageForMember(m: CallableNode): MemberPageNode
- fun pageForClasslike(c: Classlike): ClasslikePageNode
-} \ No newline at end of file