aboutsummaryrefslogtreecommitdiff
path: root/core/src/main/kotlin/pages
diff options
context:
space:
mode:
authorKamil Doległo <kamilok1965@interia.pl>2019-11-19 19:53:35 +0100
committerBłażej Kardyś <bkardys@virtuslab.com>2019-11-25 16:24:16 +0100
commit954664352b2f2dc22bfc624a65069ce45db7e2bf (patch)
tree199d080f5201d6500daddfa749429af8614661e2 /core/src/main/kotlin/pages
parent562cce04558c0f6b9e266a8e39f0254d6594e84e (diff)
downloaddokka-954664352b2f2dc22bfc624a65069ce45db7e2bf.tar.gz
dokka-954664352b2f2dc22bfc624a65069ce45db7e2bf.tar.bz2
dokka-954664352b2f2dc22bfc624a65069ce45db7e2bf.zip
Initial XML plugin
Diffstat (limited to 'core/src/main/kotlin/pages')
-rw-r--r--core/src/main/kotlin/pages/transformers/XmlAttributesTransformer.kt80
1 files changed, 80 insertions, 0 deletions
diff --git a/core/src/main/kotlin/pages/transformers/XmlAttributesTransformer.kt b/core/src/main/kotlin/pages/transformers/XmlAttributesTransformer.kt
new file mode 100644
index 00000000..7a74cb65
--- /dev/null
+++ b/core/src/main/kotlin/pages/transformers/XmlAttributesTransformer.kt
@@ -0,0 +1,80 @@
+package org.jetbrains.dokka.pages.transformers
+
+import org.jetbrains.dokka.DefaultExtra
+import org.jetbrains.dokka.Model.DocumentationNode
+import org.jetbrains.dokka.Model.dfs
+import org.jetbrains.dokka.links.DRI
+import org.jetbrains.dokka.pages.*
+import org.jetbrains.dokka.renderers.platforms
+
+object XmlAttributesTransformer : PageNodeTransformer {
+ enum class XMLKind : Kind {
+ Main, XmlList
+ }
+
+ override fun invoke(original: ModulePageNode): ModulePageNode {
+ original.findAll { it is ClassPageNode }.forEach { node ->
+ val refs = node.documentationNode?.extra?.filterIsInstance<DefaultExtra>()?.filter { it.key == "@attr ref"}.orEmpty()
+ val elementsToAdd = mutableListOf<DocumentationNode<*>>()
+
+ refs.forEach { ref ->
+ val toFind = DRI.from(ref.value)
+ original.documentationNode?.dfs { it.dri == toFind }?.let { elementsToAdd.add(it) }
+ }
+
+ val refTable = ContentGroup(
+ listOf(
+ ContentHeader(
+ listOf(
+ ContentText(
+ "XML Attributes",
+ DCI(node.dri, XMLKind.XmlList),
+ node.platforms().toSet(), emptySet(), emptySet()
+ )
+ ),
+ 2,
+ DCI(node.dri, XMLKind.Main),
+ node.platforms().toSet(), emptySet(), emptySet()
+ ),
+ ContentTable(
+ emptyList(),
+ elementsToAdd.map {
+ ContentGroup(
+ listOf(
+ ContentDRILink(
+ listOf(
+ ContentText(
+ it.descriptors.first().name.toString(),
+ DCI(node.dri, XMLKind.Main),
+ node.platforms().toSet(), emptySet(), emptySet()
+ )
+ ),
+ it.dri,
+ DCI(it.dri, XMLKind.XmlList),
+ it.platformData.toSet(), emptySet(), emptySet()
+ ),
+ ContentText(
+ it.briefDocstring,
+ DCI(it.dri, XMLKind.XmlList),
+ it.platformData.toSet(), emptySet(), emptySet()
+ )
+ ),
+ DCI(node.dri, XMLKind.XmlList),
+ node.platforms().toSet(), emptySet(), emptySet()
+ )
+ },
+ DCI(node.dri, XMLKind.XmlList),
+ node.platforms().toSet(), emptySet(), emptySet()
+ )
+ ),
+ DCI(node.dri, XMLKind.XmlList),
+ node.platforms().toSet(), emptySet(), emptySet()
+ )
+
+ val content = node.content as ContentGroup
+ val children = (node.content as ContentGroup).children
+ node.content = content.copy(children = children + refTable)
+ }
+ return original
+ }
+}