diff options
author | Błażej Kardyś <bkardys@virtuslab.com> | 2020-11-13 22:05:15 +0100 |
---|---|---|
committer | Błażej Kardyś <bkardys@virtuslab.com> | 2020-11-27 03:15:02 +0100 |
commit | c203be9fb65ee221875b4e1c865bcd289a85e69c (patch) | |
tree | 40384c13d98f722dbb7c819f8ebadb6caac01651 /plugins/gfm/gfm-all-module-page | |
parent | 4639cbda50359c8dcbaa61f0a960c002c060d3b9 (diff) | |
download | dokka-c203be9fb65ee221875b4e1c865bcd289a85e69c.tar.gz dokka-c203be9fb65ee221875b4e1c865bcd289a85e69c.tar.bz2 dokka-c203be9fb65ee221875b4e1c865bcd289a85e69c.zip |
Adding multimodule all modules page creation for gfm
Diffstat (limited to 'plugins/gfm/gfm-all-module-page')
4 files changed, 73 insertions, 0 deletions
diff --git a/plugins/gfm/gfm-all-module-page/build.gradle.kts b/plugins/gfm/gfm-all-module-page/build.gradle.kts new file mode 100644 index 00000000..66deb291 --- /dev/null +++ b/plugins/gfm/gfm-all-module-page/build.gradle.kts @@ -0,0 +1,11 @@ +import org.jetbrains.registerDokkaArtifactPublication + +dependencies { + implementation(project(":plugins:base")) + implementation(project(":plugins:gfm")) + implementation(project(":plugins:all-module-page")) +} + +registerDokkaArtifactPublication("dokkaGfmAllModulePage") { + artifactId = "gfm-all-module-page-plugin" +}
\ No newline at end of file diff --git a/plugins/gfm/gfm-all-module-page/src/main/kotlin/org/jetbrains/dokka/gfm/allModulesPage/GfmAllModulesPagaPlugin.kt b/plugins/gfm/gfm-all-module-page/src/main/kotlin/org/jetbrains/dokka/gfm/allModulesPage/GfmAllModulesPagaPlugin.kt new file mode 100644 index 00000000..8052a762 --- /dev/null +++ b/plugins/gfm/gfm-all-module-page/src/main/kotlin/org/jetbrains/dokka/gfm/allModulesPage/GfmAllModulesPagaPlugin.kt @@ -0,0 +1,20 @@ +package org.jetbrains.dokka.gfm.allModulesPage + +import org.jetbrains.dokka.allModulesPage.AllModulesPagePlugin +import org.jetbrains.dokka.base.DokkaBase +import org.jetbrains.dokka.gfm.GfmPlugin +import org.jetbrains.dokka.plugability.DokkaPlugin + +class GfmAllModulesPagePlugin : DokkaPlugin() { + + private val gfmPlugin by lazy { plugin<GfmPlugin>() } + + private val dokkaBase by lazy { plugin<DokkaBase>() } + + private val allModulesPagePlugin by lazy { plugin<AllModulesPagePlugin>() } + + val locationProvider by extending { + (dokkaBase.locationProviderFactory providing GfmMultimoduleLocationProvider::Factory + override listOf(allModulesPagePlugin.multimoduleLocationProvider, gfmPlugin.locationProvider)) + } +}
\ No newline at end of file diff --git a/plugins/gfm/gfm-all-module-page/src/main/kotlin/org/jetbrains/dokka/gfm/allModulesPage/GfmMultimoduleLocationProvider.kt b/plugins/gfm/gfm-all-module-page/src/main/kotlin/org/jetbrains/dokka/gfm/allModulesPage/GfmMultimoduleLocationProvider.kt new file mode 100644 index 00000000..d49be426 --- /dev/null +++ b/plugins/gfm/gfm-all-module-page/src/main/kotlin/org/jetbrains/dokka/gfm/allModulesPage/GfmMultimoduleLocationProvider.kt @@ -0,0 +1,41 @@ +package org.jetbrains.dokka.gfm.allModulesPage + +import org.jetbrains.dokka.base.resolvers.local.DokkaBaseLocationProvider +import org.jetbrains.dokka.base.resolvers.local.DokkaLocationProvider +import org.jetbrains.dokka.base.resolvers.local.LocationProviderFactory +import org.jetbrains.dokka.gfm.location.MarkdownLocationProvider +import org.jetbrains.dokka.links.DRI +import org.jetbrains.dokka.model.DisplaySourceSet +import org.jetbrains.dokka.pages.PageNode +import org.jetbrains.dokka.pages.RootPageNode +import org.jetbrains.dokka.plugability.DokkaContext + +class GfmMultimoduleLocationProvider(private val root: RootPageNode, context: DokkaContext) : DokkaBaseLocationProvider(root, context, ".md") { + + private val defaultLocationProvider = MarkdownLocationProvider(root, context) + + val paths = context.configuration.modules.map { + it.name to it.relativePathToOutputDirectory + }.toMap() + + override fun resolve(dri: DRI, sourceSets: Set<DisplaySourceSet>, context: PageNode?) = + dri.takeIf { it.packageName == MULTIMODULE_PACKAGE_PLACEHOLDER }?.classNames?.let { paths[it] }?.let { + "$it/${DokkaLocationProvider.identifierToFilename(dri.classNames.orEmpty())}/index.md" + } ?: defaultLocationProvider.resolve(dri, sourceSets, context) + + override fun resolve(node: PageNode, context: PageNode?, skipExtension: Boolean) = + defaultLocationProvider.resolve(node, context, skipExtension) + + override fun pathToRoot(from: PageNode): String = defaultLocationProvider.pathToRoot(from) + + override fun ancestors(node: PageNode): List<PageNode> = listOf(root) + + companion object { + const val MULTIMODULE_PACKAGE_PLACEHOLDER = ".ext" + } + + class Factory(private val context: DokkaContext): LocationProviderFactory { + override fun getLocationProvider(pageNode: RootPageNode) = + GfmMultimoduleLocationProvider(pageNode, context) + } +}
\ No newline at end of file diff --git a/plugins/gfm/gfm-all-module-page/src/main/resources/META-INF/services/org.jetbrains.dokka.plugability.DokkaPlugin b/plugins/gfm/gfm-all-module-page/src/main/resources/META-INF/services/org.jetbrains.dokka.plugability.DokkaPlugin new file mode 100644 index 00000000..1a8acd51 --- /dev/null +++ b/plugins/gfm/gfm-all-module-page/src/main/resources/META-INF/services/org.jetbrains.dokka.plugability.DokkaPlugin @@ -0,0 +1 @@ +org.jetbrains.dokka.gfm.allModulesPage.GfmAllModulesPagePlugin
\ No newline at end of file |