aboutsummaryrefslogtreecommitdiff
path: root/plugins/base/src/main/kotlin/transformers
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/base/src/main/kotlin/transformers')
-rw-r--r--plugins/base/src/main/kotlin/transformers/documentables/ModuleAndPackageDocumentationTransformer.kt81
-rw-r--r--plugins/base/src/main/kotlin/transformers/pages/sourcelinks/SourceLinksTransformer.kt10
2 files changed, 91 insertions, 0 deletions
diff --git a/plugins/base/src/main/kotlin/transformers/documentables/ModuleAndPackageDocumentationTransformer.kt b/plugins/base/src/main/kotlin/transformers/documentables/ModuleAndPackageDocumentationTransformer.kt
new file mode 100644
index 00000000..92fa8ce4
--- /dev/null
+++ b/plugins/base/src/main/kotlin/transformers/documentables/ModuleAndPackageDocumentationTransformer.kt
@@ -0,0 +1,81 @@
+package org.jetbrains.dokka.base.transformers.documentables
+
+import org.jetbrains.dokka.model.DModule
+import org.jetbrains.dokka.model.PlatformDependent
+import org.jetbrains.dokka.parsers.MarkdownParser
+import org.jetbrains.dokka.plugability.DokkaContext
+import org.jetbrains.dokka.transformers.documentation.PreMergeDocumentableTransformer
+import org.jetbrains.kotlin.name.FqName
+import java.nio.file.Files
+import java.nio.file.Paths
+
+
+internal object ModuleAndPackageDocumentationTransformer : PreMergeDocumentableTransformer {
+
+ override fun invoke(original: List<DModule>, context: DokkaContext): List<DModule> {
+
+ val modulesAndPackagesDocumentation =
+ context.configuration.passesConfigurations
+ .map {
+ Pair(it.moduleName, it.platformData) to
+ it.includes.map { Paths.get(it) }
+ .filter { Files.exists(it) }
+ .flatMap {
+ it.toFile()
+ .readText()
+ .split(Regex("(\n|^)# (?=(Module|Package))")) // Matches heading with Module/Package to split by
+ .filter { it.isNotEmpty() }
+ .map { it.split(Regex(" "), 2) } // Matches space between Module/Package and fully qualified name
+ }.groupBy({ it[0] }, {
+ it[1].split(Regex("\n"), 2) // Matches new line after fully qualified name
+ .let { it[0] to it[1].trim() }
+ }).mapValues {
+ it.value.toMap()
+ }
+ }.toMap()
+
+ return original.map { module ->
+
+ val moduleDocumentation =
+ module.platformData.mapNotNull { pd ->
+ val doc = modulesAndPackagesDocumentation[Pair(module.name, pd)]
+ val facade = context.platforms[pd]?.facade ?:
+ return@mapNotNull null.also { context.logger.warn("Could not find platform data for ${pd.name}") }
+ doc?.get("Module")?.get(module.name)?.run {
+ pd to MarkdownParser(
+ facade,
+ facade.moduleDescriptor
+ ).parse(this)
+ }
+ }.toMap()
+
+ val packagesDocumentation = module.packages.map {
+ it.name to it.platformData.mapNotNull { pd ->
+ val doc = modulesAndPackagesDocumentation[Pair(module.name, pd)]
+ val facade = context.platforms[pd]?.facade ?:
+ return@mapNotNull null.also { context.logger.warn("Could not find platform data for ${pd.name}") }
+ val descriptor = facade.resolveSession.getPackageFragment(FqName(it.name)) ?:
+ return@mapNotNull null.also { context.logger.warn("Could not find descriptor for $") }
+ doc?.get("Package")?.get(it.name)?.run {
+ pd to MarkdownParser(
+ facade,
+ descriptor
+ ).parse(this)
+ }
+ }.toMap()
+ }.toMap()
+
+ module.copy(
+ documentation = module.documentation.let { PlatformDependent(it.map + moduleDocumentation) },
+ packages = module.packages.map {
+ if(packagesDocumentation[it.name] != null)
+ it.copy(documentation = it.documentation.let { value ->
+ PlatformDependent(value.map + packagesDocumentation[it.name]!!)
+ })
+ else
+ it
+ }
+ )
+ }
+ }
+}
diff --git a/plugins/base/src/main/kotlin/transformers/pages/sourcelinks/SourceLinksTransformer.kt b/plugins/base/src/main/kotlin/transformers/pages/sourcelinks/SourceLinksTransformer.kt
new file mode 100644
index 00000000..e6ab7b5e
--- /dev/null
+++ b/plugins/base/src/main/kotlin/transformers/pages/sourcelinks/SourceLinksTransformer.kt
@@ -0,0 +1,10 @@
+package org.jetbrains.dokka.base.transformers.pages.sourcelinks
+
+import org.jetbrains.dokka.pages.RootPageNode
+import org.jetbrains.dokka.transformers.pages.PageTransformer
+
+object SourceLinksTransformer : PageTransformer {
+ override fun invoke(input: RootPageNode): RootPageNode {
+ TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
+ }
+} \ No newline at end of file