From 48f438df62ef76409917077f5fc77cc6378a9758 Mon Sep 17 00:00:00 2001 From: "Andrei.Tyrin" Date: Tue, 9 Aug 2022 21:25:13 +0200 Subject: [PATCH] Support of var html tag for JavaDoc Fix #2358 --- core/src/main/kotlin/pages/ContentNodes.kt | 2 +- .../src/main/kotlin/renderers/JsoupUtils.kt | 1 + .../kotlin/renderers/html/HtmlRenderer.kt | 1 + .../comments/DocTagToContentConverter.kt | 1 + .../translators/psi/parsers/JavadocParser.kt | 1 + .../test/kotlin/parsers/JavadocParserTest.kt | 32 +++++++++++++++++++ .../kotlin/renderers/html/TextStylesTest.kt | 12 +++++++ 7 files changed, 49 insertions(+), 1 deletion(-) diff --git a/core/src/main/kotlin/pages/ContentNodes.kt b/core/src/main/kotlin/pages/ContentNodes.kt index a0f2fd7451..0d8475a9f7 100644 --- a/core/src/main/kotlin/pages/ContentNodes.kt +++ b/core/src/main/kotlin/pages/ContentNodes.kt @@ -383,7 +383,7 @@ enum class TokenStyle : Style { enum class TextStyle : Style { Bold, Italic, Strong, Strikethrough, Paragraph, Block, Span, Monospace, Indented, Cover, UnderCoverText, BreakableAfter, Breakable, InlineComment, Quotation, - FloatingRight + FloatingRight, Var } enum class ContentStyle : Style { diff --git a/plugins/base/base-test-utils/src/main/kotlin/renderers/JsoupUtils.kt b/plugins/base/base-test-utils/src/main/kotlin/renderers/JsoupUtils.kt index e1ae502962..6d30834172 100644 --- a/plugins/base/base-test-utils/src/main/kotlin/renderers/JsoupUtils.kt +++ b/plugins/base/base-test-utils/src/main/kotlin/renderers/JsoupUtils.kt @@ -34,6 +34,7 @@ class BlockQuote(vararg matchers: Any) : Tag("blockquote", *matchers) class Dl(vararg matchers: Any) : Tag("dl", *matchers) class Dt(vararg matchers: Any) : Tag("dt", *matchers) class Dd(vararg matchers: Any) : Tag("dd", *matchers) +class Var(vararg matchers: Any) : Tag("var", *matchers) object Wbr : Tag("wbr") object Br : Tag("br") diff --git a/plugins/base/src/main/kotlin/renderers/html/HtmlRenderer.kt b/plugins/base/src/main/kotlin/renderers/html/HtmlRenderer.kt index 53645f060b..55afef80b6 100644 --- a/plugins/base/src/main/kotlin/renderers/html/HtmlRenderer.kt +++ b/plugins/base/src/main/kotlin/renderers/html/HtmlRenderer.kt @@ -777,6 +777,7 @@ open class HtmlRenderer( TextStyle.Italic -> i { body() } TextStyle.Strikethrough -> strike { body() } TextStyle.Strong -> strong { body() } + TextStyle.Var -> htmlVar { body() } is TokenStyle -> span("token " + styleToApply.toString().toLowerCase()) { body() } else -> body() } diff --git a/plugins/base/src/main/kotlin/transformers/pages/comments/DocTagToContentConverter.kt b/plugins/base/src/main/kotlin/transformers/pages/comments/DocTagToContentConverter.kt index b46a7679f5..1c447e9e0a 100644 --- a/plugins/base/src/main/kotlin/transformers/pages/comments/DocTagToContentConverter.kt +++ b/plugins/base/src/main/kotlin/transformers/pages/comments/DocTagToContentConverter.kt @@ -254,6 +254,7 @@ open class DocTagToContentConverter : CommentsToContentConverter { extra = extras ) ) + is Var -> buildChildren(docTag, setOf(TextStyle.Var)) else -> buildChildren(docTag) } diff --git a/plugins/base/src/main/kotlin/translators/psi/parsers/JavadocParser.kt b/plugins/base/src/main/kotlin/translators/psi/parsers/JavadocParser.kt index ce0d2ff3fc..7dc8e3a0fa 100644 --- a/plugins/base/src/main/kotlin/translators/psi/parsers/JavadocParser.kt +++ b/plugins/base/src/main/kotlin/translators/psi/parsers/JavadocParser.kt @@ -424,6 +424,7 @@ class JavadocParser( "h1" -> ifChildrenPresent { H1(children) } "h2" -> ifChildrenPresent { H2(children) } "h3" -> ifChildrenPresent { H3(children) } + "var" -> ifChildrenPresent { Var(children) } else -> listOf(Text(body = element.ownText())) } } diff --git a/plugins/base/src/test/kotlin/parsers/JavadocParserTest.kt b/plugins/base/src/test/kotlin/parsers/JavadocParserTest.kt index 4f37923b19..af8dbb94a3 100644 --- a/plugins/base/src/test/kotlin/parsers/JavadocParserTest.kt +++ b/plugins/base/src/test/kotlin/parsers/JavadocParserTest.kt @@ -396,4 +396,36 @@ class JavadocParserTest : BaseAbstractTest() { } } } + + @Test + fun `var tag is handled properly`() { + val source = """ + |/src/main/kotlin/test/Test.java + |package example + | + | /** + | * An example of using var tag: variable + | */ + | public class Test {} + """.trimIndent() + testInline( + source, + configuration, + ) { + documentablesCreationStage = { modules -> + val docs = modules.first().packages.first().classlikes.single().documentation.first().value + val root = docs.children.first().root + + kotlin.test.assertEquals( + listOf( + P(children = listOf( + Text("An example of using var tag: "), + Var(children = listOf(Text("variable"))), + )), + ), + root.children + ) + } + } + } } diff --git a/plugins/base/src/test/kotlin/renderers/html/TextStylesTest.kt b/plugins/base/src/test/kotlin/renderers/html/TextStylesTest.kt index 2c862525f5..98f73ffa60 100644 --- a/plugins/base/src/test/kotlin/renderers/html/TextStylesTest.kt +++ b/plugins/base/src/test/kotlin/renderers/html/TextStylesTest.kt @@ -80,6 +80,18 @@ class TextStylesTest : HtmlRenderingOnlyTestBase() { renderedContent.match(BlockQuote("blockquote text")) } + @Test + fun `should include var`() { + val page = testPage { + group(styles = setOf(TextStyle.Var)) { + text("variable") + } + } + HtmlRenderer(context).render(page) + println(renderedContent) + renderedContent.match(Var("variable")) + } + override val renderedContent: Element get() = files.contents.getValue("test-page.html").let { Jsoup.parse(it) }.select("#content").single() } \ No newline at end of file