@@ -5,6 +5,7 @@ import androidx.compose.foundation.background
55import androidx.compose.foundation.border
66import androidx.compose.foundation.horizontalScroll
77import androidx.compose.foundation.layout.Box
8+ import androidx.compose.foundation.layout.Column
89import androidx.compose.foundation.layout.fillMaxWidth
910import androidx.compose.foundation.layout.padding
1011import androidx.compose.foundation.rememberScrollState
@@ -35,6 +36,7 @@ import org.intellij.markdown.ast.getTextInNode
3536@Composable
3637private fun MarkdownCode (
3738 code : String ,
39+ language : String? = null,
3840 style : TextStyle = LocalMarkdownTypography .current.code,
3941) {
4042 val backgroundCodeColor = LocalMarkdownColors .current.codeBackground
@@ -45,7 +47,10 @@ private fun MarkdownCode(
4547 shape = RoundedCornerShape (codeBackgroundCornerSize),
4648 modifier = Modifier
4749 .fillMaxWidth()
48- .padding(vertical = 8 .dp)
50+ .padding(vertical = 8 .dp),
51+ showTopBar = true ,
52+ language = language,
53+ code = code
4954 ) {
5055 MarkdownBasicText (
5156 text = code,
@@ -62,7 +67,7 @@ fun MarkdownCodeFence(
6267 content : String ,
6368 node : ASTNode ,
6469 style : TextStyle = LocalMarkdownTypography .current.code,
65- block : @Composable (String , String? , TextStyle ) -> Unit = { code, _ , style -> MarkdownCode (code = code, style = style) },
70+ block : @Composable (String , String? , TextStyle ) -> Unit = { code, language , style -> MarkdownCode (code = code, language = language , style = style) },
6671) {
6772 // CODE_FENCE_START, FENCE_LANG, EOL, {content // CODE_FENCE_CONTENT // x-times}, CODE_FENCE_END
6873 // CODE_FENCE_START, EOL, {content // CODE_FENCE_CONTENT // x-times}, EOL
@@ -85,7 +90,7 @@ fun MarkdownCodeBlock(
8590 content : String ,
8691 node : ASTNode ,
8792 style : TextStyle = LocalMarkdownTypography .current.code,
88- block : @Composable (String , String? , TextStyle ) -> Unit = { code, _ , style -> MarkdownCode (code = code, style = style) },
93+ block : @Composable (String , String? , TextStyle ) -> Unit = { code, language , style -> MarkdownCode (code = code, language = language , style = style) },
8994) {
9095 val start = node.children[0 ].startOffset
9196 val end = node.children[node.children.size - 1 ].endOffset
@@ -100,6 +105,9 @@ fun MarkdownCodeBackground(
100105 shape : Shape = RectangleShape ,
101106 border : BorderStroke ? = null,
102107 elevation : Dp = 0.dp,
108+ showTopBar : Boolean = false,
109+ language : String? = null,
110+ code : String = "",
103111 content : @Composable () -> Unit ,
104112) {
105113 Box (
@@ -114,6 +122,20 @@ fun MarkdownCodeBackground(
114122 .pointerInput(Unit ) {},
115123 propagateMinConstraints = true
116124 ) {
117- content()
125+ if (showTopBar) {
126+ Column {
127+ MarkdownCodeTopBar (
128+ language = language,
129+ code = code
130+ )
131+ MarkdownDivider (
132+ color = LocalMarkdownColors .current.dividerColor.copy(alpha = 0.3f ),
133+ thickness = 0.5 .dp
134+ )
135+ content()
136+ }
137+ } else {
138+ content()
139+ }
118140 }
119141}
0 commit comments