diff options
author | Dmitry Jemerov <yole@jetbrains.com> | 2015-02-09 21:05:56 +0100 |
---|---|---|
committer | Dmitry Jemerov <yole@jetbrains.com> | 2015-02-09 21:05:56 +0100 |
commit | 25592f52ea3e70e183a2a72bc411346b1650ed9a (patch) | |
tree | aeee47c29bf4ecb5ef614ef164d1c7f331d194e7 | |
parent | 0b6f2b22f972b8e62f1d5eece72aea93043ffb90 (diff) | |
download | dokka-25592f52ea3e70e183a2a72bc411346b1650ed9a.tar.gz dokka-25592f52ea3e70e183a2a72bc411346b1650ed9a.tar.bz2 dokka-25592f52ea3e70e183a2a72bc411346b1650ed9a.zip |
correctly render @see links
-rw-r--r-- | src/Kotlin/DocumentationBuilder.kt | 33 | ||||
-rw-r--r-- | src/Model/Content.kt | 4 | ||||
-rw-r--r-- | test/data/format/see.html | 27 | ||||
-rw-r--r-- | test/data/format/see.kt | 12 | ||||
-rw-r--r-- | test/src/format/HtmlFormatTest.kt | 6 |
5 files changed, 73 insertions, 9 deletions
diff --git a/src/Kotlin/DocumentationBuilder.kt b/src/Kotlin/DocumentationBuilder.kt index 1680b407..c9c45214 100644 --- a/src/Kotlin/DocumentationBuilder.kt +++ b/src/Kotlin/DocumentationBuilder.kt @@ -51,13 +51,17 @@ class DocumentationBuilder(val session: ResolveSession, val options: Documentati if (kdoc is KDocSection) { val tags = kdoc.getTags() tags.forEach { - if (it.getName() == "sample") { - content.append(functionBody(descriptor, it.getSubjectName())) - } else { - val section = content.addSection(displayName(it.getName()), it.getSubjectName()) - val sectionContent = it.getContent() - val markdownNode = parseMarkdown(sectionContent) - buildInlineContentTo(markdownNode, section) + when (it.getName()) { + "sample" -> + content.append(functionBody(descriptor, it.getSubjectName())) + "see" -> + content.addTagToSeeAlso(it) + else -> { + val section = content.addSection(displayName(it.getName()), it.getSubjectName()) + val sectionContent = it.getContent() + val markdownNode = parseMarkdown(sectionContent) + buildInlineContentTo(markdownNode, section) + } } } } @@ -73,6 +77,18 @@ class DocumentationBuilder(val session: ResolveSession, val options: Documentati else -> sectionName?.capitalize() } + private fun Content.addTagToSeeAlso(seeTag: KDocTag) { + val subjectName = seeTag.getSubjectName() + if (subjectName != null) { + val seeSection = findSectionByTag("See Also") ?: addSection("See Also", null) + val link = ContentExternalLink(subjectName) + link.append(ContentText(subjectName)) + val para = ContentParagraph() + para.append(link) + seeSection.append(para) + } + } + fun link(node: DocumentationNode, descriptor: DeclarationDescriptor) { links.put(node, descriptor) } @@ -505,6 +521,9 @@ class DocumentationBuilder(val session: ResolveSession, val options: Documentati } resolveContentLinks(node, node.content) + for (section in node.content.sections) { + resolveContentLinks(node, section) + } for (child in node.members) { resolveReferences(child) diff --git a/src/Model/Content.kt b/src/Model/Content.kt index e59037d2..bb0ff00f 100644 --- a/src/Model/Content.kt +++ b/src/Model/Content.kt @@ -58,8 +58,8 @@ public class Content() : ContentNode() { public val sections: List<ContentSection> get() = sectionList - fun addSection(name: String?, subjectName: String?): ContentSection { - val section = ContentSection(name ?: "", subjectName) + fun addSection(tag: String?, subjectName: String?): ContentSection { + val section = ContentSection(tag ?: "", subjectName) sectionList.add(section) return section } diff --git a/test/data/format/see.html b/test/data/format/see.html new file mode 100644 index 00000000..fa283363 --- /dev/null +++ b/test/data/format/see.html @@ -0,0 +1,27 @@ +<HTML> +<HEAD> +</HEAD> +<BODY> +<a href="out.html">test</a> / <a href="out.html"></a> / <a href="out.html">quux</a><br/> +<br/> +<h1>quux</h1> +<pre><code><span class="keyword">fun </span><span class="identifier">quux</span><span class="symbol">(</span><span class="symbol">)</span><span class="symbol">: </span><span class="identifier">Unit</span></code></pre><br/> +<br/> +<br/> +<br/> +<strong>See Also</strong><br/> +<p><a href="out.html">foo</a></p> +<p><a href="out.html">bar</a></p> +<br/> +<a href="out.html">test</a> / <a href="out.html"></a> / <a href="out.html">foo</a><br/> +<br/> +<h1>foo</h1> +<pre><code><span class="keyword">fun </span><span class="identifier">foo</span><span class="symbol">(</span><span class="symbol">)</span><span class="symbol">: </span><span class="identifier">Unit</span></code></pre><br/> +<br/> +<a href="out.html">test</a> / <a href="out.html"></a> / <a href="out.html">bar</a><br/> +<br/> +<h1>bar</h1> +<pre><code><span class="keyword">fun </span><span class="identifier">bar</span><span class="symbol">(</span><span class="symbol">)</span><span class="symbol">: </span><span class="identifier">Unit</span></code></pre><br/> +<br/> +</BODY> +</HTML> diff --git a/test/data/format/see.kt b/test/data/format/see.kt new file mode 100644 index 00000000..a0b153b0 --- /dev/null +++ b/test/data/format/see.kt @@ -0,0 +1,12 @@ +/** + * @see foo + * @see bar + */ +fun quux() { +} + +fun foo() { +} + +fun bar() { +}
\ No newline at end of file diff --git a/test/src/format/HtmlFormatTest.kt b/test/src/format/HtmlFormatTest.kt index 251c7074..e180a86c 100644 --- a/test/src/format/HtmlFormatTest.kt +++ b/test/src/format/HtmlFormatTest.kt @@ -51,4 +51,10 @@ public class HtmlFormatTest { htmlService.appendNodes(tempLocation, output, model.members.single().members) } } + + Test fun see() { + verifyOutput("test/data/format/see.kt", ".html") { model, output -> + htmlService.appendNodes(tempLocation, output, model.members.single().members) + } + } } |