aboutsummaryrefslogtreecommitdiff
path: root/src/Model
diff options
context:
space:
mode:
authorDmitry Jemerov <yole@jetbrains.com>2015-03-23 18:52:05 +0100
committerDmitry Jemerov <yole@jetbrains.com>2015-03-23 18:52:05 +0100
commit76e4d3cbc7cbbe1d35fb2e0c1ba59d3c86e0daf2 (patch)
treeefc5fc2e5dce290fbca9d55c12f0056b96735c3b /src/Model
parent73bd875b621fedce84015c50b6954509f4978a6d (diff)
downloaddokka-76e4d3cbc7cbbe1d35fb2e0c1ba59d3c86e0daf2.tar.gz
dokka-76e4d3cbc7cbbe1d35fb2e0c1ba59d3c86e0daf2.tar.bz2
dokka-76e4d3cbc7cbbe1d35fb2e0c1ba59d3c86e0daf2.zip
parse included Markdown files to retrieve documentation for modules and packages
Diffstat (limited to 'src/Model')
-rw-r--r--src/Model/Content.kt2
-rw-r--r--src/Model/DocumentationNode.kt6
-rw-r--r--src/Model/PackageDocs.kt56
3 files changed, 62 insertions, 2 deletions
diff --git a/src/Model/Content.kt b/src/Model/Content.kt
index 0244359e..30ec1fda 100644
--- a/src/Model/Content.kt
+++ b/src/Model/Content.kt
@@ -81,6 +81,8 @@ public class ContentUnorderedList() : ContentBlock()
public class ContentOrderedList() : ContentBlock()
public class ContentListItem() : ContentBlock()
+public class ContentHeading(val level: Int) : ContentBlock()
+
public class ContentSection(public val tag: String, public val subjectName: String?) : ContentBlock() {
override fun equals(other: Any?): Boolean =
super.equals(other) && other is ContentSection && tag == other.tag && subjectName == other.subjectName
diff --git a/src/Model/DocumentationNode.kt b/src/Model/DocumentationNode.kt
index 9e8a981f..6800abef 100644
--- a/src/Model/DocumentationNode.kt
+++ b/src/Model/DocumentationNode.kt
@@ -119,12 +119,14 @@ val DocumentationNode.path: List<DocumentationNode>
return parent.path + this
}
-fun DocumentationNode.findOrCreatePackageNode(packageName: String): DocumentationNode {
+fun DocumentationNode.findOrCreatePackageNode(packageName: String, packageContent: Map<String, Content>): DocumentationNode {
val existingNode = members(DocumentationNode.Kind.Package).firstOrNull { it.name == packageName }
if (existingNode != null) {
return existingNode
}
- val newNode = DocumentationNode(packageName, Content.Empty, DocumentationNode.Kind.Package)
+ val newNode = DocumentationNode(packageName,
+ packageContent.getOrElse(packageName) { Content.Empty },
+ DocumentationNode.Kind.Package)
append(newNode, DocumentationReference.Kind.Member)
return newNode
}
diff --git a/src/Model/PackageDocs.kt b/src/Model/PackageDocs.kt
new file mode 100644
index 00000000..3b0be547
--- /dev/null
+++ b/src/Model/PackageDocs.kt
@@ -0,0 +1,56 @@
+package org.jetbrains.dokka
+
+import org.intellij.markdown.MarkdownElementTypes
+import org.intellij.markdown.MarkdownTokenTypes
+import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
+import java.io.File
+
+public class PackageDocs(val documentationBuilder: DocumentationBuilder,
+ val linkResolveContext: DeclarationDescriptor?,
+ val logger: DokkaLogger) {
+ public val moduleContent: MutableContent = MutableContent()
+ private val _packageContent: MutableMap<String, MutableContent> = hashMapOf()
+ public val packageContent: Map<String, Content>
+ get() = _packageContent
+
+ fun parse(file: String) {
+ val file = File(file)
+ if (file.exists()) {
+ val text = file.readText()
+ val tree = parseMarkdown(text)
+ var targetContent: MutableContent = moduleContent
+ tree.children.forEach {
+ if (it.type == MarkdownElementTypes.ATX_1) {
+ val headingText = it.child(MarkdownTokenTypes.TEXT)?.text
+ if (headingText != null) {
+ targetContent = findTargetContent(headingText)
+ }
+ } else {
+ buildContentTo(it, targetContent, { resolveContentLink(it) })
+ }
+ }
+ } else {
+ logger.warn("Include file $file was not found.")
+ }
+ }
+
+ private fun findTargetContent(heading: String): MutableContent {
+ if (heading.startsWith("Module") || heading.startsWith("module")) {
+ return moduleContent
+ }
+ if (heading.startsWith("Package") || heading.startsWith("package")) {
+ return findOrCreatePackageContent(heading.substring("package".length()).trim())
+ }
+ return findOrCreatePackageContent(heading)
+ }
+
+ private fun findOrCreatePackageContent(packageName: String) =
+ _packageContent.getOrPut(packageName) { -> MutableContent() }
+
+ private fun resolveContentLink(href: String): ContentBlock {
+ if (linkResolveContext != null) {
+ return documentationBuilder.resolveContentLink(linkResolveContext, href)
+ }
+ return ContentExternalLink("#")
+ }
+} \ No newline at end of file