From 14b960e8e3cf39bfdb012d4fdc730291d189bf06 Mon Sep 17 00:00:00 2001 From: Ernest Date: Thu, 23 Jul 2026 16:45:05 +0200 Subject: [PATCH 1/6] fix: soft markdown line breaks --- .../parser/src/main/cpp/jni/ParserJni.cpp | 2 +- .../markdown/parser/MarkdownASTNode.kt | 1 + .../markdown/renderer/NodeRenderer.kt | 2 + .../markdown/renderer/SoftBreakRenderer.kt | 16 + .../markdown/CommonMarkRendererTest.kt | 34 ++ .../enriched/markdown/test/TestAstFactory.kt | 4 + packages/core/cpp/parser/MD4CParser.cpp | 13 +- packages/core/cpp/parser/MarkdownASTNode.hpp | 3 +- packages/core/cpp/wasm/ASTSerializer.cpp | 2 + .../android/src/main/cpp/jni-adapter.cpp | 2 + .../markdown/input/formatting/InputParser.kt | 2 +- .../markdown/parser/MarkdownASTNode.kt | 1 + .../markdown/renderer/NodeRenderer.kt | 2 + .../markdown/renderer/SoftBreakRenderer.kt | 16 + .../serialization/MarkdownASTSerializer.kt | 4 + .../markdown/renderer/MathInlineRenderer.kt | 7 +- .../ios/parser/MarkdownASTNode.h | 3 +- .../ios/parser/MarkdownParserBridge.mm | 3 + .../ios/renderer/ENRMImageRenderer.m | 2 + .../ios/renderer/ENRMMathInlineRenderer.m | 2 + .../ios/renderer/RendererFactory.m | 6 + .../ios/utils/MarkdownASTSerializer.m | 4 + .../src/web/renderers/InlineRenderers.tsx | 5 + .../src/web/types.ts | 3 +- .../src/web/utils.ts | 1 + .../react-native-enriched-markdown/tmp.txt | 369 ++++++++++++++++++ 26 files changed, 498 insertions(+), 11 deletions(-) create mode 100644 packages/android-enriched-markdown/ui/src/main/java/com/swmansion/enriched/markdown/renderer/SoftBreakRenderer.kt create mode 100644 packages/react-native-enriched-markdown/android/src/main/java/com/swmansion/enriched/markdown/renderer/SoftBreakRenderer.kt create mode 100644 packages/react-native-enriched-markdown/tmp.txt diff --git a/packages/android-enriched-markdown/parser/src/main/cpp/jni/ParserJni.cpp b/packages/android-enriched-markdown/parser/src/main/cpp/jni/ParserJni.cpp index 1f204059e..786c9d952 100644 --- a/packages/android-enriched-markdown/parser/src/main/cpp/jni/ParserJni.cpp +++ b/packages/android-enriched-markdown/parser/src/main/cpp/jni/ParserJni.cpp @@ -18,7 +18,7 @@ namespace { #define ENRICHEDMARKDOWN_LOG_TAG "EnrichedMarkdownJNI" #define LOGE(...) __android_log_print(ANDROID_LOG_ERROR, ENRICHEDMARKDOWN_LOG_TAG, __VA_ARGS__) -static_assert(static_cast(NodeType::Highlight) == 29, +static_assert(static_cast(NodeType::SoftBreak) == 30, "NodeType enum must stay in sync with Kotlin MarkdownASTNode.NodeType"); local_ref createJavaNode(const std::shared_ptr &node) { diff --git a/packages/android-enriched-markdown/parser/src/main/java/com/swmansion/enriched/markdown/parser/MarkdownASTNode.kt b/packages/android-enriched-markdown/parser/src/main/java/com/swmansion/enriched/markdown/parser/MarkdownASTNode.kt index c4749f30d..00aefb156 100644 --- a/packages/android-enriched-markdown/parser/src/main/java/com/swmansion/enriched/markdown/parser/MarkdownASTNode.kt +++ b/packages/android-enriched-markdown/parser/src/main/java/com/swmansion/enriched/markdown/parser/MarkdownASTNode.kt @@ -37,6 +37,7 @@ data class MarkdownASTNode( Superscript, Subscript, Highlight, + SoftBreak, } fun getAttribute(key: String): String? = attributes[key] diff --git a/packages/android-enriched-markdown/ui/src/main/java/com/swmansion/enriched/markdown/renderer/NodeRenderer.kt b/packages/android-enriched-markdown/ui/src/main/java/com/swmansion/enriched/markdown/renderer/NodeRenderer.kt index 04f591a1e..e9a4436bb 100644 --- a/packages/android-enriched-markdown/ui/src/main/java/com/swmansion/enriched/markdown/renderer/NodeRenderer.kt +++ b/packages/android-enriched-markdown/ui/src/main/java/com/swmansion/enriched/markdown/renderer/NodeRenderer.kt @@ -74,6 +74,7 @@ class RendererFactory( private val textRenderer = TextRenderer() private val lineBreakRenderer = LineBreakRenderer() + private val softBreakRenderer = SoftBreakRenderer() private val renderers: Map by lazy { buildMap { @@ -92,6 +93,7 @@ class RendererFactory( put(MarkdownASTNode.NodeType.Code, CodeRenderer(config)) put(MarkdownASTNode.NodeType.Image, ImageRenderer()) put(MarkdownASTNode.NodeType.LineBreak, lineBreakRenderer) + put(MarkdownASTNode.NodeType.SoftBreak, softBreakRenderer) put(MarkdownASTNode.NodeType.ThematicBreak, ThematicBreakRenderer(config)) } } diff --git a/packages/android-enriched-markdown/ui/src/main/java/com/swmansion/enriched/markdown/renderer/SoftBreakRenderer.kt b/packages/android-enriched-markdown/ui/src/main/java/com/swmansion/enriched/markdown/renderer/SoftBreakRenderer.kt new file mode 100644 index 000000000..334b5458e --- /dev/null +++ b/packages/android-enriched-markdown/ui/src/main/java/com/swmansion/enriched/markdown/renderer/SoftBreakRenderer.kt @@ -0,0 +1,16 @@ +package com.swmansion.enriched.markdown.renderer + +import android.text.SpannableStringBuilder +import com.swmansion.enriched.markdown.parser.MarkdownASTNode + +class SoftBreakRenderer : NodeRenderer { + override fun render( + node: MarkdownASTNode, + builder: SpannableStringBuilder, + onLinkPress: ((String) -> Unit)?, + onLinkLongPress: ((String) -> Unit)?, + factory: RendererFactory, + ) { + builder.append(" ") + } +} diff --git a/packages/android-enriched-markdown/ui/src/test/java/com/swmansion/enriched/markdown/CommonMarkRendererTest.kt b/packages/android-enriched-markdown/ui/src/test/java/com/swmansion/enriched/markdown/CommonMarkRendererTest.kt index ed9c37b42..385785243 100644 --- a/packages/android-enriched-markdown/ui/src/test/java/com/swmansion/enriched/markdown/CommonMarkRendererTest.kt +++ b/packages/android-enriched-markdown/ui/src/test/java/com/swmansion/enriched/markdown/CommonMarkRendererTest.kt @@ -23,10 +23,12 @@ import com.swmansion.enriched.markdown.test.TestAstFactory.document import com.swmansion.enriched.markdown.test.TestAstFactory.emphasis import com.swmansion.enriched.markdown.test.TestAstFactory.heading import com.swmansion.enriched.markdown.test.TestAstFactory.image +import com.swmansion.enriched.markdown.test.TestAstFactory.lineBreak import com.swmansion.enriched.markdown.test.TestAstFactory.link import com.swmansion.enriched.markdown.test.TestAstFactory.listItem import com.swmansion.enriched.markdown.test.TestAstFactory.orderedList import com.swmansion.enriched.markdown.test.TestAstFactory.paragraph +import com.swmansion.enriched.markdown.test.TestAstFactory.softBreak import com.swmansion.enriched.markdown.test.TestAstFactory.strong import com.swmansion.enriched.markdown.test.TestAstFactory.text import com.swmansion.enriched.markdown.test.TestAstFactory.thematicBreak @@ -47,6 +49,38 @@ class CommonMarkRendererTest { rendered.assertContains("Hello CommonMark") } + @Test + fun rendersSoftBreakAsSpace() { + val rendered = + render( + document( + paragraph( + text("tracking your"), + softBreak(), + text("blood sugar"), + ), + ), + ) + + rendered.assertContains("tracking your blood sugar") + } + + @Test + fun rendersHardBreakAsNewline() { + val rendered = + render( + document( + paragraph( + text("line one"), + lineBreak(), + text("line two"), + ), + ), + ) + + rendered.assertContains("line one\nline two") + } + @Test fun rendersBoldText() { val rendered = diff --git a/packages/android-enriched-markdown/ui/src/test/java/com/swmansion/enriched/markdown/test/TestAstFactory.kt b/packages/android-enriched-markdown/ui/src/test/java/com/swmansion/enriched/markdown/test/TestAstFactory.kt index 43b3c01c5..68279b07a 100644 --- a/packages/android-enriched-markdown/ui/src/test/java/com/swmansion/enriched/markdown/test/TestAstFactory.kt +++ b/packages/android-enriched-markdown/ui/src/test/java/com/swmansion/enriched/markdown/test/TestAstFactory.kt @@ -57,4 +57,8 @@ object TestAstFactory { ) fun thematicBreak(): MarkdownASTNode = MarkdownASTNode(NodeType.ThematicBreak) + + fun softBreak(): MarkdownASTNode = MarkdownASTNode(NodeType.SoftBreak) + + fun lineBreak(): MarkdownASTNode = MarkdownASTNode(NodeType.LineBreak) } diff --git a/packages/core/cpp/parser/MD4CParser.cpp b/packages/core/cpp/parser/MD4CParser.cpp index ed914dc3b..a87705b7d 100644 --- a/packages/core/cpp/parser/MD4CParser.cpp +++ b/packages/core/cpp/parser/MD4CParser.cpp @@ -354,10 +354,13 @@ class MD4CParser::Impl { return 0; auto *impl = static_cast(userdata); - // Handle soft/hard line breaks - if (type == MD_TEXT_SOFTBR || type == MD_TEXT_BR) { - auto brNode = std::make_shared(NodeType::LineBreak); - impl->addInlineNode(brNode); + if (type == MD_TEXT_SOFTBR) { + impl->addInlineNode(std::make_shared(NodeType::SoftBreak)); + return 0; + } + + if (type == MD_TEXT_BR) { + impl->addInlineNode(std::make_shared(NodeType::LineBreak)); return 0; } @@ -379,7 +382,7 @@ bool isDisplayMathNode(const MarkdownASTNode &node) { } bool isSeparatorNode(const MarkdownASTNode &node) { - return node.type == NodeType::LineBreak || + return node.type == NodeType::LineBreak || node.type == NodeType::SoftBreak || (node.type == NodeType::Text && node.content.find_first_not_of(" \t\n\r") == std::string::npos); } diff --git a/packages/core/cpp/parser/MarkdownASTNode.hpp b/packages/core/cpp/parser/MarkdownASTNode.hpp index b1748c7de..9570bf553 100644 --- a/packages/core/cpp/parser/MarkdownASTNode.hpp +++ b/packages/core/cpp/parser/MarkdownASTNode.hpp @@ -37,7 +37,8 @@ enum class NodeType { Spoiler, Superscript, Subscript, - Highlight + Highlight, + SoftBreak }; struct MarkdownASTNode { diff --git a/packages/core/cpp/wasm/ASTSerializer.cpp b/packages/core/cpp/wasm/ASTSerializer.cpp index b5bbe69ac..0c02258df 100644 --- a/packages/core/cpp/wasm/ASTSerializer.cpp +++ b/packages/core/cpp/wasm/ASTSerializer.cpp @@ -18,6 +18,8 @@ static const char *nodeTypeToString(NodeType type) { return "Heading"; case NodeType::LineBreak: return "LineBreak"; + case NodeType::SoftBreak: + return "SoftBreak"; case NodeType::Strong: return "Strong"; case NodeType::Emphasis: diff --git a/packages/react-native-enriched-markdown/android/src/main/cpp/jni-adapter.cpp b/packages/react-native-enriched-markdown/android/src/main/cpp/jni-adapter.cpp index 608e8fc9f..56076b241 100644 --- a/packages/react-native-enriched-markdown/android/src/main/cpp/jni-adapter.cpp +++ b/packages/react-native-enriched-markdown/android/src/main/cpp/jni-adapter.cpp @@ -72,6 +72,8 @@ static jint nodeTypeToJavaOrdinal(NodeType type) { return 28; case NodeType::Highlight: return 29; + case NodeType::SoftBreak: + return 30; default: return 0; } diff --git a/packages/react-native-enriched-markdown/android/src/main/java/com/swmansion/enriched/markdown/input/formatting/InputParser.kt b/packages/react-native-enriched-markdown/android/src/main/java/com/swmansion/enriched/markdown/input/formatting/InputParser.kt index 33888ac8a..108ea6cf2 100644 --- a/packages/react-native-enriched-markdown/android/src/main/java/com/swmansion/enriched/markdown/input/formatting/InputParser.kt +++ b/packages/react-native-enriched-markdown/android/src/main/java/com/swmansion/enriched/markdown/input/formatting/InputParser.kt @@ -72,7 +72,7 @@ object InputParser { if (node.type == NodeType.Text) { plainText.append(node.content) - } else if (node.type == NodeType.LineBreak) { + } else if (node.type == NodeType.LineBreak || node.type == NodeType.SoftBreak) { plainText.append("\n") } diff --git a/packages/react-native-enriched-markdown/android/src/main/java/com/swmansion/enriched/markdown/parser/MarkdownASTNode.kt b/packages/react-native-enriched-markdown/android/src/main/java/com/swmansion/enriched/markdown/parser/MarkdownASTNode.kt index e2e0f35e6..e283f7fab 100644 --- a/packages/react-native-enriched-markdown/android/src/main/java/com/swmansion/enriched/markdown/parser/MarkdownASTNode.kt +++ b/packages/react-native-enriched-markdown/android/src/main/java/com/swmansion/enriched/markdown/parser/MarkdownASTNode.kt @@ -37,6 +37,7 @@ data class MarkdownASTNode( Superscript, Subscript, Highlight, + SoftBreak, } fun getAttribute(key: String): String? = attributes[key] diff --git a/packages/react-native-enriched-markdown/android/src/main/java/com/swmansion/enriched/markdown/renderer/NodeRenderer.kt b/packages/react-native-enriched-markdown/android/src/main/java/com/swmansion/enriched/markdown/renderer/NodeRenderer.kt index b937d4531..d51b7cef5 100644 --- a/packages/react-native-enriched-markdown/android/src/main/java/com/swmansion/enriched/markdown/renderer/NodeRenderer.kt +++ b/packages/react-native-enriched-markdown/android/src/main/java/com/swmansion/enriched/markdown/renderer/NodeRenderer.kt @@ -80,6 +80,7 @@ class RendererFactory( private val textRenderer = TextRenderer() private val lineBreakRenderer = LineBreakRenderer() + private val softBreakRenderer = SoftBreakRenderer() private val renderers: Map by lazy { buildMap { @@ -103,6 +104,7 @@ class RendererFactory( put(MarkdownASTNode.NodeType.Code, CodeRenderer(config)) put(MarkdownASTNode.NodeType.Image, ImageRenderer()) put(MarkdownASTNode.NodeType.LineBreak, lineBreakRenderer) + put(MarkdownASTNode.NodeType.SoftBreak, softBreakRenderer) put(MarkdownASTNode.NodeType.ThematicBreak, ThematicBreakRenderer(config)) put(MarkdownASTNode.NodeType.Spoiler, SpoilerRenderer()) if (FeatureFlags.IS_MATH_ENABLED) { diff --git a/packages/react-native-enriched-markdown/android/src/main/java/com/swmansion/enriched/markdown/renderer/SoftBreakRenderer.kt b/packages/react-native-enriched-markdown/android/src/main/java/com/swmansion/enriched/markdown/renderer/SoftBreakRenderer.kt new file mode 100644 index 000000000..334b5458e --- /dev/null +++ b/packages/react-native-enriched-markdown/android/src/main/java/com/swmansion/enriched/markdown/renderer/SoftBreakRenderer.kt @@ -0,0 +1,16 @@ +package com.swmansion.enriched.markdown.renderer + +import android.text.SpannableStringBuilder +import com.swmansion.enriched.markdown.parser.MarkdownASTNode + +class SoftBreakRenderer : NodeRenderer { + override fun render( + node: MarkdownASTNode, + builder: SpannableStringBuilder, + onLinkPress: ((String) -> Unit)?, + onLinkLongPress: ((String) -> Unit)?, + factory: RendererFactory, + ) { + builder.append(" ") + } +} diff --git a/packages/react-native-enriched-markdown/android/src/main/java/com/swmansion/enriched/markdown/utils/common/serialization/MarkdownASTSerializer.kt b/packages/react-native-enriched-markdown/android/src/main/java/com/swmansion/enriched/markdown/utils/common/serialization/MarkdownASTSerializer.kt index a16ac95ce..e5a298956 100644 --- a/packages/react-native-enriched-markdown/android/src/main/java/com/swmansion/enriched/markdown/utils/common/serialization/MarkdownASTSerializer.kt +++ b/packages/react-native-enriched-markdown/android/src/main/java/com/swmansion/enriched/markdown/utils/common/serialization/MarkdownASTSerializer.kt @@ -28,6 +28,10 @@ object MarkdownASTSerializer { } NodeType.LineBreak -> { + buffer.append("\\\n") + } + + NodeType.SoftBreak -> { buffer.append("\n") } diff --git a/packages/react-native-enriched-markdown/android/src/math/java/com/swmansion/enriched/markdown/renderer/MathInlineRenderer.kt b/packages/react-native-enriched-markdown/android/src/math/java/com/swmansion/enriched/markdown/renderer/MathInlineRenderer.kt index 3ad866896..374f6e241 100644 --- a/packages/react-native-enriched-markdown/android/src/math/java/com/swmansion/enriched/markdown/renderer/MathInlineRenderer.kt +++ b/packages/react-native-enriched-markdown/android/src/math/java/com/swmansion/enriched/markdown/renderer/MathInlineRenderer.kt @@ -42,6 +42,11 @@ class MathInlineRenderer( private fun extractLatex(node: MarkdownASTNode): String { if (!node.content.isNullOrEmpty()) return node.content!! - return node.children.mapNotNull { it.content }.joinToString("") + return node.children.joinToString("") { child -> + when (child.type) { + MarkdownASTNode.NodeType.SoftBreak, MarkdownASTNode.NodeType.LineBreak -> " " + else -> child.content + } + } } } diff --git a/packages/react-native-enriched-markdown/ios/parser/MarkdownASTNode.h b/packages/react-native-enriched-markdown/ios/parser/MarkdownASTNode.h index f4598dc38..5ace29eef 100644 --- a/packages/react-native-enriched-markdown/ios/parser/MarkdownASTNode.h +++ b/packages/react-native-enriched-markdown/ios/parser/MarkdownASTNode.h @@ -30,7 +30,8 @@ typedef NS_ENUM(NSInteger, MarkdownNodeType) { MarkdownNodeTypeSpoiler, MarkdownNodeTypeSuperscript, MarkdownNodeTypeSubscript, - MarkdownNodeTypeHighlight + MarkdownNodeTypeHighlight, + MarkdownNodeTypeSoftBreak }; @interface MarkdownASTNode : NSObject diff --git a/packages/react-native-enriched-markdown/ios/parser/MarkdownParserBridge.mm b/packages/react-native-enriched-markdown/ios/parser/MarkdownParserBridge.mm index 3a762aa0e..a682d69c8 100644 --- a/packages/react-native-enriched-markdown/ios/parser/MarkdownParserBridge.mm +++ b/packages/react-native-enriched-markdown/ios/parser/MarkdownParserBridge.mm @@ -104,6 +104,9 @@ case Markdown::NodeType::Highlight: objcType = MarkdownNodeTypeHighlight; break; + case Markdown::NodeType::SoftBreak: + objcType = MarkdownNodeTypeSoftBreak; + break; } MarkdownASTNode *objcNode = [[MarkdownASTNode alloc] initWithType:objcType]; diff --git a/packages/react-native-enriched-markdown/ios/renderer/ENRMImageRenderer.m b/packages/react-native-enriched-markdown/ios/renderer/ENRMImageRenderer.m index ec81c5921..d19cd1396 100644 --- a/packages/react-native-enriched-markdown/ios/renderer/ENRMImageRenderer.m +++ b/packages/react-native-enriched-markdown/ios/renderer/ENRMImageRenderer.m @@ -47,6 +47,8 @@ - (void)_appendChildTextFromNode:(MarkdownASTNode *)node toBuffer:(NSMutableStri { if (node.content.length > 0) { [buffer appendString:node.content]; + } else if (node.type == MarkdownNodeTypeSoftBreak || node.type == MarkdownNodeTypeLineBreak) { + [buffer appendString:@" "]; } for (MarkdownASTNode *child in node.children) { diff --git a/packages/react-native-enriched-markdown/ios/renderer/ENRMMathInlineRenderer.m b/packages/react-native-enriched-markdown/ios/renderer/ENRMMathInlineRenderer.m index 9d270ce40..bff00b34d 100644 --- a/packages/react-native-enriched-markdown/ios/renderer/ENRMMathInlineRenderer.m +++ b/packages/react-native-enriched-markdown/ios/renderer/ENRMMathInlineRenderer.m @@ -52,6 +52,8 @@ - (NSString *)extractLatexFromNode:(MarkdownASTNode *)node for (MarkdownASTNode *child in node.children) { if (child.content.length > 0) { [buffer appendString:child.content]; + } else if (child.type == MarkdownNodeTypeSoftBreak || child.type == MarkdownNodeTypeLineBreak) { + [buffer appendString:@" "]; } } return buffer; diff --git a/packages/react-native-enriched-markdown/ios/renderer/RendererFactory.m b/packages/react-native-enriched-markdown/ios/renderer/RendererFactory.m index 5d42fe599..1f4ff795e 100644 --- a/packages/react-native-enriched-markdown/ios/renderer/RendererFactory.m +++ b/packages/react-native-enriched-markdown/ios/renderer/RendererFactory.m @@ -143,6 +143,12 @@ - (void)renderChildrenOfNode:(MarkdownASTNode *)node [output appendAttributedString:lineBreak]; continue; } + if (child.type == MarkdownNodeTypeSoftBreak) { + NSAttributedString *softBreak = [[NSAttributedString alloc] initWithString:@" " + attributes:[context getTextAttributes]]; + [output appendAttributedString:softBreak]; + continue; + } id renderer = [self rendererForNodeType:child.type]; if (renderer) { [renderer renderNode:child into:output context:context]; diff --git a/packages/react-native-enriched-markdown/ios/utils/MarkdownASTSerializer.m b/packages/react-native-enriched-markdown/ios/utils/MarkdownASTSerializer.m index 74080c64e..cc595db5d 100644 --- a/packages/react-native-enriched-markdown/ios/utils/MarkdownASTSerializer.m +++ b/packages/react-native-enriched-markdown/ios/utils/MarkdownASTSerializer.m @@ -22,6 +22,10 @@ static void serializeNode(MarkdownASTNode *node, NSMutableString *buffer) break; case MarkdownNodeTypeLineBreak: + [buffer appendString:@"\\\n"]; + break; + + case MarkdownNodeTypeSoftBreak: [buffer appendString:@"\n"]; break; diff --git a/packages/react-native-enriched-markdown/src/web/renderers/InlineRenderers.tsx b/packages/react-native-enriched-markdown/src/web/renderers/InlineRenderers.tsx index 55ae16fcf..091eb196b 100644 --- a/packages/react-native-enriched-markdown/src/web/renderers/InlineRenderers.tsx +++ b/packages/react-native-enriched-markdown/src/web/renderers/InlineRenderers.tsx @@ -12,6 +12,10 @@ function LineBreakRenderer(_props: RendererProps) { return
; } +function SoftBreakRenderer(_props: RendererProps) { + return <> ; +} + function StrongRenderer({ node, styles, renderChildren }: RendererProps) { return {renderChildren(node)}; } @@ -108,6 +112,7 @@ function LatexMathInlineRenderer({ export const inlineRenderers: RendererMap = { Text: TextRenderer, LineBreak: LineBreakRenderer, + SoftBreak: SoftBreakRenderer, Strong: StrongRenderer, Emphasis: EmphasisRenderer, Strikethrough: StrikethroughRenderer, diff --git a/packages/react-native-enriched-markdown/src/web/types.ts b/packages/react-native-enriched-markdown/src/web/types.ts index 6f8f30856..ccb2940b5 100644 --- a/packages/react-native-enriched-markdown/src/web/types.ts +++ b/packages/react-native-enriched-markdown/src/web/types.ts @@ -15,6 +15,7 @@ export type NodeType = | 'Link' | 'Heading' | 'LineBreak' + | 'SoftBreak' | 'Strong' | 'Emphasis' | 'Strikethrough' @@ -63,7 +64,7 @@ export interface ASTNode { content?: string; /** Present on nodes that carry structural metadata (Heading, Link, etc.). */ attributes?: NodeAttributes; - /** Child nodes; absent on leaf nodes (Text, LineBreak, ThematicBreak). */ + /** Child nodes; absent on leaf nodes (Text, LineBreak, SoftBreak, ThematicBreak). */ children?: ASTNode[]; } diff --git a/packages/react-native-enriched-markdown/src/web/utils.ts b/packages/react-native-enriched-markdown/src/web/utils.ts index dea6f0d0c..7d47f1286 100644 --- a/packages/react-native-enriched-markdown/src/web/utils.ts +++ b/packages/react-native-enriched-markdown/src/web/utils.ts @@ -2,6 +2,7 @@ import type { ASTNode } from './types'; /** Recursively collects plain text content from an AST node's subtree. */ export function extractNodeText(node: ASTNode): string { + if (node.type === 'SoftBreak' || node.type === 'LineBreak') return ' '; if (node.content !== undefined) return node.content; return node.children?.map(extractNodeText).join('') ?? ''; } diff --git a/packages/react-native-enriched-markdown/tmp.txt b/packages/react-native-enriched-markdown/tmp.txt new file mode 100644 index 000000000..71d5bea07 --- /dev/null +++ b/packages/react-native-enriched-markdown/tmp.txt @@ -0,0 +1,369 @@ + ▐▛███▜▌ Claude Code v2.1.185 +▝▜█████▛▘ Fable 5 · Claude Max + ▘▘ ▝▝ ~/…/packages/react-native-enriched-markdown + + +❯ /clear + +❯ Look at issue 486 in the repo I want to make it help wanted, but I need to + acess the difficuilty first of this + + Case when making it smaller seems simple enough but I want to consider what + happens to whole line if we insert bigger text inside + + for example: + + lets assume normal text is 14 and bold is 28 px + + we type: + test **testBold** test + + what will happen in android and ios attributed strings? also what about input + (seems out of scope but maybe), also look for other potential issues + +⏺ I'll start by fetching issue 486 to see what it's about. + +⏺ Bash(gh issue view 486 --repo software-mansion/react-native-enriched-markdown + --json title,body,labels,comments --jq '{title, body, labels: + [.labels[].name], comment…) + ⎿  { + "body": "## Description\n\nCurrently `strong` and `em` styles only s + upport inline font styling such as `fontFamily`, `fontStyle`, and `col + … +12 lines (ctrl+o to expand) + +⏺ 3 Explore agents finished (ctrl+o to expand) + ├ Explore iOS text styling · 38 tool uses · 79.5k tokens + │ ⎿ Done + ├ Explore Android text styling · 39 tool uses · 54.3k tokens + │ ⎿ Done + └ Explore JS style API surface · 22 tool uses · 53.5k tokens + ⎿ Done + + Read 1 file, listed 1 directory (ctrl+o to expand) + +⏺ Bash(cd /Users/ernest/react-native-enriched-markdown/packages/react-native-enr + iched-markdown && find android/src -name "LineHeightSpan.kt" -o -name + "StrongSpan.kt" -…) + ⎿  android/src/main/java/com/swmansion/enriched/markdown/spans/StrongSpan + .kt + android/src/main/java/com/swmansion/enriched/markdown/spans/EmphasisSp + … +17 lines (ctrl+o to expand) + + Read 2 files, listed 1 directory (ctrl+o to expand) + +⏺ Bash(sed -n 240,360p ios/utils/ParagraphStyleUtils.m) + ⎿   NSUInteger spacerLocation = output.length; + [output appendAttributedString:kNewlineAttributedString]; + … +117 lines (ctrl+o to expand) + + Searched for 1 pattern, read 1 file (ctrl+o to expand) + +⏺ Here's my assessment of issue 486 ("Support fontSize and lineHeight for strong + and em styles"). + + TL;DR difficulty verdict + + Split the issue in two. fontSize on strong/em is a genuine help-wanted + candidate — the plumbing is mechanical and there's a copy-paste precedent + (code.fontSize already exists on both platforms). But your "28px bold inside a + 14px line" scenario exposes the real problem: both platforms hard-clamp the + line box to the block's fixed lineHeight, so oversized inline text overlaps + neighboring lines today. Fixing that clamping is the actual work, and + lineHeight as an inline prop is architecturally dubious on iOS and I'd + recommend descoping it entirely. + + Notably, you can reproduce the broken behavior today without any code changes: + set code: { fontSize: 28 } in a 14px paragraph — inline code already supports + fontSize and goes through the exact same line-height clamping. + + What happens with test **testBold** test (14px / 28px) + + Android — StrongSpan is a MetricAffectingSpan, so making it set a larger + textSize is a one-line change (StrongSpan.kt:26 currently hard-sets + blockStyle.fontSize). The layout would then correctly measure the line using + the tallest run's metrics, and all runs share the baseline. But then the + custom LineHeightSpan (spans/LineHeightSpan.kt:23-25) runs and unconditionally + squashes ascent/descent back to the fixed paragraph lineHeight: + + val leading = lineHeight - ((-fm.ascent) + fm.descent) // negative when bold + is taller + fm.ascent -= ceil(leading / 2.0f).toInt() // ascent shrinks + fm.descent += floor(leading / 2.0f).toInt() // descent shrinks + + The 28px glyphs still draw at full size, so they bleed into the lines + above/below (Android doesn't scale glyphs to the line box). The codebase + already has a workaround pattern for exactly this: + applyLineHeightSkippingImages in BlockSpacing.kt splits the LineHeightSpan + around block images because "the fixed line height would re-clamp the metrics + that ImageSpan expanded." The same strategy (or letting the metrics through + when a taller inline run is present) would be needed for oversized strong/em. + + iOS — StrongRenderer.m resolves fonts per-character-range, so applying a + bigger font is easy (superscript/subscript already scale fonts per range this + way). But applyLineHeight (ParagraphStyleUtils.m:249) sets both + minimumLineHeight and maximumLineHeight to the block value. With + maximumLineHeight pinned, TextKit caps the line fragment and the 28px glyphs + overlap adjacent lines, same as Android. There's a precedent escape hatch here + too: math paragraphs already leave maximumLineHeight = 0 so the line can + grow. A second, subtler iOS issue: applyBaselineOffset early-returns when the + tallest font exceeds the paragraph lineHeight — so one bold word would + silently disable vertical centering for the entire paragraph, shifting the + 14px text too. + + The input (out of scope, and cleanly so) + + The input has a separate, intentionally narrower style API — + MarkdownTextInputStyle only allows strong.color / em.color (its own interface + in EnrichedMarkdownTextInput.tsx, not the renderer's StrongStyle). On Android + the input applies plain StyleSpan(Typeface.BOLD) + (input/styles/BoldStyleHandler.kt), on iOS just bold traits + color. Adding + fontSize there would drag in typing-attributes-at-span-boundary problems, + cursor height, and toggle/merge logic. Since the types aren't shared, adding + fontSize to the renderer doesn't force anything on the input — I'd explicitly + state in the issue that the input is excluded. + + Other issues a contributor would hit + + - List markers: both platforms position bullets/checkboxes from font metrics + at the line start (UnorderedListSpan.drawMarker uses paint.fontMetrics; iOS + ListMarkerDrawer similar). A large bold run at the start of a list item shifts + marker alignment. + - iOS measurement cache: computeStyleFingerprint in MeasurementCache.h must + hash the new strong.fontSize/em.fontSize fields (it already hashes + code.fontSize at line 125) — forgetting this means stale measurements when the + prop changes. Easy to miss. + - Inline lineHeight semantics: on iOS lineHeight lives in NSParagraphStyle, + which is effectively per-paragraph — an inline override can't be honored + per-range. On Android a per-span LineHeightSpan would fight the paragraph one. + CSS resolves this as "line box = max of runs on the line," which you get for + free if you just let the line grow with fontSize. So lineHeight on strong/em + adds a lot of complexity for a prop whose only sane meaning falls out of the + fontSize fix anyway. + - Web: trivial — strongStyle()/emphasisStyle() in src/web/styles.ts just need + to emit the CSS props; browsers grow the line box natively. + - Plus the routine surface: TS types, normalizeMarkdownStyle(.web).ts + defaults, codegen spec, STYLES.md docs. + + Suggested framing for the help-wanted label + + Scope it as: add fontSize to strong/em (renderer only), and make lines grow + when an inline run exceeds the block lineHeight — pointing contributors at the + code.fontSize plumbing precedent, the applyLineHeightSkippingImages / math + maximumLineHeight = 0 escape hatches, and the measurement-fingerprint gotcha. + Descope inline lineHeight (block lineHeight stays authoritative, line grows to + fit) and the input. With that guidance it's a solid medium-difficulty + help-wanted issue; without it, a contributor will ship the easy plumbing and + the clipping will come back as a bug report. + +✻ Sautéed for 5m 9s + +❯ hmmm the Line issues are present right now so I think this is worth doing as + a separate bug fix myself and leave this for community what do you think? + +⏺ Yes, that's the right split — and the evidence in the codebase backs it up. + The line-clamping isn't a hypothetical for strong/em; it's an existing bug + with three independent symptoms today: + + 1. code: { fontSize: 28 } in a 14px paragraph — glyphs overlap adjacent lines + on both platforms (no workaround at all). + 2. The math and block-image code paths each carry their own bespoke escape + hatch (maximumLineHeight = 0 for math on iOS, applyLineHeightSkippingImages on + Android) — the same problem was hit twice before and patched locally instead + of at the root. + 3. The iOS applyBaselineOffset early-return, where one oversized inline run + silently disables vertical centering for the whole paragraph. + + That's exactly the kind of fix that shouldn't go to a first-time contributor: + it touches paragraph-metric semantics on both platforms, and the key decision + is a design call only a maintainer can make — namely, "fixed lineHeight + becomes a minimum: the line grows when inline content is taller." That's + CSS-consistent, it's what the math path already does, and it would let you + potentially delete the math and image special cases rather than add a third + one. Worth noting it's technically a visual behavior change for anyone + currently using oversized inline code, so it deserves a changelog mention. + + Two suggestions for how you sequence it: + + - Mark the help-wanted issue as blocked on your bugfix. If a contributor picks + up the strong/em fontSize plumbing before the line fix lands, their PR will + render broken output through no fault of their own, and you'll end up + reviewing the hard problem inside their PR anyway. Once your fix is in, the + community task really is just "replicate the code.fontSize plumbing pattern + for strong/em + hash the new fields into computeStyleFingerprint + web CSS + + docs" — a clean, well-bounded medium task. + - In the bugfix, decide explicitly whether list-marker alignment is in or out. + Bullets/checkboxes positioned off first-run font metrics will still drift + with mixed sizes even after lines grow correctly. It's fine to punt, but say + so in the issue so it doesn't come back as "your fix is incomplete." + + The repro for your bugfix is free: inline code with a large fontSize in the + example app, no new props needed. + + If you want, I can draft the bug issue text (with the repro and the three + symptoms above) and a comment for #486 explaining the scoping — you'd post + them after review. + +✻ Sautéed for 27s + +❯ I think good idea is to + 1. Me creating a bugfix for the issue (even if we dont want new props this is + a bug and I want to fix it as it is already present and ugly) + 2. Block this issue with the new one + 3. Write a comment explaining in depth what needs to be done and what to take + into consideration + + lets not worry about 3 for now lets focus on 1 and 2 (and its implementation + as this will be the next step) - but if we have good plan in the issue + implementation should be quick + +⏺ Good plan. Before drafting the bug issue, let me pin down a few remaining + facts so the implementation plan in it is concrete: whether the web renderer + has the same overlap bug, what labels the repo uses, and where Android + constructs the LineHeightSpan (to know what context is available for the fix). + +⏺ Bash(grep -n "codeStyle\|function code\|lineHeight" src/web/styles.ts | head + -30; echo ---; sed -n 1,60p + android/src/main/java/com/swmansion/enriched/markdown/utils/…) + ⎿  80: | 'lineHeight' + 92: lineHeight: `${block.lineHeight}px`, + 123: lineHeight: `${blockquote.lineHeight}px`, + … +68 lines (ctrl+o to expand) +⏺ Bash(gh label list --repo software-mansion/react-native-enriched-markdown + --limit 50; echo ---; ls + /Users/ernest/react-native-enriched-markdown/.github/ISSUE_TEMPLAT…) + ⎿  bug Something isn't working #d73a4a + documentation Improvements or additions to documentation #0075ca + duplicate This issue or pull request already exists #cfd3d7 + … +28 lines (ctrl+o to expand) + + + +⏺ Bash(sed -n 262,290p src/web/styles.ts) + ⎿  function codeStyle(style: MarkdownStyleInternal): CSSProperties { + const code = style.code; + return { + … +26 lines (ctrl+o to expand) + +⏺ User answered Claude's questions: + ⎿  · Should I post this issue to + software-mansion/react-native-enriched-markdown now? → Im gonna post it + myself lets for on draft + +⏺ I'll save the draft to a file so you can copy it straight into GitHub. + +⏺ Write(~/react-native-enriched-markdown/issue-lineheight-clamp-draft.md) + ⎿  Wrote 92 lines to ../../issue-lineheight-clamp-draft.md + 2 Title: Fixed block `lineHeight` clamps lines even when inline co + ntent is taller, causing overlap (repro: `code.fontSize`) + main: styling, domain: text platform: android, platform: web, do + 4 --> + 6 ## Description + 7 + very platform. When an inlinelied as an *exact* line height on e + 9 run is naturally taller than that value — today reproducible wit + 10 the block's `fontSize` — the line box does not grow and the over + sized glyphs overlap the + … +121 lines (ctrl+o to expand) + +⏺ Draft saved to issue-lineheight-clamp-draft.md at the repo root. The suggested + title and labels are in the HTML comment at the top (that comment won't + render if you paste it as-is, but you may want to strip it); the body below it + is ready to paste. + + Two notes for when you post: + + - The "Blocks #486" line in the description creates the cross-link on #486 + automatically, so the relationship is visible immediately even before you + write the in-depth comment there (step 3). + - I included the web fix in scope since I confirmed the mechanism in + src/web/styles.ts (fixed px line-height inherited by the inline ), but I + haven't visually run it — if you'd rather keep the bugfix PR native-only, + just delete the web section and label before posting. + + Once it's up, the next step is the implementation — the Android fix (threading + the block font's natural height into LineHeightSpan) is the most involved of + the three; iOS is a generalization of the existing hasMath branch, and web is + a one-liner in codeStyle(). Just say the word when you want to start. + +✻ Baked for 3m 10s + +❯ Granularity is per paragraph (NSParagraphStyle), so all lines of an affected + paragraph lose + the cap — small-only lines still get the `minimumLineHeight` floor, so this + is only visible + with compressed line heights. + + + is there any way for it to affect only the line, not whole paragraph? + +⏺ Good question — the honest answer depends on which text stack the iOS renderer + actually uses for layout, because the per-line escape hatches live at the + layout-manager level, not in the attributed string. Let me check. + + Searched for 1 pattern (ctrl+o to expand) + +⏺ Bash(sed -n 1,60p ios/utils/TextViewLayoutManager.h; echo ===; grep -rn + "TextViewLayoutManager\|layoutManagerDelegate\|NSLayoutManagerDelegate\|sh + ouldSetLineFragment…) + ⎿  Error: Exit code 1 + #pragma once + #import "ENRMUIKit.h" + + NS_ASSUME_NONNULL_BEGIN + + @class StyleConfig; + + @interface TextViewLayoutManager : NSLayoutManager + + … +6 lines (ctrl+o to expand) + + Searched for 1 pattern, listed 1 directory (ctrl+o to expand) + +⏺ Yes — and the architecture is already set up for it. Two facts make it + feasible: + + 1. The renderer runs on TextKit 1 with a custom layout manager. + ENRMTextViewSetup.h:18 isa-swizzles the text view's layout manager to + TextViewLayoutManager : NSLayoutManager. TextKit 1 exposes a per-line hook: + NSLayoutManagerDelegate's layoutManager:shouldSetLineFragmentRect:lineFragment + UsedRect:baselineOffset:inTextContainer:forGlyphRange: is called once per line + fragment before it's committed, and lets you rewrite the fragment rect, used + rect, and baseline offset for that line only. Subsequent lines stack on the + modified fragment, so heights compose correctly. + 2. Measurement goes through the same layout manager + (ensureLayoutForTextContainer + usedRectForTextContainer in + ENRMUIKit.h:298-300, used by EnrichedMarkdownText.mm), so per-line adjustments + made there are automatically reflected in the measured height — no separate + measurement path to keep in sync. (The input measures via + boundingRectWithSize, but that's out of scope anyway.) + + The design would invert the paragraph-level approach: keep minimumLineHeight + as the floor, drop maximumLineHeight paragraph-wide when an oversized run is + detected (as already planned), then in the per-line hook check whether this + line's character range actually contains an oversized font — if not, clamp the + fragment height back to the configured lineHeight and adjust the baseline + offset accordingly. Net effect: only lines that truly contain big glyphs grow, + matching Android's per-line chooseHeight behavior exactly. + + The costs, honestly stated: + + - Baseline math is fiddly. When you shrink a fragment you must recompute the + baseline offset within it, or text visually jumps. This is exactly the class + of work the existing TODO in ParagraphStyleUtils.m defers (per-line baseline + centering, RN's enableIOSTextBaselineOffsetPerLine) — which is actually an + argument for this hook: both follow-ups land in the same delegate method. + - macOS is also supported by this library (TARGET_OS_OSX paths); AppKit's + NSLayoutManager has the same delegate API but subtle metric differences, so it + doubles the testing surface. + - Small per-line cost of enumerating fonts in each line's range (cacheable per + paragraph). + + My recommendation for the issue: keep the paragraph-level fix as the + deliverable (the limitation only bites with compressed line heights combined + with oversized inline runs — a rare corner), and add the per-line delegate + approach to the "known limitations" section as the named follow-up mechanism + rather than a vague "per-line centering is a separate follow-up". That + upgrades the limitation from "we can't" to "we know exactly how, it's just + scoped out". Want me to update the draft's iOS section to say that? + +✻ Churned for 1m 36s \ No newline at end of file From 95c98a334bbdfea11720e937c541dff4564c0dc6 Mon Sep 17 00:00:00 2001 From: Ernest Date: Thu, 23 Jul 2026 16:49:02 +0200 Subject: [PATCH 2/6] fix: removed uneccessary file --- .../react-native-enriched-markdown/tmp.txt | 369 ------------------ 1 file changed, 369 deletions(-) delete mode 100644 packages/react-native-enriched-markdown/tmp.txt diff --git a/packages/react-native-enriched-markdown/tmp.txt b/packages/react-native-enriched-markdown/tmp.txt deleted file mode 100644 index 71d5bea07..000000000 --- a/packages/react-native-enriched-markdown/tmp.txt +++ /dev/null @@ -1,369 +0,0 @@ - ▐▛███▜▌ Claude Code v2.1.185 -▝▜█████▛▘ Fable 5 · Claude Max - ▘▘ ▝▝ ~/…/packages/react-native-enriched-markdown - - -❯ /clear - -❯ Look at issue 486 in the repo I want to make it help wanted, but I need to - acess the difficuilty first of this - - Case when making it smaller seems simple enough but I want to consider what - happens to whole line if we insert bigger text inside - - for example: - - lets assume normal text is 14 and bold is 28 px - - we type: - test **testBold** test - - what will happen in android and ios attributed strings? also what about input - (seems out of scope but maybe), also look for other potential issues - -⏺ I'll start by fetching issue 486 to see what it's about. - -⏺ Bash(gh issue view 486 --repo software-mansion/react-native-enriched-markdown - --json title,body,labels,comments --jq '{title, body, labels: - [.labels[].name], comment…) - ⎿  { - "body": "## Description\n\nCurrently `strong` and `em` styles only s - upport inline font styling such as `fontFamily`, `fontStyle`, and `col - … +12 lines (ctrl+o to expand) - -⏺ 3 Explore agents finished (ctrl+o to expand) - ├ Explore iOS text styling · 38 tool uses · 79.5k tokens - │ ⎿ Done - ├ Explore Android text styling · 39 tool uses · 54.3k tokens - │ ⎿ Done - └ Explore JS style API surface · 22 tool uses · 53.5k tokens - ⎿ Done - - Read 1 file, listed 1 directory (ctrl+o to expand) - -⏺ Bash(cd /Users/ernest/react-native-enriched-markdown/packages/react-native-enr - iched-markdown && find android/src -name "LineHeightSpan.kt" -o -name - "StrongSpan.kt" -…) - ⎿  android/src/main/java/com/swmansion/enriched/markdown/spans/StrongSpan - .kt - android/src/main/java/com/swmansion/enriched/markdown/spans/EmphasisSp - … +17 lines (ctrl+o to expand) - - Read 2 files, listed 1 directory (ctrl+o to expand) - -⏺ Bash(sed -n 240,360p ios/utils/ParagraphStyleUtils.m) - ⎿   NSUInteger spacerLocation = output.length; - [output appendAttributedString:kNewlineAttributedString]; - … +117 lines (ctrl+o to expand) - - Searched for 1 pattern, read 1 file (ctrl+o to expand) - -⏺ Here's my assessment of issue 486 ("Support fontSize and lineHeight for strong - and em styles"). - - TL;DR difficulty verdict - - Split the issue in two. fontSize on strong/em is a genuine help-wanted - candidate — the plumbing is mechanical and there's a copy-paste precedent - (code.fontSize already exists on both platforms). But your "28px bold inside a - 14px line" scenario exposes the real problem: both platforms hard-clamp the - line box to the block's fixed lineHeight, so oversized inline text overlaps - neighboring lines today. Fixing that clamping is the actual work, and - lineHeight as an inline prop is architecturally dubious on iOS and I'd - recommend descoping it entirely. - - Notably, you can reproduce the broken behavior today without any code changes: - set code: { fontSize: 28 } in a 14px paragraph — inline code already supports - fontSize and goes through the exact same line-height clamping. - - What happens with test **testBold** test (14px / 28px) - - Android — StrongSpan is a MetricAffectingSpan, so making it set a larger - textSize is a one-line change (StrongSpan.kt:26 currently hard-sets - blockStyle.fontSize). The layout would then correctly measure the line using - the tallest run's metrics, and all runs share the baseline. But then the - custom LineHeightSpan (spans/LineHeightSpan.kt:23-25) runs and unconditionally - squashes ascent/descent back to the fixed paragraph lineHeight: - - val leading = lineHeight - ((-fm.ascent) + fm.descent) // negative when bold - is taller - fm.ascent -= ceil(leading / 2.0f).toInt() // ascent shrinks - fm.descent += floor(leading / 2.0f).toInt() // descent shrinks - - The 28px glyphs still draw at full size, so they bleed into the lines - above/below (Android doesn't scale glyphs to the line box). The codebase - already has a workaround pattern for exactly this: - applyLineHeightSkippingImages in BlockSpacing.kt splits the LineHeightSpan - around block images because "the fixed line height would re-clamp the metrics - that ImageSpan expanded." The same strategy (or letting the metrics through - when a taller inline run is present) would be needed for oversized strong/em. - - iOS — StrongRenderer.m resolves fonts per-character-range, so applying a - bigger font is easy (superscript/subscript already scale fonts per range this - way). But applyLineHeight (ParagraphStyleUtils.m:249) sets both - minimumLineHeight and maximumLineHeight to the block value. With - maximumLineHeight pinned, TextKit caps the line fragment and the 28px glyphs - overlap adjacent lines, same as Android. There's a precedent escape hatch here - too: math paragraphs already leave maximumLineHeight = 0 so the line can - grow. A second, subtler iOS issue: applyBaselineOffset early-returns when the - tallest font exceeds the paragraph lineHeight — so one bold word would - silently disable vertical centering for the entire paragraph, shifting the - 14px text too. - - The input (out of scope, and cleanly so) - - The input has a separate, intentionally narrower style API — - MarkdownTextInputStyle only allows strong.color / em.color (its own interface - in EnrichedMarkdownTextInput.tsx, not the renderer's StrongStyle). On Android - the input applies plain StyleSpan(Typeface.BOLD) - (input/styles/BoldStyleHandler.kt), on iOS just bold traits + color. Adding - fontSize there would drag in typing-attributes-at-span-boundary problems, - cursor height, and toggle/merge logic. Since the types aren't shared, adding - fontSize to the renderer doesn't force anything on the input — I'd explicitly - state in the issue that the input is excluded. - - Other issues a contributor would hit - - - List markers: both platforms position bullets/checkboxes from font metrics - at the line start (UnorderedListSpan.drawMarker uses paint.fontMetrics; iOS - ListMarkerDrawer similar). A large bold run at the start of a list item shifts - marker alignment. - - iOS measurement cache: computeStyleFingerprint in MeasurementCache.h must - hash the new strong.fontSize/em.fontSize fields (it already hashes - code.fontSize at line 125) — forgetting this means stale measurements when the - prop changes. Easy to miss. - - Inline lineHeight semantics: on iOS lineHeight lives in NSParagraphStyle, - which is effectively per-paragraph — an inline override can't be honored - per-range. On Android a per-span LineHeightSpan would fight the paragraph one. - CSS resolves this as "line box = max of runs on the line," which you get for - free if you just let the line grow with fontSize. So lineHeight on strong/em - adds a lot of complexity for a prop whose only sane meaning falls out of the - fontSize fix anyway. - - Web: trivial — strongStyle()/emphasisStyle() in src/web/styles.ts just need - to emit the CSS props; browsers grow the line box natively. - - Plus the routine surface: TS types, normalizeMarkdownStyle(.web).ts - defaults, codegen spec, STYLES.md docs. - - Suggested framing for the help-wanted label - - Scope it as: add fontSize to strong/em (renderer only), and make lines grow - when an inline run exceeds the block lineHeight — pointing contributors at the - code.fontSize plumbing precedent, the applyLineHeightSkippingImages / math - maximumLineHeight = 0 escape hatches, and the measurement-fingerprint gotcha. - Descope inline lineHeight (block lineHeight stays authoritative, line grows to - fit) and the input. With that guidance it's a solid medium-difficulty - help-wanted issue; without it, a contributor will ship the easy plumbing and - the clipping will come back as a bug report. - -✻ Sautéed for 5m 9s - -❯ hmmm the Line issues are present right now so I think this is worth doing as - a separate bug fix myself and leave this for community what do you think? - -⏺ Yes, that's the right split — and the evidence in the codebase backs it up. - The line-clamping isn't a hypothetical for strong/em; it's an existing bug - with three independent symptoms today: - - 1. code: { fontSize: 28 } in a 14px paragraph — glyphs overlap adjacent lines - on both platforms (no workaround at all). - 2. The math and block-image code paths each carry their own bespoke escape - hatch (maximumLineHeight = 0 for math on iOS, applyLineHeightSkippingImages on - Android) — the same problem was hit twice before and patched locally instead - of at the root. - 3. The iOS applyBaselineOffset early-return, where one oversized inline run - silently disables vertical centering for the whole paragraph. - - That's exactly the kind of fix that shouldn't go to a first-time contributor: - it touches paragraph-metric semantics on both platforms, and the key decision - is a design call only a maintainer can make — namely, "fixed lineHeight - becomes a minimum: the line grows when inline content is taller." That's - CSS-consistent, it's what the math path already does, and it would let you - potentially delete the math and image special cases rather than add a third - one. Worth noting it's technically a visual behavior change for anyone - currently using oversized inline code, so it deserves a changelog mention. - - Two suggestions for how you sequence it: - - - Mark the help-wanted issue as blocked on your bugfix. If a contributor picks - up the strong/em fontSize plumbing before the line fix lands, their PR will - render broken output through no fault of their own, and you'll end up - reviewing the hard problem inside their PR anyway. Once your fix is in, the - community task really is just "replicate the code.fontSize plumbing pattern - for strong/em + hash the new fields into computeStyleFingerprint + web CSS + - docs" — a clean, well-bounded medium task. - - In the bugfix, decide explicitly whether list-marker alignment is in or out. - Bullets/checkboxes positioned off first-run font metrics will still drift - with mixed sizes even after lines grow correctly. It's fine to punt, but say - so in the issue so it doesn't come back as "your fix is incomplete." - - The repro for your bugfix is free: inline code with a large fontSize in the - example app, no new props needed. - - If you want, I can draft the bug issue text (with the repro and the three - symptoms above) and a comment for #486 explaining the scoping — you'd post - them after review. - -✻ Sautéed for 27s - -❯ I think good idea is to - 1. Me creating a bugfix for the issue (even if we dont want new props this is - a bug and I want to fix it as it is already present and ugly) - 2. Block this issue with the new one - 3. Write a comment explaining in depth what needs to be done and what to take - into consideration - - lets not worry about 3 for now lets focus on 1 and 2 (and its implementation - as this will be the next step) - but if we have good plan in the issue - implementation should be quick - -⏺ Good plan. Before drafting the bug issue, let me pin down a few remaining - facts so the implementation plan in it is concrete: whether the web renderer - has the same overlap bug, what labels the repo uses, and where Android - constructs the LineHeightSpan (to know what context is available for the fix). - -⏺ Bash(grep -n "codeStyle\|function code\|lineHeight" src/web/styles.ts | head - -30; echo ---; sed -n 1,60p - android/src/main/java/com/swmansion/enriched/markdown/utils/…) - ⎿  80: | 'lineHeight' - 92: lineHeight: `${block.lineHeight}px`, - 123: lineHeight: `${blockquote.lineHeight}px`, - … +68 lines (ctrl+o to expand) -⏺ Bash(gh label list --repo software-mansion/react-native-enriched-markdown - --limit 50; echo ---; ls - /Users/ernest/react-native-enriched-markdown/.github/ISSUE_TEMPLAT…) - ⎿  bug Something isn't working #d73a4a - documentation Improvements or additions to documentation #0075ca - duplicate This issue or pull request already exists #cfd3d7 - … +28 lines (ctrl+o to expand) - - - -⏺ Bash(sed -n 262,290p src/web/styles.ts) - ⎿  function codeStyle(style: MarkdownStyleInternal): CSSProperties { - const code = style.code; - return { - … +26 lines (ctrl+o to expand) - -⏺ User answered Claude's questions: - ⎿  · Should I post this issue to - software-mansion/react-native-enriched-markdown now? → Im gonna post it - myself lets for on draft - -⏺ I'll save the draft to a file so you can copy it straight into GitHub. - -⏺ Write(~/react-native-enriched-markdown/issue-lineheight-clamp-draft.md) - ⎿  Wrote 92 lines to ../../issue-lineheight-clamp-draft.md - 2 Title: Fixed block `lineHeight` clamps lines even when inline co - ntent is taller, causing overlap (repro: `code.fontSize`) - main: styling, domain: text platform: android, platform: web, do - 4 --> - 6 ## Description - 7 - very platform. When an inlinelied as an *exact* line height on e - 9 run is naturally taller than that value — today reproducible wit - 10 the block's `fontSize` — the line box does not grow and the over - sized glyphs overlap the - … +121 lines (ctrl+o to expand) - -⏺ Draft saved to issue-lineheight-clamp-draft.md at the repo root. The suggested - title and labels are in the HTML comment at the top (that comment won't - render if you paste it as-is, but you may want to strip it); the body below it - is ready to paste. - - Two notes for when you post: - - - The "Blocks #486" line in the description creates the cross-link on #486 - automatically, so the relationship is visible immediately even before you - write the in-depth comment there (step 3). - - I included the web fix in scope since I confirmed the mechanism in - src/web/styles.ts (fixed px line-height inherited by the inline ), but I - haven't visually run it — if you'd rather keep the bugfix PR native-only, - just delete the web section and label before posting. - - Once it's up, the next step is the implementation — the Android fix (threading - the block font's natural height into LineHeightSpan) is the most involved of - the three; iOS is a generalization of the existing hasMath branch, and web is - a one-liner in codeStyle(). Just say the word when you want to start. - -✻ Baked for 3m 10s - -❯ Granularity is per paragraph (NSParagraphStyle), so all lines of an affected - paragraph lose - the cap — small-only lines still get the `minimumLineHeight` floor, so this - is only visible - with compressed line heights. - - - is there any way for it to affect only the line, not whole paragraph? - -⏺ Good question — the honest answer depends on which text stack the iOS renderer - actually uses for layout, because the per-line escape hatches live at the - layout-manager level, not in the attributed string. Let me check. - - Searched for 1 pattern (ctrl+o to expand) - -⏺ Bash(sed -n 1,60p ios/utils/TextViewLayoutManager.h; echo ===; grep -rn - "TextViewLayoutManager\|layoutManagerDelegate\|NSLayoutManagerDelegate\|sh - ouldSetLineFragment…) - ⎿  Error: Exit code 1 - #pragma once - #import "ENRMUIKit.h" - - NS_ASSUME_NONNULL_BEGIN - - @class StyleConfig; - - @interface TextViewLayoutManager : NSLayoutManager - - … +6 lines (ctrl+o to expand) - - Searched for 1 pattern, listed 1 directory (ctrl+o to expand) - -⏺ Yes — and the architecture is already set up for it. Two facts make it - feasible: - - 1. The renderer runs on TextKit 1 with a custom layout manager. - ENRMTextViewSetup.h:18 isa-swizzles the text view's layout manager to - TextViewLayoutManager : NSLayoutManager. TextKit 1 exposes a per-line hook: - NSLayoutManagerDelegate's layoutManager:shouldSetLineFragmentRect:lineFragment - UsedRect:baselineOffset:inTextContainer:forGlyphRange: is called once per line - fragment before it's committed, and lets you rewrite the fragment rect, used - rect, and baseline offset for that line only. Subsequent lines stack on the - modified fragment, so heights compose correctly. - 2. Measurement goes through the same layout manager - (ensureLayoutForTextContainer + usedRectForTextContainer in - ENRMUIKit.h:298-300, used by EnrichedMarkdownText.mm), so per-line adjustments - made there are automatically reflected in the measured height — no separate - measurement path to keep in sync. (The input measures via - boundingRectWithSize, but that's out of scope anyway.) - - The design would invert the paragraph-level approach: keep minimumLineHeight - as the floor, drop maximumLineHeight paragraph-wide when an oversized run is - detected (as already planned), then in the per-line hook check whether this - line's character range actually contains an oversized font — if not, clamp the - fragment height back to the configured lineHeight and adjust the baseline - offset accordingly. Net effect: only lines that truly contain big glyphs grow, - matching Android's per-line chooseHeight behavior exactly. - - The costs, honestly stated: - - - Baseline math is fiddly. When you shrink a fragment you must recompute the - baseline offset within it, or text visually jumps. This is exactly the class - of work the existing TODO in ParagraphStyleUtils.m defers (per-line baseline - centering, RN's enableIOSTextBaselineOffsetPerLine) — which is actually an - argument for this hook: both follow-ups land in the same delegate method. - - macOS is also supported by this library (TARGET_OS_OSX paths); AppKit's - NSLayoutManager has the same delegate API but subtle metric differences, so it - doubles the testing surface. - - Small per-line cost of enumerating fonts in each line's range (cacheable per - paragraph). - - My recommendation for the issue: keep the paragraph-level fix as the - deliverable (the limitation only bites with compressed line heights combined - with oversized inline runs — a rare corner), and add the per-line delegate - approach to the "known limitations" section as the named follow-up mechanism - rather than a vague "per-line centering is a separate follow-up". That - upgrades the limitation from "we can't" to "we know exactly how, it's just - scoped out". Want me to update the draft's iOS section to say that? - -✻ Churned for 1m 36s \ No newline at end of file From 8ec88751e0113d8f7228ba1ad01da93a35b0b44b Mon Sep 17 00:00:00 2001 From: Ernest Date: Fri, 24 Jul 2026 08:46:06 +0200 Subject: [PATCH 3/6] fix: add rebuilded wasm --- .../src/web/wasm/md4c.js | Bin 134107 -> 133745 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/packages/react-native-enriched-markdown/src/web/wasm/md4c.js b/packages/react-native-enriched-markdown/src/web/wasm/md4c.js index 0be72e56b7e1957d0ac65a62c227ff34ae506f12..cbb7eb67278591025a952103349a561a7c3b7bb6 100644 GIT binary patch delta 22902 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 Date: Fri, 24 Jul 2026 11:08:26 +0200 Subject: [PATCH 4/6] feat: fix + docs --- docs/ELEMENTS_STRUCTURE.md | 21 ++++++++++++++++++- .../parser/src/main/cpp/jni/ParserJni.cpp | 2 ++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/docs/ELEMENTS_STRUCTURE.md b/docs/ELEMENTS_STRUCTURE.md index fce66f63b..7cb0bc315 100644 --- a/docs/ELEMENTS_STRUCTURE.md +++ b/docs/ELEMENTS_STRUCTURE.md @@ -110,6 +110,25 @@ Block elements are structural containers that define the layout and establish th Inline elements modify text within blocks and apply additional styling on top of the block's typography. +## Line Breaks + +Newlines follow standard CommonMark semantics: + +- **Blank line**: Starts a new paragraph. +- **Single newline (soft break)**: Renders as a space — consecutive lines flow together into one wrapped paragraph, matching how GitHub and other CommonMark renderers display Markdown. +- **Hard break**: Ends a line with two spaces or a backslash to force a line break within the paragraph. + +```markdown +This line and +this line render as one continuous sentence. + +A blank line starts a new paragraph. + +Two trailing spaces +or a trailing backslash\ +force a line break within the paragraph. +``` + ## Images: Block vs Inline Images are automatically detected as block or inline based on context: @@ -117,7 +136,7 @@ Images are automatically detected as block or inline based on context: - **Block images**: When an image is the only content in a paragraph (standalone), it's treated as a block image and uses block-level spacing - **Inline images**: When an image appears alongside other text content, it's treated as inline and aligns with the text baseline -You don't need to specify which type—the renderer automatically determines this based on the image's position in the content. +You don't need to specify which type—the renderer automatically determines this based on the image's position in the content. Note that a single newline doesn't split a paragraph, so an image on its own source line directly below text is still inline; separate it with a blank line to make it a block image. ## Nested Elements diff --git a/packages/android-enriched-markdown/parser/src/main/cpp/jni/ParserJni.cpp b/packages/android-enriched-markdown/parser/src/main/cpp/jni/ParserJni.cpp index 786c9d952..94f64800f 100644 --- a/packages/android-enriched-markdown/parser/src/main/cpp/jni/ParserJni.cpp +++ b/packages/android-enriched-markdown/parser/src/main/cpp/jni/ParserJni.cpp @@ -18,6 +18,8 @@ namespace { #define ENRICHEDMARKDOWN_LOG_TAG "EnrichedMarkdownJNI" #define LOGE(...) __android_log_print(ANDROID_LOG_ERROR, ENRICHEDMARKDOWN_LOG_TAG, __VA_ARGS__) +static_assert(static_cast(NodeType::Highlight) == 29, + "NodeType enum must stay in sync with Kotlin MarkdownASTNode.NodeType"); static_assert(static_cast(NodeType::SoftBreak) == 30, "NodeType enum must stay in sync with Kotlin MarkdownASTNode.NodeType"); From dc6e2ed52cf0fb5360fd316bd9267b490bd01608 Mon Sep 17 00:00:00 2001 From: Ernest Date: Fri, 24 Jul 2026 12:32:59 +0200 Subject: [PATCH 5/6] test: maestro tests --- .../basic/block_elements/hard_break_test.yaml | 29 ++++++++++++++++++ .../basic/block_elements/soft_break_test.yaml | 26 ++++++++++++++++ .../android/hard_break_display.png | Bin 0 -> 35945 bytes .../android/soft_break_display.png | Bin 0 -> 42598 bytes .../screenshots/ios/hard_break_display.png | Bin 0 -> 37583 bytes .../screenshots/ios/soft_break_display.png | Bin 0 -> 39536 bytes 6 files changed, 55 insertions(+) create mode 100644 .maestro/enrichedMarkdownText/flows/basic/block_elements/hard_break_test.yaml create mode 100644 .maestro/enrichedMarkdownText/flows/basic/block_elements/soft_break_test.yaml create mode 100644 .maestro/enrichedMarkdownText/screenshots/android/hard_break_display.png create mode 100644 .maestro/enrichedMarkdownText/screenshots/android/soft_break_display.png create mode 100644 .maestro/enrichedMarkdownText/screenshots/ios/hard_break_display.png create mode 100644 .maestro/enrichedMarkdownText/screenshots/ios/soft_break_display.png diff --git a/.maestro/enrichedMarkdownText/flows/basic/block_elements/hard_break_test.yaml b/.maestro/enrichedMarkdownText/flows/basic/block_elements/hard_break_test.yaml new file mode 100644 index 000000000..0ed7d66f5 --- /dev/null +++ b/.maestro/enrichedMarkdownText/flows/basic/block_elements/hard_break_test.yaml @@ -0,0 +1,29 @@ +appId: swmansion.enriched.markdown.example +tags: + - smoke + - block + - paragraph + - text +--- +# A trailing backslash is a CommonMark hard break: it forces a line break while +# staying inside one paragraph, so the two lines are separated by line height +# only. The blank line then starts a second paragraph that carries paragraph +# margins — the screenshot pins the spacing difference between the two. +- launchApp + +- runFlow: + file: '../../../../subflows/move_to_playground.yaml' + +- runFlow: + file: '../../../subflows/set_enriched_text_value.yaml' + env: + VALUE: | + This line ends with a backslash\ + so this text continues inside the same paragraph. + + A blank line starts a new paragraph with its own spacing. + +- runFlow: + file: '../../../subflows/capture_or_assert_screenshot.yaml' + env: + SCREENSHOT_NAME: 'hard_break_display' diff --git a/.maestro/enrichedMarkdownText/flows/basic/block_elements/soft_break_test.yaml b/.maestro/enrichedMarkdownText/flows/basic/block_elements/soft_break_test.yaml new file mode 100644 index 000000000..98b5654f9 --- /dev/null +++ b/.maestro/enrichedMarkdownText/flows/basic/block_elements/soft_break_test.yaml @@ -0,0 +1,26 @@ +appId: swmansion.enriched.markdown.example +tags: + - smoke + - block + - paragraph + - text +--- +# Regression for #541: a single newline inside a paragraph is a CommonMark soft +# break and renders as a space — both lines flow together into one wrapped +# paragraph with no forced line break after "your". +- launchApp + +- runFlow: + file: '../../../../subflows/move_to_playground.yaml' + +- runFlow: + file: '../../../subflows/set_enriched_text_value.yaml' + env: + VALUE: | + Let's start simple: keep taking your medications as prescribed, and we'll begin tracking your + blood sugar and blood pressure so we can see how you're really doing. + +- runFlow: + file: '../../../subflows/capture_or_assert_screenshot.yaml' + env: + SCREENSHOT_NAME: 'soft_break_display' diff --git a/.maestro/enrichedMarkdownText/screenshots/android/hard_break_display.png b/.maestro/enrichedMarkdownText/screenshots/android/hard_break_display.png new file mode 100644 index 0000000000000000000000000000000000000000..c6adb567095d1daa0f6998a1d7802e6153931064 GIT binary patch literal 35945 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

u9RaADWs%RQ=2Pvwqf^l5+q=o*icgth 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 literal 0 HcmV?d00001 diff --git a/.maestro/enrichedMarkdownText/screenshots/ios/hard_break_display.png b/.maestro/enrichedMarkdownText/screenshots/ios/hard_break_display.png new file mode 100644 index 0000000000000000000000000000000000000000..5bc9cb979ae0ee852ab2d2f2b99156af6f1baab2 GIT binary patch literal 37583 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

b>mO?#w-q` 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 Nu6IoFTbVEZ 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 OWU;5KpUXO@geCz04>d#p literal 0 HcmV?d00001 From 3bcf944940f7dd100d247f797d803399319de01b Mon Sep 17 00:00:00 2001 From: Ernest Date: Mon, 27 Jul 2026 09:00:25 +0200 Subject: [PATCH 6/6] fix: apply cr --- .../swmansion/enriched/markdown/renderer/MathInlineRenderer.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/react-native-enriched-markdown/android/src/math/java/com/swmansion/enriched/markdown/renderer/MathInlineRenderer.kt b/packages/react-native-enriched-markdown/android/src/math/java/com/swmansion/enriched/markdown/renderer/MathInlineRenderer.kt index 374f6e241..8d263d307 100644 --- a/packages/react-native-enriched-markdown/android/src/math/java/com/swmansion/enriched/markdown/renderer/MathInlineRenderer.kt +++ b/packages/react-native-enriched-markdown/android/src/math/java/com/swmansion/enriched/markdown/renderer/MathInlineRenderer.kt @@ -41,7 +41,7 @@ class MathInlineRenderer( } private fun extractLatex(node: MarkdownASTNode): String { - if (!node.content.isNullOrEmpty()) return node.content!! + if (node.content.isNotEmpty()) return node.content return node.children.joinToString("") { child -> when (child.type) { MarkdownASTNode.NodeType.SoftBreak, MarkdownASTNode.NodeType.LineBreak -> " "