diff options
author | BarkingBad <32793002+BarkingBad@users.noreply.github.com> | 2019-12-13 14:01:25 +0100 |
---|---|---|
committer | Kamil Doległo <kamilok1965@interia.pl> | 2019-12-13 14:02:13 +0100 |
commit | dd017a44ed7baae83f4f09a92d9691231f424eaa (patch) | |
tree | ad9a7b6634ff4e4ead43122b13b0fb6dcdfcea85 /core/src/main/kotlin/model | |
parent | 0900b0f1c3a593301a6229ce93a23b8228771d24 (diff) | |
download | dokka-dd017a44ed7baae83f4f09a92d9691231f424eaa.tar.gz dokka-dd017a44ed7baae83f4f09a92d9691231f424eaa.tar.bz2 dokka-dd017a44ed7baae83f4f09a92d9691231f424eaa.zip |
Add abstract structure for MD/HTML comments and MD parser
Diffstat (limited to 'core/src/main/kotlin/model')
-rw-r--r-- | core/src/main/kotlin/model/Documentable.kt (renamed from core/src/main/kotlin/model/DocumentationNode.kt) | 50 | ||||
-rw-r--r-- | core/src/main/kotlin/model/doc/DocNode.kt | 74 | ||||
-rw-r--r-- | core/src/main/kotlin/model/doc/DocType.kt | 18 | ||||
-rw-r--r-- | core/src/main/kotlin/model/doc/DocumentationNode.kt | 3 |
4 files changed, 122 insertions, 23 deletions
diff --git a/core/src/main/kotlin/model/DocumentationNode.kt b/core/src/main/kotlin/model/Documentable.kt index 77225eca..9f676a1e 100644 --- a/core/src/main/kotlin/model/DocumentationNode.kt +++ b/core/src/main/kotlin/model/Documentable.kt @@ -1,11 +1,11 @@ package org.jetbrains.dokka.model +import model.doc.* import org.jetbrains.dokka.transformers.descriptors.KotlinTypeWrapper import org.jetbrains.dokka.links.DRI import org.jetbrains.dokka.pages.PlatformData -import org.jetbrains.kotlin.kdoc.psi.impl.KDocTag -class Module(val packages: List<Package>) : DocumentationNode() { +class Module(val packages: List<Package>) : Documentable() { override val dri: DRI = DRI.topLevel override val children: List<Package> = packages override val extra: MutableSet<Extra> = mutableSetOf() @@ -70,73 +70,77 @@ class Parameter( val type: TypeWrapper, override val actual: List<PlatformInfo>, override val extra: MutableSet<Extra> = mutableSetOf() -) : DocumentationNode() { - override val children: List<DocumentationNode> +) : Documentable() { + override val children: List<Documentable> get() = emptyList() } interface PlatformInfo { - val docTag: KDocTag? - val links: Map<String, DRI> + val documentationNode: DocumentationNode val platformData: List<PlatformData> } class BasePlatformInfo( - override val docTag: KDocTag?, - override val links: Map<String, DRI>, + override val documentationNode: DocumentationNode, override val platformData: List<PlatformData>) : PlatformInfo { override fun equals(other: Any?): Boolean = - other is PlatformInfo && ( - docTag?.text == other.docTag?.text && - links == other.links) + other is PlatformInfo && documentationNode == other.documentationNode override fun hashCode(): Int = - listOf(docTag?.text, links).hashCode() + documentationNode.hashCode() } class ClassPlatformInfo( val info: PlatformInfo, val inherited: List<DRI>) : PlatformInfo by info -abstract class DocumentationNode { +abstract class Documentable { open val expected: PlatformInfo? = null open val actual: List<PlatformInfo> = emptyList() open val name: String? = null val platformInfo by lazy { listOfNotNull(expected) + actual } val platformData by lazy { platformInfo.flatMap { it.platformData }.toSet() } - abstract val dri: DRI - abstract val children: List<DocumentationNode> + abstract val children: List<Documentable> override fun toString(): String { return "${javaClass.simpleName}($dri)" + briefDocstring.takeIf { it.isNotBlank() }?.let { " [$it]" }.orEmpty() } - override fun equals(other: Any?) = other is DocumentationNode && this.dri == other.dri + override fun equals(other: Any?) = other is Documentable && this.dri == other.dri override fun hashCode() = dri.hashCode() - val commentsData: List<Pair<String, Map<String, DRI>>> - get() = platformInfo.mapNotNull { it.docTag?.let { tag -> Pair(tag.getContent(), it.links) } } + + + val commentsData: List<DocumentationNode> + get() = platformInfo.map { it.documentationNode } val briefDocstring: String - get() = platformInfo.firstOrNull()?.docTag?.getContent().orEmpty().shorten(40) + get() = docNodeSummary(platformInfo.firstOrNull()?.documentationNode?.children?.firstOrNull()?.root ?: Text(body = "")).shorten(40) + + private fun docNodeSummary(docNode: DocNode): String { + if(docNode.children.isEmpty() && docNode is Text) + return docNode.body + + return docNode.children.joinToString(" ") { docNodeSummary(it) } + } open val extra: MutableSet<Extra> = mutableSetOf() } -abstract class ScopeNode : DocumentationNode() { +abstract class ScopeNode : Documentable() { abstract val functions: List<Function> abstract val properties: List<Property> abstract val classes: List<Class> - override val children: List<DocumentationNode> + override val children: List<Documentable> get() = functions + properties + classes } -abstract class CallableNode : DocumentationNode() { +abstract class CallableNode : Documentable() { abstract val receiver: Parameter? } @@ -152,7 +156,7 @@ interface TypeWrapper { } interface ClassKind -fun DocumentationNode.dfs(predicate: (DocumentationNode) -> Boolean): DocumentationNode? = +fun Documentable.dfs(predicate: (Documentable) -> Boolean): Documentable? = if (predicate(this)) { this } else { diff --git a/core/src/main/kotlin/model/doc/DocNode.kt b/core/src/main/kotlin/model/doc/DocNode.kt new file mode 100644 index 00000000..0c643551 --- /dev/null +++ b/core/src/main/kotlin/model/doc/DocNode.kt @@ -0,0 +1,74 @@ +package model.doc + +import org.jetbrains.dokka.links.DRI + +sealed class DocNode( + val children: List<DocNode>, + val params: Map<String, String> +) + +class A(children: List<DocNode> = emptyList(), params: Map<String, String> = emptyMap()) : DocNode(children, params) +class Big(children: List<DocNode> = emptyList(), params: Map<String, String> = emptyMap()) : DocNode(children, params) +class B(children: List<DocNode> = emptyList(), params: Map<String, String> = emptyMap()) : DocNode(children, params) +class BlockQuote(children: List<DocNode> = emptyList(), params: Map<String, String> = emptyMap()) : DocNode(children, params) +class Cite(children: List<DocNode> = emptyList(), params: Map<String, String> = emptyMap()) : DocNode(children, params) +class Code(children: List<DocNode> = emptyList(), params: Map<String, String> = emptyMap()) : DocNode(children, params) +class Dd(children: List<DocNode> = emptyList(), params: Map<String, String> = emptyMap()) : DocNode(children, params) +class Dfn(children: List<DocNode> = emptyList(), params: Map<String, String> = emptyMap()) : DocNode(children, params) +class Dir(children: List<DocNode> = emptyList(), params: Map<String, String> = emptyMap()) : DocNode(children, params) +class Div(children: List<DocNode> = emptyList(), params: Map<String, String> = emptyMap()) : DocNode(children, params) +class Dl(children: List<DocNode> = emptyList(), params: Map<String, String> = emptyMap()) : DocNode(children, params) +class Dt(children: List<DocNode> = emptyList(), params: Map<String, String> = emptyMap()) : DocNode(children, params) +class Em(children: List<DocNode> = emptyList(), params: Map<String, String> = emptyMap()) : DocNode(children, params) +class Font(children: List<DocNode> = emptyList(), params: Map<String, String> = emptyMap()) : DocNode(children, params) +class Footer(children: List<DocNode> = emptyList(), params: Map<String, String> = emptyMap()) : DocNode(children, params) +class Frame(children: List<DocNode> = emptyList(), params: Map<String, String> = emptyMap()) : DocNode(children, params) +class FrameSet(children: List<DocNode> = emptyList(), params: Map<String, String> = emptyMap()) : DocNode(children, params) +class H1(children: List<DocNode> = emptyList(), params: Map<String, String> = emptyMap()) : DocNode(children, params) +class H2(children: List<DocNode> = emptyList(), params: Map<String, String> = emptyMap()) : DocNode(children, params) +class H3(children: List<DocNode> = emptyList(), params: Map<String, String> = emptyMap()) : DocNode(children, params) +class H4(children: List<DocNode> = emptyList(), params: Map<String, String> = emptyMap()) : DocNode(children, params) +class H5(children: List<DocNode> = emptyList(), params: Map<String, String> = emptyMap()) : DocNode(children, params) +class H6(children: List<DocNode> = emptyList(), params: Map<String, String> = emptyMap()) : DocNode(children, params) +class Head(children: List<DocNode> = emptyList(), params: Map<String, String> = emptyMap()) : DocNode(children, params) +class Header(children: List<DocNode> = emptyList(), params: Map<String, String> = emptyMap()) : DocNode(children, params) +class Html(children: List<DocNode> = emptyList(), params: Map<String, String> = emptyMap()) : DocNode(children, params) +class I(children: List<DocNode> = emptyList(), params: Map<String, String> = emptyMap()) : DocNode(children, params) +class IFrame(children: List<DocNode> = emptyList(), params: Map<String, String> = emptyMap()) : DocNode(children, params) +class Img(children: List<DocNode> = emptyList(), params: Map<String, String> = emptyMap()) : DocNode(children, params) +class Input(children: List<DocNode> = emptyList(), params: Map<String, String> = emptyMap()) : DocNode(children, params) +class Li(children: List<DocNode> = emptyList(), params: Map<String, String> = emptyMap()) : DocNode(children, params) +class Link(children: List<DocNode> = emptyList(), params: Map<String, String> = emptyMap()) : DocNode(children, params) +class Listing(children: List<DocNode> = emptyList(), params: Map<String, String> = emptyMap()) : DocNode(children, params) +class Main(children: List<DocNode> = emptyList(), params: Map<String, String> = emptyMap()) : DocNode(children, params) +class Menu(children: List<DocNode> = emptyList(), params: Map<String, String> = emptyMap()) : DocNode(children, params) +class Meta(children: List<DocNode> = emptyList(), params: Map<String, String> = emptyMap()) : DocNode(children, params) +class Nav(children: List<DocNode> = emptyList(), params: Map<String, String> = emptyMap()) : DocNode(children, params) +class NoFrames(children: List<DocNode> = emptyList(), params: Map<String, String> = emptyMap()) : DocNode(children, params) +class NoScript(children: List<DocNode> = emptyList(), params: Map<String, String> = emptyMap()) : DocNode(children, params) +class Ol(children: List<DocNode> = emptyList(), params: Map<String, String> = emptyMap()) : DocNode(children, params) +class P(children: List<DocNode> = emptyList(), params: Map<String, String> = emptyMap()) : DocNode(children, params) +class Pre(children: List<DocNode> = emptyList(), params: Map<String, String> = emptyMap()) : DocNode(children, params) +class Script(children: List<DocNode> = emptyList(), params: Map<String, String> = emptyMap()) : DocNode(children, params) +class Section(children: List<DocNode> = emptyList(), params: Map<String, String> = emptyMap()) : DocNode(children, params) +class Small(children: List<DocNode> = emptyList(), params: Map<String, String> = emptyMap()) : DocNode(children, params) +class Span(children: List<DocNode> = emptyList(), params: Map<String, String> = emptyMap()) : DocNode(children, params) +class Strong(children: List<DocNode> = emptyList(), params: Map<String, String> = emptyMap()) : DocNode(children, params) +class Sub(children: List<DocNode> = emptyList(), params: Map<String, String> = emptyMap()) : DocNode(children, params) +class Sup(children: List<DocNode> = emptyList(), params: Map<String, String> = emptyMap()) : DocNode(children, params) +class Table(children: List<DocNode> = emptyList(), params: Map<String, String> = emptyMap()) : DocNode(children, params) +class Text(children: List<DocNode> = emptyList(), params: Map<String, String> = emptyMap(), val body: String = "") : DocNode(children, params) +class TBody(children: List<DocNode> = emptyList(), params: Map<String, String> = emptyMap()) : DocNode(children, params) +class Td(children: List<DocNode> = emptyList(), params: Map<String, String> = emptyMap()) : DocNode(children, params) +class TFoot(children: List<DocNode> = emptyList(), params: Map<String, String> = emptyMap()) : DocNode(children, params) +class Th(children: List<DocNode> = emptyList(), params: Map<String, String> = emptyMap()) : DocNode(children, params) +class THead(children: List<DocNode> = emptyList(), params: Map<String, String> = emptyMap()) : DocNode(children, params) +class Title(children: List<DocNode> = emptyList(), params: Map<String, String> = emptyMap()) : DocNode(children, params) +class Tr(children: List<DocNode> = emptyList(), params: Map<String, String> = emptyMap()) : DocNode(children, params) +class Tt(children: List<DocNode> = emptyList(), params: Map<String, String> = emptyMap()) : DocNode(children, params) +class U(children: List<DocNode> = emptyList(), params: Map<String, String> = emptyMap()) : DocNode(children, params) +class Ul(children: List<DocNode> = emptyList(), params: Map<String, String> = emptyMap()) : DocNode(children, params) +class Var(children: List<DocNode> = emptyList(), params: Map<String, String> = emptyMap()) : DocNode(children, params) +class DocumentationLink(children: List<DocNode> = emptyList(), params: Map<String, String> = emptyMap(), val dri: DRI) : DocNode(children, params) +class HorizontalRule() : DocNode(emptyList(), emptyMap()) +class CustomNode(children: List<DocNode> = emptyList(), params: Map<String, String> = emptyMap()) : DocNode(children, params)
\ No newline at end of file diff --git a/core/src/main/kotlin/model/doc/DocType.kt b/core/src/main/kotlin/model/doc/DocType.kt new file mode 100644 index 00000000..0888876e --- /dev/null +++ b/core/src/main/kotlin/model/doc/DocType.kt @@ -0,0 +1,18 @@ +package model.doc + +sealed class DocType(val root: DocNode) +class Description(root: DocNode) : DocType(root) +class Author(root: DocNode) : DocType(root) +class Version(root: DocNode) : DocType(root) +class Since(root: DocNode) : DocType(root) +class See(root: DocNode, val name: String) : DocType(root) +class Param(root: DocNode, val name: String) : DocType(root) +class Return(root: DocNode) : DocType(root) +class Receiver(root: DocNode) : DocType(root) +class Constructor(root: DocNode) : DocType(root) +class Throws(root: DocNode, val name: String) : DocType(root) +class Sample(root: DocNode, val name: String) : DocType(root) +class Deprecated(root: DocNode) : DocType(root) +class Property(root: DocNode, val name: String) : DocType(root) +class Suppress(root: DocNode) : DocType(root) +class CustomTag(root: DocNode, val name: String) : DocType(root) diff --git a/core/src/main/kotlin/model/doc/DocumentationNode.kt b/core/src/main/kotlin/model/doc/DocumentationNode.kt new file mode 100644 index 00000000..73424616 --- /dev/null +++ b/core/src/main/kotlin/model/doc/DocumentationNode.kt @@ -0,0 +1,3 @@ +package model.doc + +data class DocumentationNode(val children: List<DocType>)
\ No newline at end of file |