Remember descriptionAnnotator across composition

Closes #2510

Co-authored-by: Cuong-Tran <16017808+cuong-tran@users.noreply.github.com>
This commit is contained in:
AntsyLich
2025-12-27 01:43:39 +06:00
parent e059190fab
commit 906d6f3cdb
@@ -567,44 +567,47 @@ private fun ColumnScope.MangaContentInfo(
} }
} }
private fun descriptionAnnotator(loadImages: Boolean, linkStyle: SpanStyle) = markdownAnnotator( @Composable
annotate = { content, child -> private fun descriptionAnnotator(loadImages: Boolean, linkStyle: SpanStyle) = remember(loadImages, linkStyle) {
if (!loadImages && child.type == MarkdownElementTypes.IMAGE) { markdownAnnotator(
val inlineLink = child.findChildOfType(MarkdownElementTypes.INLINE_LINK) annotate = { content, child ->
if (!loadImages && child.type == MarkdownElementTypes.IMAGE) {
val inlineLink = child.findChildOfType(MarkdownElementTypes.INLINE_LINK)
val url = inlineLink?.findChildOfType(MarkdownElementTypes.LINK_DESTINATION) val url = inlineLink?.findChildOfType(MarkdownElementTypes.LINK_DESTINATION)
?.getUnescapedTextInNode(content)
?: inlineLink?.findChildOfType(MarkdownElementTypes.AUTOLINK)
?.findChildOfType(MarkdownTokenTypes.AUTOLINK)
?.getUnescapedTextInNode(content) ?.getUnescapedTextInNode(content)
?: return@markdownAnnotator false ?: inlineLink?.findChildOfType(MarkdownElementTypes.AUTOLINK)
?.findChildOfType(MarkdownTokenTypes.AUTOLINK)
?.getUnescapedTextInNode(content)
?: return@markdownAnnotator false
val textNode = inlineLink?.findChildOfType(MarkdownElementTypes.LINK_TITLE) val textNode = inlineLink?.findChildOfType(MarkdownElementTypes.LINK_TITLE)
?: inlineLink?.findChildOfType(MarkdownElementTypes.LINK_TEXT) ?: inlineLink?.findChildOfType(MarkdownElementTypes.LINK_TEXT)
val altText = textNode?.findChildOfType(MarkdownTokenTypes.TEXT) val altText = textNode?.findChildOfType(MarkdownTokenTypes.TEXT)
?.getUnescapedTextInNode(content).orEmpty() ?.getUnescapedTextInNode(content).orEmpty()
withLink(LinkAnnotation.Url(url = url)) { withLink(LinkAnnotation.Url(url = url)) {
pushStyle(linkStyle) pushStyle(linkStyle)
appendInlineContent(MARKDOWN_INLINE_IMAGE_TAG) appendInlineContent(MARKDOWN_INLINE_IMAGE_TAG)
append(altText) append(altText)
pop() pop()
}
return@markdownAnnotator true
} }
return@markdownAnnotator true if (child.type in DISALLOWED_MARKDOWN_TYPES) {
} append(content.substring(child.startOffset, child.endOffset))
return@markdownAnnotator true
}
if (child.type in DISALLOWED_MARKDOWN_TYPES) { false
append(content.substring(child.startOffset, child.endOffset)) },
return@markdownAnnotator true config = markdownAnnotatorConfig(
} eolAsNewLine = true,
),
false )
}, }
config = markdownAnnotatorConfig(
eolAsNewLine = true,
),
)
@Composable @Composable
private fun MangaSummary( private fun MangaSummary(