From 7b91d7dd32e953674d66dbfb7ef6306258b1cfb7 Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Fri, 27 Feb 2015 17:42:52 +0100 Subject: don't lose space after first word in the content of javadoc tags --- src/Java/JavaDocumentationBuilder.kt | 18 +++++++++++------- test/data/format/javaDeprecated.html | 2 +- test/data/format/javaSpaceInAuthor.java | 7 +++++++ test/data/format/javaSpaceInAuthor.md | 13 +++++++++++++ test/src/format/MarkdownFormatTest.kt | 6 ++++++ 5 files changed, 38 insertions(+), 8 deletions(-) create mode 100644 test/data/format/javaSpaceInAuthor.java create mode 100644 test/data/format/javaSpaceInAuthor.md diff --git a/src/Java/JavaDocumentationBuilder.kt b/src/Java/JavaDocumentationBuilder.kt index 1a28de47..4b1b8116 100644 --- a/src/Java/JavaDocumentationBuilder.kt +++ b/src/Java/JavaDocumentationBuilder.kt @@ -1,10 +1,7 @@ package org.jetbrains.dokka import com.intellij.psi.* -import com.intellij.psi.javadoc.PsiDocComment -import com.intellij.psi.javadoc.PsiDocTag -import com.intellij.psi.javadoc.PsiDocTagValue -import com.intellij.psi.javadoc.PsiInlineDocTag +import com.intellij.psi.javadoc.* import org.jetbrains.dokka.DocumentationNode.Kind import org.jsoup.Jsoup import org.jsoup.nodes.Element @@ -32,20 +29,27 @@ public class JavaDocumentationBuilder(private val options: DocumentationOptions, "see" -> result.convertSeeTag(tag) "deprecated" -> { deprecatedContent = Content() - deprecatedContent!!.convertJavadocElements(tag.getDataElements().toArrayList()) + deprecatedContent!!.convertJavadocElements(tag.contentElements()) } else -> { val subjectName = tag.getSubjectName() val section = result.addSection(javadocSectionDisplayName(tag.getName()), subjectName) - section.convertJavadocElements( - tag.getDataElements().filter { it !is PsiDocTagValue || tag.getSubjectName() == null }) + section.convertJavadocElements(tag.contentElements()) } } } return JavadocParseResult(result, deprecatedContent) } + private fun PsiDocTag.contentElements(): Iterable { + val tagValueElements = getChildren() + .dropWhile { it.getNode().getElementType() == JavaDocTokenType.DOC_TAG_NAME } + .dropWhile { it is PsiWhiteSpace } + .filterNot { it.getNode().getElementType() == JavaDocTokenType.DOC_COMMENT_LEADING_ASTERISKS } + return if (getSubjectName() != null) tagValueElements.dropWhile { it is PsiDocTagValue } else tagValueElements + } + private fun ContentBlock.convertJavadocElements(elements: Iterable) { val htmlBuilder = StringBuilder() elements.forEach { diff --git a/test/data/format/javaDeprecated.html b/test/data/format/javaDeprecated.html index f9376bf5..8410e7ca 100644 --- a/test/data/format/javaDeprecated.html +++ b/test/data/format/javaDeprecated.html @@ -7,7 +7,7 @@

foo

public open fun foo(): Unit
-Deprecated: use#bar instead

+Deprecated: use #bar instead



diff --git a/test/data/format/javaSpaceInAuthor.java b/test/data/format/javaSpaceInAuthor.java new file mode 100644 index 00000000..b96f5884 --- /dev/null +++ b/test/data/format/javaSpaceInAuthor.java @@ -0,0 +1,7 @@ +package test; + +/** + * @author Dmitry Jemerov + */ +class C { +} \ No newline at end of file diff --git a/test/data/format/javaSpaceInAuthor.md b/test/data/format/javaSpaceInAuthor.md new file mode 100644 index 00000000..425d4c9a --- /dev/null +++ b/test/data/format/javaSpaceInAuthor.md @@ -0,0 +1,13 @@ +[test](test/index) / [test](test/test/index) / [C](test/test/-c) + + +# C + +`open class C` + + + +**Author** +Dmitry Jemerov + + diff --git a/test/src/format/MarkdownFormatTest.kt b/test/src/format/MarkdownFormatTest.kt index 49d2ec1b..0452645a 100644 --- a/test/src/format/MarkdownFormatTest.kt +++ b/test/src/format/MarkdownFormatTest.kt @@ -136,4 +136,10 @@ public class MarkdownFormatTest { markdownService.appendNodes(tempLocation, output, model.members.single().members) } } + + Test fun javaSpaceInAuthor() { + verifyOutput("test/data/format/javaSpaceInAuthor.java", ".md") { model, output -> + markdownService.appendNodes(tempLocation, output, model.members.single().members) + } + } } -- cgit