Skip to content

Commit

Permalink
Render quotes as blockquotes instead of code blocks. (#2496)
Browse files Browse the repository at this point in the history
  • Loading branch information
TheOnlyTails committed May 13, 2022
1 parent 3e55be9 commit c532003
Show file tree
Hide file tree
Showing 9 changed files with 74 additions and 42 deletions.
1 change: 1 addition & 0 deletions core/api/core.api
Expand Up @@ -4277,6 +4277,7 @@ public final class org/jetbrains/dokka/pages/TextStyle : java/lang/Enum, org/jet
public static final field Italic Lorg/jetbrains/dokka/pages/TextStyle;
public static final field Monospace Lorg/jetbrains/dokka/pages/TextStyle;
public static final field Paragraph Lorg/jetbrains/dokka/pages/TextStyle;
public static final field Quotation Lorg/jetbrains/dokka/pages/TextStyle;
public static final field Span Lorg/jetbrains/dokka/pages/TextStyle;
public static final field Strikethrough Lorg/jetbrains/dokka/pages/TextStyle;
public static final field Strong Lorg/jetbrains/dokka/pages/TextStyle;
Expand Down
2 changes: 1 addition & 1 deletion core/src/main/kotlin/pages/ContentNodes.kt
Expand Up @@ -384,7 +384,7 @@ enum class TokenStyle : Style {

enum class TextStyle : Style {
Bold, Italic, Strong, Strikethrough, Paragraph,
Block, Span, Monospace, Indented, Cover, UnderCoverText, BreakableAfter, Breakable, InlineComment
Block, Span, Monospace, Indented, Cover, UnderCoverText, BreakableAfter, Breakable, InlineComment, Quotation
}

enum class ContentStyle : Style {
Expand Down
4 changes: 4 additions & 0 deletions plugins/base/base-test-utils/api/base-test-utils.api
Expand Up @@ -113,6 +113,10 @@ public final class utils/B : utils/Tag {
public fun <init> ([Ljava/lang/Object;)V
}

public final class utils/BlockQuote : utils/Tag {
public fun <init> ([Ljava/lang/Object;)V
}

public final class utils/Br : utils/Tag {
public static final field INSTANCE Lutils/Br;
}
Expand Down
Expand Up @@ -29,6 +29,8 @@ class A(vararg matchers: Any) : Tag("a", *matchers)
class B(vararg matchers: Any) : Tag("b", *matchers)
class I(vararg matchers: Any) : Tag("i", *matchers)
class STRIKE(vararg matchers: Any) : Tag("strike", *matchers)

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)
Expand Down
Expand Up @@ -128,6 +128,7 @@ open class HtmlRenderer(
}
node.hasStyle(TextStyle.Paragraph) -> p(additionalClasses) { childrenCallback() }
node.hasStyle(TextStyle.Block) -> div(additionalClasses) { childrenCallback() }
node.hasStyle(TextStyle.Quotation) -> blockQuote(additionalClasses) { childrenCallback() }
node.isAnchorable -> buildAnchor(
node.anchor!!,
node.anchorLabel!!,
Expand Down
Expand Up @@ -123,7 +123,15 @@ open class DocTagToContentConverter : CommentsToContentConverter {
styles
)
)
is BlockQuote, is Pre, is CodeBlock -> listOf(
is BlockQuote -> listOf(
ContentGroup(
buildChildren(docTag),
dci,
sourceSets.toDisplaySourceSets(),
styles + TextStyle.Quotation,
)
)
is Pre, is CodeBlock -> listOf(
ContentCodeBlock(
buildChildren(docTag),
docTag.params.getOrDefault("lang", ""),
Expand Down
5 changes: 3 additions & 2 deletions plugins/base/src/main/resources/dokka/styles/style.css
Expand Up @@ -612,10 +612,11 @@ a small {
}

blockquote {
border-left: 1px solid #e5e5e5;
border-left: 1ch solid var(--default-gray);
margin: 0;
padding: 0 0 0 20px;
padding-left: 1ch;
font-style: italic;
color: var(--average-color);
}

pre {
Expand Down
10 changes: 10 additions & 0 deletions plugins/base/src/test/kotlin/renderers/html/TextStylesTest.kt
Expand Up @@ -69,6 +69,16 @@ class TextStylesTest : HtmlRenderingOnlyTestBase() {
files.contents.getValue("test-page.html").contains("&nbsp;<strike><b>styled text</b></strike>")
}

@Test
fun `should include blockquote`() {
val page = testPage {
group(styles = setOf(TextStyle.Quotation)) {
text("blockquote text")
}
}
HtmlRenderer(context).render(page)
renderedContent.match(BlockQuote("blockquote text"))
}

override val renderedContent: Element
get() = files.contents.getValue("test-page.html").let { Jsoup.parse(it) }.select("#content").single()
Expand Down
Expand Up @@ -14,8 +14,8 @@ class CommentsToContentConverterTest {
private val converter = DocTagToContentConverter()

private fun executeTest(
docTag:DocTag,
match: ContentMatcherBuilder<ContentComposite>.() -> Unit
docTag: DocTag,
match: ContentMatcherBuilder<ContentComposite>.() -> Unit,
) {
val dci = DCI(
setOf(
Expand Down Expand Up @@ -225,12 +225,16 @@ class CommentsToContentConverterTest {
)
executeTest(docTag) {
group {
node<ContentCodeBlock> {
+"Blockquotes are very handy in email to emulate reply text. This line is part of the same quote."
group {
group {
+"Blockquotes are very handy in email to emulate reply text. This line is part of the same quote."
}
}
group { +"Quote break." }
node<ContentCodeBlock> {
+"Quote"
group {
group {
+"Quote"
}
}
}
}
Expand Down Expand Up @@ -261,16 +265,16 @@ class CommentsToContentConverterTest {
)
executeTest(docTag) {
group {
node<ContentCodeBlock> {
+"text 1 text 2"
node<ContentCodeBlock> {
+"text 3 text 4"
group {
group { +"text 1 text 2" }
group {
group { +"text 3 text 4" }
}
+"text 5"
group { +"text 5" }
}
group { +"Quote break." }
node<ContentCodeBlock> {
+"Quote"
group {
group { +"Quote" }
}
}
}
Expand Down Expand Up @@ -326,48 +330,49 @@ class CommentsToContentConverterTest {
)
)
executeTest(docTag) {
group { link {
+"I'm an inline-style link"
check {
assertEquals(
assertedCast<ContentResolvedLink> { "Link should be resolved" }.address,
"https://www.google.com"
)
group {
link {
+"I'm an inline-style link"
check {
assertEquals(
assertedCast<ContentResolvedLink> { "Link should be resolved" }.address,
"https://www.google.com"
)
}
}
} }
}
}
}



@Test
fun `ordered list`() {
val docTag =
Ol(
listOf(
Li(
listOf(
P(listOf(Text("test1"))),
P(listOf(Text("test2"))),
)
),
Li(
listOf(
P(listOf(Text("test3"))),
P(listOf(Text("test4"))),
listOf(
Li(
listOf(
P(listOf(Text("test1"))),
P(listOf(Text("test2"))),
)
),
Li(
listOf(
P(listOf(Text("test3"))),
P(listOf(Text("test4"))),
)
)
)
)
)
executeTest(docTag) {
node<ContentList> {
group {
+"test1"
+"test2"
+"test1"
+"test2"
}
group {
+"test3"
+"test4"
+"test3"
+"test4"
}
}
}
Expand Down

0 comments on commit c532003

Please sign in to comment.