blob: 85e6d530afc08db6ee8d47bac2ac44802ccb2bf4 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
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()
|