mirror of
				https://github.com/mihonapp/mihon.git
				synced 2025-10-31 22:37:56 +01:00 
			
		
		
		
	Cleanup MarkdownRender
Co-authored-by: p
This commit is contained in:
		| @@ -1,17 +1,27 @@ | ||||
| package eu.kanade.presentation.manga.components | ||||
|  | ||||
| import androidx.compose.foundation.layout.Column | ||||
| import androidx.compose.foundation.layout.PaddingValues | ||||
| import androidx.compose.foundation.layout.fillMaxWidth | ||||
| import androidx.compose.foundation.layout.padding | ||||
| import androidx.compose.material3.MaterialTheme | ||||
| import androidx.compose.runtime.Composable | ||||
| import androidx.compose.runtime.CompositionLocalProvider | ||||
| import androidx.compose.runtime.ReadOnlyComposable | ||||
| import androidx.compose.runtime.remember | ||||
| import androidx.compose.ui.Modifier | ||||
| import androidx.compose.ui.graphics.Color | ||||
| import androidx.compose.ui.layout.FirstBaseline | ||||
| import androidx.compose.ui.text.SpanStyle | ||||
| import androidx.compose.ui.text.TextLinkStyles | ||||
| import androidx.compose.ui.text.font.FontFamily | ||||
| import androidx.compose.ui.text.font.FontStyle | ||||
| import androidx.compose.ui.text.font.FontWeight | ||||
| import androidx.compose.ui.unit.Dp | ||||
| import androidx.compose.ui.unit.dp | ||||
| import com.mikepenz.markdown.coil3.Coil3ImageTransformerImpl | ||||
| import com.mikepenz.markdown.compose.LocalBulletListHandler | ||||
| import com.mikepenz.markdown.compose.Markdown | ||||
| import com.mikepenz.markdown.compose.components.markdownComponents | ||||
| import com.mikepenz.markdown.compose.elements.MarkdownBulletList | ||||
| import com.mikepenz.markdown.compose.elements.MarkdownDivider | ||||
| @@ -21,11 +31,13 @@ import com.mikepenz.markdown.compose.elements.MarkdownTableHeader | ||||
| import com.mikepenz.markdown.compose.elements.MarkdownTableRow | ||||
| import com.mikepenz.markdown.compose.elements.MarkdownText | ||||
| import com.mikepenz.markdown.compose.elements.listDepth | ||||
| import com.mikepenz.markdown.m3.Markdown | ||||
| import com.mikepenz.markdown.m3.markdownTypography | ||||
| import com.mikepenz.markdown.model.DefaultMarkdownColors | ||||
| import com.mikepenz.markdown.model.DefaultMarkdownTypography | ||||
| import com.mikepenz.markdown.model.MarkdownAnnotator | ||||
| import com.mikepenz.markdown.model.MarkdownColors | ||||
| import com.mikepenz.markdown.model.MarkdownPadding | ||||
| import com.mikepenz.markdown.model.MarkdownTypography | ||||
| import com.mikepenz.markdown.model.markdownAnnotator | ||||
| import com.mikepenz.markdown.model.markdownPadding | ||||
| import com.mikepenz.markdown.model.rememberMarkdownState | ||||
| import org.intellij.markdown.MarkdownTokenTypes.Companion.HTML_TAG | ||||
| import org.intellij.markdown.flavours.MarkdownFlavourDescriptor | ||||
| @@ -52,53 +64,87 @@ fun MarkdownRender( | ||||
|     content: String, | ||||
|     modifier: Modifier = Modifier, | ||||
|     flavour: MarkdownFlavourDescriptor = SimpleMarkdownFlavourDescriptor, | ||||
|     annotator: MarkdownAnnotator = markdownAnnotator(), | ||||
|     annotator: MarkdownAnnotator = remember { markdownAnnotator() }, | ||||
| ) { | ||||
|     val markdownState = rememberMarkdownState( | ||||
|         content = content, | ||||
|         flavour = flavour, | ||||
|         immediate = true, | ||||
|     ) | ||||
|  | ||||
|     Markdown( | ||||
|         markdownState = markdownState, | ||||
|         markdownState = rememberMarkdownState( | ||||
|             content = content, | ||||
|             flavour = flavour, | ||||
|             immediate = true, | ||||
|         ), | ||||
|         annotator = annotator, | ||||
|         typography = mihonMarkdownTypography(), | ||||
|         padding = mihonMarkdownPadding(), | ||||
|         components = mihonMarkdownComponents(), | ||||
|         colors = getMarkdownColors(), | ||||
|         typography = getMarkdownTypography(), | ||||
|         padding = markdownPadding, | ||||
|         components = markdownComponents, | ||||
|         imageTransformer = Coil3ImageTransformerImpl, | ||||
|         modifier = modifier, | ||||
|     ) | ||||
| } | ||||
|  | ||||
| @Composable | ||||
| private fun mihonMarkdownPadding() = markdownPadding( | ||||
|     list = 0.dp, | ||||
|     listItemTop = 2.dp, | ||||
|     listItemBottom = 2.dp, | ||||
| ) | ||||
| @ReadOnlyComposable | ||||
| private fun getMarkdownColors(): MarkdownColors { | ||||
|     val codeBackground = MaterialTheme.colorScheme.onSurface.copy(alpha = 0.1f) | ||||
|     return DefaultMarkdownColors( | ||||
|         text = MaterialTheme.colorScheme.onSurface, | ||||
|         codeText = Color.Unspecified, | ||||
|         inlineCodeText = Color.Unspecified, | ||||
|         linkText = Color.Unspecified, | ||||
|         codeBackground = codeBackground, | ||||
|         inlineCodeBackground = codeBackground, | ||||
|         dividerColor = MaterialTheme.colorScheme.outlineVariant, | ||||
|         tableText = Color.Unspecified, | ||||
|         tableBackground = MaterialTheme.colorScheme.onSurface.copy(alpha = 0.05f), | ||||
|     ) | ||||
| } | ||||
|  | ||||
| @Composable | ||||
| private fun mihonMarkdownTypography() = markdownTypography( | ||||
|     h1 = MaterialTheme.typography.headlineMedium, | ||||
|     h2 = MaterialTheme.typography.headlineSmall, | ||||
|     h3 = MaterialTheme.typography.titleLarge, | ||||
|     h4 = MaterialTheme.typography.titleMedium, | ||||
|     h5 = MaterialTheme.typography.titleSmall, | ||||
|     h6 = MaterialTheme.typography.bodyLarge, | ||||
|     paragraph = MaterialTheme.typography.bodyMedium, | ||||
|     text = MaterialTheme.typography.bodyMedium, | ||||
|     ordered = MaterialTheme.typography.bodyMedium, | ||||
|     bullet = MaterialTheme.typography.bodyMedium, | ||||
|     list = MaterialTheme.typography.bodyMedium, | ||||
|     link = MaterialTheme.typography.bodyMedium.copy( | ||||
| @ReadOnlyComposable | ||||
| private fun getMarkdownTypography(): MarkdownTypography { | ||||
|     val link = MaterialTheme.typography.bodyMedium.copy( | ||||
|         color = MaterialTheme.colorScheme.primary, | ||||
|         fontWeight = FontWeight.Bold, | ||||
|     ), | ||||
| ) | ||||
|     ) | ||||
|     return DefaultMarkdownTypography( | ||||
|         h1 = MaterialTheme.typography.headlineMedium, | ||||
|         h2 = MaterialTheme.typography.headlineSmall, | ||||
|         h3 = MaterialTheme.typography.titleLarge, | ||||
|         h4 = MaterialTheme.typography.titleMedium, | ||||
|         h5 = MaterialTheme.typography.titleSmall, | ||||
|         h6 = MaterialTheme.typography.bodyLarge, | ||||
|         text = MaterialTheme.typography.bodyMedium, | ||||
|         code = MaterialTheme.typography.bodyMedium.copy(fontFamily = FontFamily.Monospace), | ||||
|         inlineCode = MaterialTheme.typography.bodyMedium.copy(fontFamily = FontFamily.Monospace), | ||||
|         quote = MaterialTheme.typography.bodyMedium.plus(SpanStyle(fontStyle = FontStyle.Italic)), | ||||
|         paragraph = MaterialTheme.typography.bodyMedium, | ||||
|         ordered = MaterialTheme.typography.bodyMedium, | ||||
|         bullet = MaterialTheme.typography.bodyMedium, | ||||
|         list = MaterialTheme.typography.bodyMedium, | ||||
|         link = link, | ||||
|         textLink = TextLinkStyles(style = link.toSpanStyle()), | ||||
|         table = MaterialTheme.typography.bodyMedium, | ||||
|     ) | ||||
| } | ||||
|  | ||||
| @Composable | ||||
| private fun mihonMarkdownComponents() = markdownComponents( | ||||
| private val markdownPadding = object : MarkdownPadding { | ||||
|     override val block: Dp = 2.dp | ||||
|     override val blockQuote: PaddingValues = PaddingValues(horizontal = 16.dp, vertical = 0.dp) | ||||
|     override val blockQuoteBar: PaddingValues.Absolute = PaddingValues.Absolute( | ||||
|         left = 4.dp, | ||||
|         top = 2.dp, | ||||
|         right = 4.dp, | ||||
|         bottom = 2.dp, | ||||
|     ) | ||||
|     override val blockQuoteText: PaddingValues = PaddingValues(vertical = 4.dp) | ||||
|     override val codeBlock: PaddingValues = PaddingValues(8.dp) | ||||
|     override val list: Dp = 0.dp | ||||
|     override val listIndent: Dp = 8.dp | ||||
|     override val listItemBottom: Dp = 0.dp | ||||
|     override val listItemTop: Dp = 0.dp | ||||
| } | ||||
|  | ||||
| private val markdownComponents = markdownComponents( | ||||
|     horizontalRule = { | ||||
|         MarkdownDivider( | ||||
|             modifier = Modifier | ||||
| @@ -204,6 +250,4 @@ private class SimpleMarkdownMarkerProcessor( | ||||
|     } | ||||
| } | ||||
|  | ||||
| val DISALLOWED_MARKDOWN_TYPES = arrayOf( | ||||
|     HTML_TAG, | ||||
| ) | ||||
| val DISALLOWED_MARKDOWN_TYPES = arrayOf(HTML_TAG) | ||||
|   | ||||
| @@ -101,7 +101,7 @@ voyager-transitions = { module = "cafe.adriel.voyager:voyager-transitions", vers | ||||
| spotless-gradle = { group = "com.diffplug.spotless", name = "spotless-plugin-gradle", version.ref = "spotless" } | ||||
| ktlint-core = { module = "com.pinterest.ktlint:ktlint-cli", version.ref = "ktlint-core" } | ||||
|  | ||||
| markdown-m3 = { module = "com.mikepenz:multiplatform-markdown-renderer-m3", version.ref = "markdown" } | ||||
| markdown-core = { module = "com.mikepenz:multiplatform-markdown-renderer", version.ref = "markdown" } | ||||
| markdown-coil = { module = "com.mikepenz:multiplatform-markdown-renderer-coil3", version.ref = "markdown" } | ||||
|  | ||||
| [plugins] | ||||
| @@ -120,4 +120,4 @@ shizuku = ["shizuku-api", "shizuku-provider"] | ||||
| sqldelight = ["sqldelight-android-driver", "sqldelight-coroutines", "sqldelight-android-paging"] | ||||
| voyager = ["voyager-navigator", "voyager-screenmodel", "voyager-tab-navigator", "voyager-transitions"] | ||||
| test = ["junit", "kotest-assertions", "mockk"] | ||||
| markdown = ["markdown-m3", "markdown-coil"] | ||||
| markdown = ["markdown-core", "markdown-coil"] | ||||
|   | ||||
		Reference in New Issue
	
	Block a user