aboutsummaryrefslogtreecommitdiff
path: root/core/src/main/kotlin/pages/RendererSpecificPage.kt
diff options
context:
space:
mode:
authorPaweł Marks <pmarks@virtuslab.com>2020-01-27 09:34:16 +0100
committerPaweł Marks <Kordyjan@users.noreply.github.com>2020-01-31 15:07:06 +0100
commit885ecd28153b484277c9ddcbf4a7f9d761a59545 (patch)
treedb453e66762ebebb3ee05c0301b38c4465ea20a3 /core/src/main/kotlin/pages/RendererSpecificPage.kt
parentc29605d92d1999434ecc79e774281a8280ae2823 (diff)
downloaddokka-885ecd28153b484277c9ddcbf4a7f9d761a59545.tar.gz
dokka-885ecd28153b484277c9ddcbf4a7f9d761a59545.tar.bz2
dokka-885ecd28153b484277c9ddcbf4a7f9d761a59545.zip
Unifing model for pages with content ant technical renderer specific pages
Diffstat (limited to 'core/src/main/kotlin/pages/RendererSpecificPage.kt')
-rw-r--r--core/src/main/kotlin/pages/RendererSpecificPage.kt40
1 files changed, 40 insertions, 0 deletions
diff --git a/core/src/main/kotlin/pages/RendererSpecificPage.kt b/core/src/main/kotlin/pages/RendererSpecificPage.kt
new file mode 100644
index 00000000..85e6d530
--- /dev/null
+++ b/core/src/main/kotlin/pages/RendererSpecificPage.kt
@@ -0,0 +1,40 @@
+package org.jetbrains.dokka.pages
+
+import org.jetbrains.dokka.renderers.Renderer
+import kotlin.reflect.KClass
+
+interface RendererSpecificPage : PageNode {
+ val strategy: RenderingStrategy
+}
+
+class RendererSpecificRootPage(
+ override val name: String,
+ override val children: List<PageNode>,
+ override val strategy: RenderingStrategy
+) : RootPageNode(), RendererSpecificPage {
+ override fun modified(name: String, children: List<PageNode>): RendererSpecificRootPage =
+ RendererSpecificRootPage(name, children, strategy)
+}
+
+class RendererSpecificResourcePage(
+ override val name: String,
+ override val children: List<PageNode>,
+ override val strategy: RenderingStrategy
+): RendererSpecificPage {
+ override fun modified(name: String, children: List<PageNode>): RendererSpecificResourcePage =
+ RendererSpecificResourcePage(name, children, strategy)
+}
+
+sealed class RenderingStrategy {
+ class Callback(val instructions: Renderer.(PageNode) -> String): RenderingStrategy()
+ data class Copy(val from: String) : RenderingStrategy()
+ data class Write(val text: String) : RenderingStrategy()
+ object DoNothing : RenderingStrategy()
+
+ companion object {
+ inline operator fun <reified T: Renderer> invoke(crossinline instructions: T.(PageNode) -> String) =
+ Callback { if (this is T) instructions(it) else throw WrongRendererTypeException(T::class) }
+ }
+}
+
+data class WrongRendererTypeException(val expectedType: KClass<*>): Exception() \ No newline at end of file