diff --git a/idea/src/org/jetbrains/kotlin/idea/kdoc/KDocRenderer.kt b/idea/src/org/jetbrains/kotlin/idea/kdoc/KDocRenderer.kt index 3c986dec142..814e0b22446 100644 --- a/idea/src/org/jetbrains/kotlin/idea/kdoc/KDocRenderer.kt +++ b/idea/src/org/jetbrains/kotlin/idea/kdoc/KDocRenderer.kt @@ -118,79 +118,36 @@ object KDocRenderer { public fun MarkdownNode.toHtml(): String { val sb = StringBuilder() visit { node, processChildren -> + fun wrapChildren(tag: String, newline: Boolean = false) { + sb.append("<$tag>") + if (newline) sb.appendln() + processChildren() + sb.append("") + if (newline) sb.appendln() + } + val nodeType = node.type val nodeText = node.text when (nodeType) { - MarkdownElementTypes.UNORDERED_LIST -> { - sb.appendln("") - } - MarkdownElementTypes.ORDERED_LIST -> { - sb.appendln("
    ") - processChildren() - sb.appendln("
") - } - MarkdownElementTypes.LIST_ITEM -> { - sb.append("
  • ") - processChildren() - sb.appendln("
  • ") - } - MarkdownElementTypes.EMPH -> { - sb.append("") - processChildren() - sb.append("") - } - MarkdownElementTypes.STRONG -> { - sb.append("") - processChildren() - sb.append("") - } - MarkdownElementTypes.ATX_1 -> { - sb.append("

    ") - processChildren() - sb.append("

    ") - } - MarkdownElementTypes.ATX_2 -> { - sb.append("

    ") - processChildren() - sb.append("

    ") - } - MarkdownElementTypes.ATX_3 -> { - sb.append("

    ") - processChildren() - sb.append("

    ") - } - MarkdownElementTypes.ATX_4 -> { - sb.append("

    ") - processChildren() - sb.append("

    ") - } - MarkdownElementTypes.ATX_5 -> { - sb.append("
    ") - processChildren() - sb.append("
    ") - } - MarkdownElementTypes.ATX_6 -> { - sb.append("
    ") - processChildren() - sb.append("
    ") - } - MarkdownElementTypes.BLOCK_QUOTE -> { - sb.append("
    ") - processChildren() - sb.append("
    ") - } + MarkdownElementTypes.UNORDERED_LIST -> wrapChildren("ul", newline = true) + MarkdownElementTypes.ORDERED_LIST -> wrapChildren("ol", newline = true) + MarkdownElementTypes.LIST_ITEM -> wrapChildren("li") + MarkdownElementTypes.EMPH -> wrapChildren("em") + MarkdownElementTypes.STRONG -> wrapChildren("strong") + MarkdownElementTypes.ATX_1 -> wrapChildren("h1") + MarkdownElementTypes.ATX_2 -> wrapChildren("h2") + MarkdownElementTypes.ATX_3 -> wrapChildren("h3") + MarkdownElementTypes.ATX_4 -> wrapChildren("h4") + MarkdownElementTypes.ATX_5 -> wrapChildren("h5") + MarkdownElementTypes.ATX_6 -> wrapChildren("h6") + MarkdownElementTypes.BLOCK_QUOTE -> wrapChildren("blockquote") MarkdownElementTypes.PARAGRAPH -> { - sb.append("

    ") - processChildren() - sb.appendln("

    ") - } - MarkdownElementTypes.CODE_SPAN -> { - sb.append("") - processChildren() - sb.append("") + while (sb.length() > 0 && sb[sb.length() - 1] == ' ') { + sb.deleteCharAt(sb.length() - 1) + } + wrapChildren("p", newline = true) } + MarkdownElementTypes.CODE_SPAN -> wrapChildren("code") MarkdownElementTypes.CODE_BLOCK -> { sb.append("
    ")
                         processChildren()
    @@ -218,6 +175,7 @@ object KDocRenderer {
                     MarkdownTokenTypes.TEXT,
                     MarkdownTokenTypes.WHITE_SPACE,
                     MarkdownTokenTypes.COLON,
    +                MarkdownTokenTypes.SINGLE_QUOTE,
                     MarkdownTokenTypes.DOUBLE_QUOTE,
                     MarkdownTokenTypes.LPAREN,
                     MarkdownTokenTypes.RPAREN,
    @@ -225,6 +183,9 @@ object KDocRenderer {
                     MarkdownTokenTypes.RBRACKET -> {
                         sb.append(nodeText)
                     }
    +                MarkdownTokenTypes.EOL -> {
    +                    sb.append(" ")
    +                }
                     MarkdownTokenTypes.GT -> sb.append(">")
                     MarkdownTokenTypes.LT -> sb.append("<")
                     else -> {
    diff --git a/idea/testData/editor/quickDoc/OnMethodUsageMultiline.kt b/idea/testData/editor/quickDoc/OnMethodUsageMultiline.kt
    new file mode 100644
    index 00000000000..ca871fb8889
    --- /dev/null
    +++ b/idea/testData/editor/quickDoc/OnMethodUsageMultiline.kt
    @@ -0,0 +1,14 @@
    +/**
    + * Some documentation
    + * on two lines.
    + */
    +fun testMethod() {
    +
    +}
    +
    +fun test() {
    +    testMethod()
    +}
    +
    +//INFO: internal fun testMethod(): Unit defined in root package

    Some documentation on two lines. +//INFO:

    diff --git a/idea/testData/editor/quickDoc/OnMethodUsageWithMarkdown.kt b/idea/testData/editor/quickDoc/OnMethodUsageWithMarkdown.kt index 4b4f39acae9..7c54a82a753 100644 --- a/idea/testData/editor/quickDoc/OnMethodUsageWithMarkdown.kt +++ b/idea/testData/editor/quickDoc/OnMethodUsageWithMarkdown.kt @@ -1,5 +1,5 @@ /** - * Some documentation. **Bold** *underline* `code` foo: bar (baz) [quux] + * Some documentation. **Bold** *underline* `code` foo: bar (baz) [quux] 'apos' * * [Kotlin](http://www.kotlinlang.org) * @@ -18,9 +18,13 @@ fun test() { testMethod(1, "value") } -//INFO: internal fun testMethod(): Unit defined in root package

    Some documentation. Bold underline code foo: bar (baz) quux

    -//INFO:

    a href="http://www.kotlinlang.org">Kotlin

    -//INFO:

    C

    -//INFO:

    See this class

    +//INFO: internal fun testMethod(): Unit defined in root package

    +//INFO: Some documentation. Bold underline code foo: bar (baz) quux 'apos'

    +//INFO:

    +//INFO: a href="http://www.kotlinlang.org">Kotlin

    +//INFO:

    +//INFO: C

    +//INFO:

    +//INFO: See this class

    //INFO: //INFO:

    diff --git a/idea/tests/org/jetbrains/kotlin/idea/editor/quickDoc/JetQuickDocProviderTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/editor/quickDoc/JetQuickDocProviderTestGenerated.java index 1432881e7b4..0980bbdf440 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/editor/quickDoc/JetQuickDocProviderTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/editor/quickDoc/JetQuickDocProviderTestGenerated.java @@ -113,6 +113,12 @@ public class JetQuickDocProviderTestGenerated extends AbstractJetQuickDocProvide doTest(fileName); } + @TestMetadata("OnMethodUsageMultiline.kt") + public void testOnMethodUsageMultiline() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/editor/quickDoc/OnMethodUsageMultiline.kt"); + doTest(fileName); + } + @TestMetadata("OnMethodUsageWithBracketsInParam.kt") public void testOnMethodUsageWithBracketsInParam() throws Exception { String fileName = JetTestUtils.navigationMetadata("idea/testData/editor/quickDoc/OnMethodUsageWithBracketsInParam.kt");