
commonMain.com.mikepenz.markdown.compose.elements.MarkdownBlockQuote.kt Maven / Gradle / Ivy
package com.mikepenz.markdown.compose.elements
import androidx.compose.foundation.layout.*
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.drawBehind
import androidx.compose.ui.geometry.Offset
import androidx.compose.ui.text.TextStyle
import androidx.compose.ui.unit.LayoutDirection
import androidx.compose.ui.unit.dp
import com.mikepenz.markdown.compose.LocalMarkdownColors
import com.mikepenz.markdown.compose.LocalMarkdownDimens
import com.mikepenz.markdown.compose.LocalMarkdownPadding
import com.mikepenz.markdown.compose.LocalMarkdownTypography
import org.intellij.markdown.MarkdownElementTypes
import org.intellij.markdown.ast.ASTNode
import org.intellij.markdown.ast.findChildOfType
@Composable
fun MarkdownBlockQuote(
content: String,
node: ASTNode,
style: TextStyle = LocalMarkdownTypography.current.quote
) {
val blockQuoteColor = LocalMarkdownColors.current.text
val blockQuoteThickness = LocalMarkdownDimens.current.blockQuoteThickness
val blockQuote = LocalMarkdownPadding.current.blockQuote
val blockQuoteText = LocalMarkdownPadding.current.blockQuoteText
val blockQuoteBar = LocalMarkdownPadding.current.blockQuoteBar
Column(
modifier = Modifier
.drawBehind {
drawLine(
color = blockQuoteColor,
strokeWidth = blockQuoteThickness.toPx(),
start = Offset(blockQuoteBar.calculateStartPadding(LayoutDirection.Ltr).toPx(), blockQuoteBar.calculateTopPadding().toPx()),
end = Offset(blockQuoteBar.calculateStartPadding(LayoutDirection.Ltr).toPx(), size.height - blockQuoteBar.calculateBottomPadding().toPx())
)
}
.padding(blockQuote)
) {
val quote = node.findChildOfType(MarkdownElementTypes.PARAGRAPH)
if (quote != null) {
MarkdownParagraph(content, quote, style = style, modifier = Modifier.padding(blockQuoteText))
}
val nestedQuote = node.findChildOfType(MarkdownElementTypes.BLOCK_QUOTE)
if (nestedQuote != null) {
if (quote != null) {
Spacer(Modifier.height(8.dp))
}
MarkdownBlockQuote(content, nestedQuote, style)
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy