From cf29f195115dd575f42c9139c55cfde3be0a01d2 Mon Sep 17 00:00:00 2001 From: OneWay Date: Mon, 21 Sep 2026 20:11:40 +0800 Subject: [PATCH] fix(dsl): render tabs as a fixed-width gap A literal tab advanced text to the next platform tab stop, which pushed the rest of the line far enough to wrap it mid-phrase. Replace each tab with an en space so the separator keeps a fixed, modest width and the line breaks like ordinary text. --- .../research/ui/article/DslAnnotatedParser.kt | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/app/src/main/java/com/example/research/ui/article/DslAnnotatedParser.kt b/app/src/main/java/com/example/research/ui/article/DslAnnotatedParser.kt index 7d11c8b..24db031 100644 --- a/app/src/main/java/com/example/research/ui/article/DslAnnotatedParser.kt +++ b/app/src/main/java/com/example/research/ui/article/DslAnnotatedParser.kt @@ -136,6 +136,15 @@ object DslAnnotatedParser { } } + fun appendText(value: String) { + if (value.isEmpty()) return + builder.append(value) + if (refStack.isNotEmpty()) { + refStack.last().second.append(value) + } + lastAppended = value.last() + } + fun marginIndent(tagName: String): Int { if (tagName == "m" || tagName == "m0" || tagName == "m1") return 0 val margin = tagName.drop(1).toIntOrNull() ?: return 0 @@ -253,6 +262,10 @@ object DslAnnotatedParser { } i++ } + '\t' -> { + appendText("\u2002") + i++ + } else -> { appendChar(char)