From 4b1927873332e6e1bd9c88a0672b6aa8e5d76f90 Mon Sep 17 00:00:00 2001 From: AskaEth Date: Wed, 7 Oct 2026 17:25:04 +0800 Subject: [PATCH 1/2] =?UTF-8?q?feat(W68):=20=E8=A1=8C=E5=86=85=E6=A0=87?= =?UTF-8?q?=E7=AD=BE=E6=8C=89=E5=A5=91=E7=BA=A6=20v0.89=20=E5=AF=B9?= =?UTF-8?q?=E9=BD=90=20=E2=80=94=E2=80=94=20=E5=A4=A7=E5=B0=8F=E5=86=99?= =?UTF-8?q?=E4=B8=8D=E6=95=8F=E6=84=9F=E3=80=81=E5=B1=9E=E6=80=A7=E4=B8=80?= =?UTF-8?q?=E5=BE=8B=E4=B8=A2=E5=BC=83=E3=80=81=E7=BB=93=E6=9E=84=E4=B8=8D?= =?UTF-8?q?=E5=B9=B3=E8=A1=A1=E6=95=B4=E6=AE=B5=E9=99=8D=E7=BA=A7=E3=80=81?= =?UTF-8?q?=E8=A1=A5=20u/s=20=E4=B8=8E=20
?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 后端 2026-10-07 傍晚把行内标签升成契约 v0.89(推库 `2dae469`),本端四处按它对齐。 1. 标签名大小写不敏感(`` / `` / `
` 都认) 消费侧与流式**扣留**侧一起改,两边同源:`parseInlineTag` 与 `couldBeInlineTagNamePrefix` / `isTagNameLetter` 收在 `InlineMarkup.kt` 一份, `isPotentialTagPrefix` 引用它。原来扣留侧只扫 `a..z`,若只改消费侧,`` 到了再吃掉——屏幕上显示过的字当场改口。 段落/旁白标签(`

` / `` / ``)仍只认小写,既有契约逐字未改。 2. 补 `u` / `s`:`InlineStyle` 加 Underline / Strikethrough;`MessageBubble.inlineBody` 落到 `TextDecoration.Underline` / `LineThrough`(两者叠加时给两条线,不二选一)。 3. 属性一律不解析:白名单标签只取标签名,`` 就是粗体,属性整段丢掉。 形状判据:名字后必须是 `>`、空白或 `/`,所以 `` / `` 仍是普通文本。 `inlineTagEnd` 那扇定宽窗换成「扫到 `>` 或下一个 `<` 为止」(属性没有长度上界),仍是线性。 4. 结构不平衡 ⇒ **该气泡正文整段降级为原文**(未闭合 / 落单闭标签 / 交错;`
` 也一起放弃)。 取代 W67 的局部降级。粒度 = 该气泡的 `body`(不是整条消息、也不是单个 `

` 块), 理由写进 `parseInlineMarkup` 的 KDoc,由 `theFallbackCoversOnlyTheBubbleThatIsBroken` 钉住。 白名单外的尖括号(`" + assertTrue(parseInlineMarkup(raw).isEmpty()) + assertEquals(raw, parse("

$raw

").single().body) + + // 白名单外的标签不参与结构判定:旁边那对 `` 照常生效,尖括号原样留着 + val mixed = parse("

甲粗乙

").single() + assertEquals("甲粗乙", mixed.body) + assertEquals( + listOf(run("甲"), run("粗", InlineStyle.Bold), run("乙")), + mixed.runs, + ) + + // 落单的白名单外标签同理:它只是几个字符,不把整段拖成字面 + assertEquals( + listOf(run("甲"), run("粗", InlineStyle.Bold), run("