diff options
Diffstat (limited to 'plugins/base/src')
5 files changed, 167 insertions, 6 deletions
diff --git a/plugins/base/src/main/kotlin/DokkaBase.kt b/plugins/base/src/main/kotlin/DokkaBase.kt index ed23d77e..9b6e9b1a 100644 --- a/plugins/base/src/main/kotlin/DokkaBase.kt +++ b/plugins/base/src/main/kotlin/DokkaBase.kt @@ -4,6 +4,8 @@ import org.jetbrains.dokka.CoreExtensions import org.jetbrains.dokka.base.transformers.descriptors.DefaultDescriptorToDocumentationTranslator import org.jetbrains.dokka.base.transformers.documentables.DefaultDocumentableMerger import org.jetbrains.dokka.base.transformers.documentables.DefaultDocumentablesToPageTranslator +import org.jetbrains.dokka.base.transformers.pages.comments.CommentsToContentConverter +import org.jetbrains.dokka.base.transformers.pages.comments.DocTagToContentConverter import org.jetbrains.dokka.base.transformers.pages.merger.FallbackPageMergerStrategy import org.jetbrains.dokka.base.transformers.pages.merger.PageMergerStrategy import org.jetbrains.dokka.base.transformers.pages.merger.PageNodeMerger @@ -12,8 +14,9 @@ import org.jetbrains.dokka.base.transformers.psi.DefaultPsiToDocumentationTransl import org.jetbrains.dokka.plugability.DokkaPlugin import org.jetbrains.dokka.renderers.html.HtmlRenderer -class DokkaBase: DokkaPlugin() { +class DokkaBase : DokkaPlugin() { val pageMergerStrategy by extensionPoint<PageMergerStrategy>() + val commentsToContentConverter by extensionPoint<CommentsToContentConverter>() val descriptorToDocumentationTranslator by extending(isFallback = true) { CoreExtensions.descriptorToDocumentationTranslator providing ::DefaultDescriptorToDocumentationTranslator @@ -28,7 +31,13 @@ class DokkaBase: DokkaPlugin() { } val documentablesToPageTranslator by extending(isFallback = true) { - CoreExtensions.documentablesToPageTranslator with DefaultDocumentablesToPageTranslator + CoreExtensions.documentablesToPageTranslator providing { ctx -> + DefaultDocumentablesToPageTranslator(ctx.single(commentsToContentConverter), ctx.logger) + } + } + + val docTagToContentConverter by extending(isFallback = true) { + commentsToContentConverter with DocTagToContentConverter } val pageMerger by extending { diff --git a/plugins/base/src/main/kotlin/transformers/documentables/DefaultDocumentablesToPageTranslator.kt b/plugins/base/src/main/kotlin/transformers/documentables/DefaultDocumentablesToPageTranslator.kt index 90f8e2d7..d28791ab 100644 --- a/plugins/base/src/main/kotlin/transformers/documentables/DefaultDocumentablesToPageTranslator.kt +++ b/plugins/base/src/main/kotlin/transformers/documentables/DefaultDocumentablesToPageTranslator.kt @@ -1,21 +1,26 @@ package org.jetbrains.dokka.base.transformers.documentables import org.jetbrains.dokka.CoreExtensions +import org.jetbrains.dokka.base.transformers.pages.comments.CommentsToContentConverter import org.jetbrains.dokka.model.Module import org.jetbrains.dokka.pages.ModulePageNode import org.jetbrains.dokka.plugability.DokkaContext import org.jetbrains.dokka.transformers.documentation.DocumentablesToPageTranslator +import org.jetbrains.dokka.utilities.DokkaLogger -object DefaultDocumentablesToPageTranslator : DocumentablesToPageTranslator { - override fun invoke(module: Module, context: DokkaContext): ModulePageNode = +class DefaultDocumentablesToPageTranslator( + private val commentsToContentConverter: CommentsToContentConverter, + private val logger: DokkaLogger +) : DocumentablesToPageTranslator { + override fun invoke(module: Module): ModulePageNode = DefaultPageBuilder { node, kind, operation -> DefaultPageContentBuilder.group( setOf(node.dri), node.platformData, kind, - context.single(CoreExtensions.commentsToContentConverter), - context.logger, + commentsToContentConverter, + logger, operation ) }.pageForModule(module) diff --git a/plugins/base/src/main/kotlin/transformers/documentables/PageContentBuilder.kt b/plugins/base/src/main/kotlin/transformers/documentables/PageContentBuilder.kt index 809b97a0..6ce883b1 100644 --- a/plugins/base/src/main/kotlin/transformers/documentables/PageContentBuilder.kt +++ b/plugins/base/src/main/kotlin/transformers/documentables/PageContentBuilder.kt @@ -1,5 +1,6 @@ package org.jetbrains.dokka.base.transformers.documentables +import org.jetbrains.dokka.base.transformers.pages.comments.CommentsToContentConverter import org.jetbrains.dokka.links.DRI import org.jetbrains.dokka.model.Documentable import org.jetbrains.dokka.model.Function diff --git a/plugins/base/src/main/kotlin/transformers/pages/comments/CommentsToContentConverter.kt b/plugins/base/src/main/kotlin/transformers/pages/comments/CommentsToContentConverter.kt new file mode 100644 index 00000000..4d2f14a5 --- /dev/null +++ b/plugins/base/src/main/kotlin/transformers/pages/comments/CommentsToContentConverter.kt @@ -0,0 +1,14 @@ +package org.jetbrains.dokka.base.transformers.pages.comments + +import org.jetbrains.dokka.model.doc.DocTag +import org.jetbrains.dokka.pages.* + +interface CommentsToContentConverter { + fun buildContent( + docTag: DocTag, + dci: DCI, + platforms: Set<PlatformData>, + styles: Set<Style> = emptySet(), + extras: Set<Extra> = emptySet() + ): List<ContentNode> +} diff --git a/plugins/base/src/main/kotlin/transformers/pages/comments/DocTagToContentConverter.kt b/plugins/base/src/main/kotlin/transformers/pages/comments/DocTagToContentConverter.kt new file mode 100644 index 00000000..70792534 --- /dev/null +++ b/plugins/base/src/main/kotlin/transformers/pages/comments/DocTagToContentConverter.kt @@ -0,0 +1,132 @@ +package org.jetbrains.dokka.base.transformers.pages.comments + +import org.jetbrains.dokka.model.doc.* +import org.jetbrains.dokka.pages.* +import org.jetbrains.dokka.plugability.DokkaContext + +object DocTagToContentConverter : CommentsToContentConverter { + override fun buildContent( + docTag: DocTag, + dci: DCI, + platforms: Set<PlatformData>, + styles: Set<Style>, + extras: Set<Extra> + + ): List<ContentNode> { + + fun buildChildren(docTag: DocTag, newStyles: Set<Style> = emptySet(), newExtras: Set<Extra> = emptySet()) = + docTag.children.flatMap { + buildContent(it, dci, platforms, styles + newStyles, extras + newExtras) + } + + fun buildHeader(level: Int) = + listOf( + ContentHeader( + buildChildren(docTag), + level, + dci, + platforms, + styles, + extras + ) + ) + + fun buildList(ordered: Boolean) = + listOf( + ContentList( + buildChildren(docTag), + ordered, + dci, + platforms, + styles, + extras + ) + ) + + return when (docTag) { + is H1 -> buildHeader(1) + is H2 -> buildHeader(2) + is H3 -> buildHeader(3) + is H4 -> buildHeader(4) + is H5 -> buildHeader(5) + is H6 -> buildHeader(6) + is Ul -> buildList(false) + is Ol -> buildList(true) + is Li -> buildChildren(docTag) + is B -> buildChildren(docTag, setOf(TextStyle.Strong)) + is I -> buildChildren(docTag, setOf(TextStyle.Italic)) + is P -> buildChildren(docTag, newStyles = setOf(TextStyle.Paragraph)) + is A -> listOf( + ContentResolvedLink( + buildChildren(docTag), + docTag.params.get("href")!!, + dci, + platforms, + styles, + extras + ) + ) + is DocumentationLink -> listOf( + ContentDRILink( + buildChildren(docTag), + docTag.dri, + DCI( + setOf(docTag.dri), + ContentKind.Symbol + ), + platforms, + styles, + extras + ) + ) + is BlockQuote -> listOf( + ContentCode( + buildChildren(docTag), + "", + dci, + platforms, + styles, + extras + ) + ) + is Code -> listOf( + ContentCode( + buildChildren(docTag), + "", + dci, + platforms, + styles, + extras + ) + ) + is Img -> listOf( + ContentEmbeddedResource( + address = docTag.params["href"]!!, + altText = docTag.params["alt"], + dci = dci, + platforms = platforms, + style = styles, + extras = extras + ) + ) + is HorizontalRule -> listOf( + ContentText( + "", + dci, + platforms, + setOf() + ) + ) + is Text -> listOf( + ContentText( + docTag.body, + dci, + platforms, + styles, + extras + ) + ) + else -> buildChildren(docTag) + } + } +} |