aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitry Jemerov <yole@jetbrains.com>2016-04-28 12:58:06 +0200
committerDmitry Jemerov <yole@jetbrains.com>2016-04-28 12:58:06 +0200
commit2e5b40d69e15c30474cf8564b08587f15ed8e383 (patch)
tree2682025e1a2688bedbd1ad4a3796ad16011ab345
parent586748b30a21012774266dac3c8f2fa6fe3ab2b8 (diff)
downloaddokka-2e5b40d69e15c30474cf8564b08587f15ed8e383.tar.gz
dokka-2e5b40d69e15c30474cf8564b08587f15ed8e383.tar.bz2
dokka-2e5b40d69e15c30474cf8564b08587f15ed8e383.zip
correctly render Markdown in link text (KT-11791)
-rw-r--r--core/src/main/kotlin/Kotlin/ContentBuilder.kt28
-rw-r--r--core/src/test/kotlin/format/HtmlFormatTest.kt13
-rw-r--r--core/testdata/format/markdownInLinks.html15
-rw-r--r--core/testdata/format/markdownInLinks.kt4
4 files changed, 51 insertions, 9 deletions
diff --git a/core/src/main/kotlin/Kotlin/ContentBuilder.kt b/core/src/main/kotlin/Kotlin/ContentBuilder.kt
index 496c886b..9e89a20a 100644
--- a/core/src/main/kotlin/Kotlin/ContentBuilder.kt
+++ b/core/src/main/kotlin/Kotlin/ContentBuilder.kt
@@ -48,16 +48,16 @@ fun buildContentTo(tree: MarkdownNode, target: ContentBlock, linkResolver: (Stri
MarkdownElementTypes.PARAGRAPH -> appendNodeWithChildren(ContentParagraph())
MarkdownElementTypes.INLINE_LINK -> {
- val labelText = node.child(MarkdownElementTypes.LINK_TEXT)?.getLabelText()
+ val linkTextNode = node.child(MarkdownElementTypes.LINK_TEXT)
val destination = node.child(MarkdownElementTypes.LINK_DESTINATION)
- if (labelText != null) {
+ if (linkTextNode != null) {
if (destination != null) {
val link = ContentExternalLink(destination.text)
- link.append(ContentText(labelText))
+ renderLinkTextTo(linkTextNode, link, linkResolver)
parent.append(link)
} else {
- val link = ContentExternalLink(labelText)
- link.append(ContentText(labelText))
+ val link = ContentExternalLink(linkTextNode.getLabelText())
+ renderLinkTextTo(linkTextNode, link, linkResolver)
parent.append(link)
}
}
@@ -67,8 +67,13 @@ fun buildContentTo(tree: MarkdownNode, target: ContentBlock, linkResolver: (Stri
val labelText = node.child(MarkdownElementTypes.LINK_LABEL)?.getLabelText()
if (labelText != null) {
val link = linkResolver(labelText)
- val linkText = node.child(MarkdownElementTypes.LINK_TEXT)?.getLabelText()
- link.append(ContentText(linkText ?: labelText))
+ val linkText = node.child(MarkdownElementTypes.LINK_TEXT)
+ if (linkText != null) {
+ renderLinkTextTo(linkText, link, linkResolver)
+ }
+ else {
+ link.append(ContentText(labelText))
+ }
parent.append(link)
}
}
@@ -104,7 +109,8 @@ fun buildContentTo(tree: MarkdownNode, target: ContentBlock, linkResolver: (Stri
}
MarkdownTokenTypes.EMPH -> {
- if (node.parent?.type != MarkdownElementTypes.EMPH) {
+ val parentNodeType = node.parent?.type
+ if (parentNodeType != MarkdownElementTypes.EMPH && parentNodeType != MarkdownElementTypes.STRONG) {
parent.append(ContentText(node.text))
}
}
@@ -138,3 +144,9 @@ fun buildInlineContentTo(tree: MarkdownNode, target: ContentBlock, linkResolver:
}
}
+fun renderLinkTextTo(tree: MarkdownNode, target: ContentBlock, linkResolver: (String) -> ContentBlock) {
+ val linkTextNodes = tree.children.drop(1).dropLast(1)
+ linkTextNodes.forEach {
+ buildContentTo(it, target, linkResolver)
+ }
+}
diff --git a/core/src/test/kotlin/format/HtmlFormatTest.kt b/core/src/test/kotlin/format/HtmlFormatTest.kt
index 8045d38c..0fc56361 100644
--- a/core/src/test/kotlin/format/HtmlFormatTest.kt
+++ b/core/src/test/kotlin/format/HtmlFormatTest.kt
@@ -8,7 +8,7 @@ import org.jetbrains.kotlin.config.KotlinSourceRoot
import org.junit.Test
import java.io.File
-public class HtmlFormatTest {
+class HtmlFormatTest {
private val htmlService = HtmlFormatService(InMemoryLocationService, KotlinLanguageService(), HtmlTemplateService.default())
@Test fun classWithCompanionObject() {
@@ -159,5 +159,16 @@ public class HtmlFormatTest {
htmlService.appendNodes(tempLocation, output, model.members.single().members)
}
}
+
+ @Test fun markdownInLinks() {
+ verifyHtmlNode("markdownInLinks")
+ }
+
+ private fun verifyHtmlNode(fileName: String, withKotlinRuntime: Boolean = false) {
+ verifyOutput("testdata/format/$fileName.kt", ".html", withKotlinRuntime = withKotlinRuntime) { model, output ->
+ htmlService.appendNodes(tempLocation, output, model.members.single().members)
+ }
+ }
+
}
diff --git a/core/testdata/format/markdownInLinks.html b/core/testdata/format/markdownInLinks.html
new file mode 100644
index 00000000..38158eac
--- /dev/null
+++ b/core/testdata/format/markdownInLinks.html
@@ -0,0 +1,15 @@
+<HTML>
+<HEAD>
+<title>foo - test</title>
+</HEAD>
+<BODY>
+<a href="test/index">test</a>&nbsp;/&nbsp;<a href="test/foo">foo</a><br/>
+<br/>
+<h1>foo</h1>
+<a name="$foo()"></a>
+<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><br/>
+<p><a href="http://www.ibm.com">a<strong>b</strong><strong>d</strong>kas</a></p>
+<br/>
+<br/>
+</BODY>
+</HTML>
diff --git a/core/testdata/format/markdownInLinks.kt b/core/testdata/format/markdownInLinks.kt
new file mode 100644
index 00000000..67b6311f
--- /dev/null
+++ b/core/testdata/format/markdownInLinks.kt
@@ -0,0 +1,4 @@
+/**
+ * [a**b**__d__ kas ](http://www.ibm.com)
+ */
+fun foo() {}