Updates markdown parser to the latest

This commit is contained in:
Vitor Pamplona
2025-09-25 12:53:45 -04:00
parent d04cf97418
commit 1f6135d45d
4 changed files with 38 additions and 25 deletions

View File

@@ -26,15 +26,17 @@ import androidx.compose.foundation.verticalScroll
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.ProvideTextStyle import androidx.compose.material3.ProvideTextStyle
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.CompositionLocalProvider
import androidx.compose.runtime.MutableState import androidx.compose.runtime.MutableState
import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember import androidx.compose.runtime.remember
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.Color
import androidx.compose.ui.platform.LocalUriHandler import androidx.compose.ui.platform.LocalUriHandler
import androidx.compose.ui.platform.UriHandler
import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.Preview
import com.halilibo.richtext.commonmark.CommonMarkdownParseOptions
import com.halilibo.richtext.commonmark.CommonmarkAstNodeParser import com.halilibo.richtext.commonmark.CommonmarkAstNodeParser
import com.halilibo.richtext.commonmark.MarkdownParseOptions
import com.halilibo.richtext.markdown.BasicMarkdown import com.halilibo.richtext.markdown.BasicMarkdown
import com.halilibo.richtext.ui.material3.RichText import com.halilibo.richtext.ui.material3.RichText
import com.vitorpamplona.amethyst.model.LocalCache import com.vitorpamplona.amethyst.model.LocalCache
@@ -69,24 +71,25 @@ fun RenderContentAsMarkdown(
accountViewModel: AccountViewModel, accountViewModel: AccountViewModel,
nav: INav, nav: INav,
) { ) {
val uri = LocalUriHandler.current val uriHandler = LocalUriHandler.current
val onClick = val onClick =
remember { remember(uriHandler) {
{ link: String -> object : UriHandler {
val route = uriToRoute(link, accountViewModel.account) override fun openUri(uri: String) {
val route = uriToRoute(uri, accountViewModel.account)
if (route != null) { if (route != null) {
nav.nav(route) nav.nav(route)
} else { } else {
runCatching { uri.openUri(link) } runCatching { uriHandler.openUri(uri) }
}
} }
Unit
} }
} }
ProvideTextStyle(MarkdownTextStyle) { ProvideTextStyle(MarkdownTextStyle) {
val astNode = val astNode =
remember(content) { remember(content) {
CommonmarkAstNodeParser(MarkdownParseOptions.MarkdownWithLinks).parse(content) CommonmarkAstNodeParser(CommonMarkdownParseOptions.MarkdownWithLinks).parse(content)
} }
val renderer = val renderer =
@@ -103,15 +106,16 @@ fun RenderContentAsMarkdown(
) )
} }
CompositionLocalProvider(LocalUriHandler provides onClick) {
RichText( RichText(
style = MaterialTheme.colorScheme.markdownStyle, style = MaterialTheme.colorScheme.markdownStyle,
linkClickHandler = onClick,
renderer = renderer, renderer = renderer,
) { ) {
BasicMarkdown(astNode) BasicMarkdown(astNode)
} }
} }
} }
}
@Preview @Preview
@Composable @Composable

View File

@@ -83,8 +83,8 @@ import androidx.compose.ui.unit.dp
import androidx.compose.ui.window.Dialog import androidx.compose.ui.window.Dialog
import androidx.compose.ui.window.DialogProperties import androidx.compose.ui.window.DialogProperties
import androidx.fragment.app.FragmentActivity import androidx.fragment.app.FragmentActivity
import com.halilibo.richtext.commonmark.CommonMarkdownParseOptions
import com.halilibo.richtext.commonmark.CommonmarkAstNodeParser import com.halilibo.richtext.commonmark.CommonmarkAstNodeParser
import com.halilibo.richtext.commonmark.MarkdownParseOptions
import com.halilibo.richtext.markdown.BasicMarkdown import com.halilibo.richtext.markdown.BasicMarkdown
import com.halilibo.richtext.ui.RichTextStyle import com.halilibo.richtext.ui.RichTextStyle
import com.halilibo.richtext.ui.material3.RichText import com.halilibo.richtext.ui.material3.RichText
@@ -177,7 +177,7 @@ private fun DialogContents(
val astNode1 = val astNode1 =
remember { remember {
CommonmarkAstNodeParser(MarkdownParseOptions.MarkdownWithLinks).parse(content1) CommonmarkAstNodeParser(CommonMarkdownParseOptions.MarkdownWithLinks).parse(content1)
} }
RichText( RichText(
@@ -205,7 +205,7 @@ private fun DialogContents(
val astNode = val astNode =
remember { remember {
CommonmarkAstNodeParser(MarkdownParseOptions.MarkdownWithLinks).parse(content) CommonmarkAstNodeParser(CommonMarkdownParseOptions.MarkdownWithLinks).parse(content)
} }
RichText( RichText(

View File

@@ -20,6 +20,8 @@
*/ */
package com.vitorpamplona.amethyst.ui.theme package com.vitorpamplona.amethyst.ui.theme
import android.R.attr.fontFamily
import android.R.id.primary
import android.app.Activity import android.app.Activity
import android.app.UiModeManager import android.app.UiModeManager
import android.content.Context import android.content.Context
@@ -49,6 +51,7 @@ import androidx.compose.ui.graphics.toArgb
import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.platform.LocalView import androidx.compose.ui.platform.LocalView
import androidx.compose.ui.text.SpanStyle import androidx.compose.ui.text.SpanStyle
import androidx.compose.ui.text.TextLinkStyles
import androidx.compose.ui.text.TextStyle import androidx.compose.ui.text.TextStyle
import androidx.compose.ui.text.font.FontFamily import androidx.compose.ui.text.font.FontFamily
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
@@ -292,9 +295,12 @@ val MarkDownStyleOnDark =
stringStyle = stringStyle =
RichTextDefaults.stringStyle?.copy( RichTextDefaults.stringStyle?.copy(
linkStyle = linkStyle =
TextLinkStyles(
style =
SpanStyle( SpanStyle(
color = DarkColorPalette.primary, color = DarkColorPalette.primary,
), ),
),
codeStyle = codeStyle =
SpanStyle( SpanStyle(
fontFamily = FontFamily.Monospace, fontFamily = FontFamily.Monospace,
@@ -330,9 +336,12 @@ val MarkDownStyleOnLight =
stringStyle = stringStyle =
RichTextDefaults.stringStyle?.copy( RichTextDefaults.stringStyle?.copy(
linkStyle = linkStyle =
TextLinkStyles(
style =
SpanStyle( SpanStyle(
color = LightColorPalette.primary, color = LightColorPalette.primary,
), ),
),
codeStyle = codeStyle =
SpanStyle( SpanStyle(
fontFamily = FontFamily.Monospace, fontFamily = FontFamily.Monospace,

View File

@@ -34,7 +34,7 @@ lazysodiumAndroid = "5.2.0"
lazysodiumJava = "5.2.0" lazysodiumJava = "5.2.0"
lifecycleRuntimeKtx = "2.9.4" lifecycleRuntimeKtx = "2.9.4"
lightcompressor = "1.3.3" lightcompressor = "1.3.3"
markdown = "e1151c8" markdown = "f92ef49c9d"
media3 = "1.8.0" media3 = "1.8.0"
mockk = "1.14.5" mockk = "1.14.5"
kotlinx-coroutines-test = "1.10.2" kotlinx-coroutines-test = "1.10.2"