2e0f66a07e
字库扩充(批2页面预置, task-4/道B): - ui_cn_chars.txt 119→179 字(CJK 176 + 符号 ▶/,/:),含 ASCII 共 274 字形 - +60 字: Ⅰ Ⅱ Ⅲ 段 延 投 退 跳 闸 零 频 荷 负 低 过 电 一 二 次 位 公 出 回 外 部 度 温 态 状 总 接 显 示 最 近 未 标 欠 闭 锁 长 间 障 配 道 重 载 返 年 月 分 秒 合 已 请 求 确 取 消 越 依据 = 页面补齐规划/页面扩充详细方案两篇规划中出现的页面显示串; 待拍板的厂家设置支用字(厂/家/恢/调/试)不入 - Ⅰ/Ⅱ/Ⅲ 宋体有字形(simsun face0 cmap 实测 HAS)且正常入字体,罗马数字 无需任何工具链兜底 make_font.py 修复(本次扩字暴露的真缺陷): - LVGL get_glyph_dsc_id() 线性扫描 cmaps[]、首个包含码位的 range 即返回: Ⅰ(U+2160) 使稀疏 range 起点 0x4E09→0x2160,把 U+25B6 ▶ 单码位补回条目 吞进宽 range → 模拟器箭头全变方框(菜单 658 px 差异);旧 verify_coverage 按"进了任一 range 即覆盖"判定,全绿照不出解析路径倒置 - 修复: _insert_cmap_entry() 把补回条目插到包含它的 range 之前; _cmap_lookup_gid() 可达性守卫,可达即跳合并(全角逗号走稀疏列表,不再 追加永远不可达的死条目); verify_coverage() 改按首命中语义 验证(全绿): - font-regen 四步(extract→并回 KEEP_EXTRA→make_font→diff);仓库外沙箱 dry-run + 确定性: 沙箱/仓库产物 sha256 一致(26e519db…) - 逐码位结构对账: added=60 / removed=0 / 保留字形位图字节零差异 / 度量一致(multiset 差 = 新字身) - font-charset PASS(60 未知冗余 WARN = 预置字,批2接线后自然转在用) - 模拟器菜单 8 状态 + 内容页 11 页黄金参考与旧字体逐字节一致(箭头恢复); ref/ 基线无变化,故无黄金参考更新提交 - @build 0 Error 0 Warning; A/B 同树构建: RO-data +1528 B, RW/ZI(RAM) 0 gate: only mem-budget/mem-numbers pending lead ledger backfill - pre-commit --all-files 实测: 仅这两条失败(台账受管区/内存文档数字 vs .map 漂移; 根因是 RO-data +1528 B 的 Flash 增量, RAM 无变化); 其余 38 钩子全绿(font-charset/ui-golden/cppcheck/编码规范/单测族均过) - 修复手段 ram_baseline.py --write / check_mem_numbers.py --write 均写 docs/内存管理/**(Lead 单写者域), 本分支按裁决不代跑, 请合并后回填 - 手工自查: 改动 8 文件 BOM/CR/U+FFFD 与各自原状一致(全 LF 无 BOM), 字体产物纯 ASCII, make_font.py 中文仅在注释与打印, 无字面量改动
tools/font_gen/ — 中文字库生成
从字符集清单生成 LVGL 用的中文字库 C 文件(子集化,只嵌入用到的汉字以节省 Flash)。
脚本一览
| 脚本 | 作用 |
|---|---|
extract_cn.py |
提取汉字:扫描 UI 源码的字符串字面量,输出字符集清单 ui_cn_chars.txt |
make_font.py |
生成字库:按字符集从 TTF 生成 Drivers/BSP/UI/ui_font_cn_12.c |
使用方式
# 新增含汉字的 UI 文案后:先提取字符集,再生成字库
& '.venv\Scripts\python.exe' tools/font_gen/extract_cn.py
& '.venv\Scripts\python.exe' tools/font_gen/make_font.py
⚠️ 注意
- 含新汉字的 UI 文案提交前必须重跑(走
font-regenskill)——否则新字显示为空白/方块 - 产物
ui_font_cn_12.c带 UTF-8 BOM,勿手改(由脚本生成) - 字库大小直接影响 Flash 占用,只嵌入实际使用的字符
- 依赖
fontTools/Pillow(已装在.venv)
相关文档
docs/UI设计/UI_中文字体生成与配置.mddocs/UI设计/UI_设计架构.md