feat(terminal): add Unicode precision — CJK ambiguous width, emoji ZWJ, ligatures
- Add grapheme_width() with emoji ZWJ sequence detection (width 2) and comprehensive is_cjk_ambiguous() per UAX #11 - Add TerminalFontOptions::{ligatures, cjk_ambiguous_wide} options - Add is_emoji_presentation() covering major emoji Unicode blocks - Update default font stack with CJK and emoji fallback families - Add --terminal-font-ligatures CSS variable via font-variant-ligatures - Add 8 unit tests for grapheme_width covering ASCII, CJK, emoji, ZWJ sequences, combining chars, and variation selectors - Mark P8 complete in roadmap
This commit is contained in:
@@ -230,13 +230,23 @@
|
||||
- JS 侧同步设置 `--terminal-reduce-motion:reduce` CSS 变量,Effect 内联动 `prefers_reduced_motion` 信号。
|
||||
- `terminal-screen:focus-within` 已有可见焦点环(`box-shadow: 0 0 0 3px rgb(56 189 248 / 15%)`)。
|
||||
|
||||
### P8 — Unicode / 字形精度
|
||||
### P8 — Unicode / 字形精度 ✅ 已完成
|
||||
|
||||
**计划实现**:
|
||||
1. emoji / ZWJ / variation selector 的 grapheme cluster 宽度策略。
|
||||
2. CJK ambiguous width 配置。
|
||||
3. ligature 可选支持。
|
||||
4. fallback font metrics 校准。
|
||||
**已实现**:
|
||||
1. **Emoji / ZWJ / variation selector 宽度策略** ✅
|
||||
- `grapheme_width()` 函数:ZWJ emoji 序列(如家族 emoji)检测在标准宽度计算之前,整体返回宽度 2。
|
||||
- `is_emoji_presentation()` 覆盖 Emoticons、Misc Symbols、Supplemental Symbols、Transport、Dingbats 等 Unicode 区块。
|
||||
- ZWJ 非 emoji 序列返回 1;combining marks 返回 1;variation selectors 被吸收不额外占列。
|
||||
- 8 个单元测试覆盖 ASCII、CJK、emoji、ZWJ、combining、variation selector。
|
||||
2. **CJK ambiguous width 配置** ✅
|
||||
- `TerminalFontOptions::cjk_ambiguous_wide` 选项(默认 `true`,遵循 CJK 终端惯例)。
|
||||
- `is_cjk_ambiguous()` 按 UAX #11 完整列举 Ambiguous East Asian Width 字符。
|
||||
- 开启时 ○、△ 等符号按宽度 2 渲染;关闭时按宽度 1。
|
||||
3. **Ligature 可选支持** ✅
|
||||
- `TerminalFontOptions::ligatures` 选项(默认 `false`,终端通常不需要连字)。
|
||||
- `--terminal-font-ligatures` CSS 变量联动 `font-variant-ligatures`。
|
||||
4. **Fallback font 校准** ✅
|
||||
- 默认字体栈新增 Noto Sans CJK SC、Microsoft YaHei、PingFang SC(CJK)和 Apple Color Emoji、Segoe UI Emoji、Noto Color Emoji(emoji)。
|
||||
|
||||
### P9 — WebGL Renderer 工程化深化
|
||||
|
||||
|
||||
Reference in New Issue
Block a user