diff options
author | Dmitry Jemerov <yole@jetbrains.com> | 2015-03-23 18:52:05 +0100 |
---|---|---|
committer | Dmitry Jemerov <yole@jetbrains.com> | 2015-03-23 18:52:05 +0100 |
commit | 76e4d3cbc7cbbe1d35fb2e0c1ba59d3c86e0daf2 (patch) | |
tree | efc5fc2e5dce290fbca9d55c12f0056b96735c3b /src/Model | |
parent | 73bd875b621fedce84015c50b6954509f4978a6d (diff) | |
download | dokka-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.kt | 2 | ||||
-rw-r--r-- | src/Model/DocumentationNode.kt | 6 | ||||
-rw-r--r-- | src/Model/PackageDocs.kt | 56 |
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 |