557f1d042a
机器面先定真值,再逐处对齐文档;带日期戳的取数行只加「当时」不改数。 六个数(每条两个以上独立机器源互证) - 主机单测套数 41 → 44(find test/host -name run_unit_test.py / 覆盖率总闸 --list / 基线 modules 条目三源一致;目录数 46 = 44 + common + __pycache__,两个数分开写) - 有专属钩子 22 根(YAML 解析 -unit-test 后缀)⇒ 无专属钩子 19 → 22 套,并把 wave_ring / wave_store / wave_trig 逐名列进门禁台账 §6 第 4 条,18 / 19 / 22 三个数 改标「裁定当时 / 2026-10-28 / 2026-10-29 现值」 - 内容页黄金参考 60 → 66 张(simulator/tests/ref/shot_*.bin 实数 / PAGES 条目 66, 其中 2 个分页 → 页面 64);钩子显示名与门禁索引表成对改 - 菜单 42 → 43 行(9 菜单 + 34 叶)、已绑 28 → 30、未绑 4(ui_menu_tab.h 宏 + g_menu_tab[] 末行 / ui_page_registry.h 的 UI_PAGE_MAP_COUNT + #page= 计数剔示例行) - 中文字库 218 → 224 唯一字、313 → 319 字形(清单唯一码点 / .bitmap_index 条目数 含 notdef;224 + 95 = 319 成立) - 钩子口径 52 声明 / 49 提交期实跑:只核不改,核对 AGENTS 与 YAML 解析一致 Lead 追加四处(wave-algo 按「AGENTS 只核不改」的指令交回我裁的部分) - AGENTS.md 提交门禁节:41 套 → 44 套(两处)、19 套 → 22 套(两处,并把「与录波 三套」写进括注)、ui-golden 条目 60 张 → 66 张;52 / 49 的口径叙述与历史括号原样 - scripts/board_ui_nav.py 的自述 docstring:60 张 → 66 张 - test/host/sys_log_mcu/sys_log_mcu_test.c 注释:全量门禁 41 套 → 44 套(纯注释) - 产品需求 FR-UI-2:需求原文「42 节点」保留不动,在实现行注「2026-10-29 实到 43 节点,42 是 V0.1 立项数」——需求基线不由实现方回改 刻意不动的(冻结面) - 带日期戳的实测行(自动化测试流程、字库差集门禁、覆盖率口径里的 67 s / 25 s / 45 s / ~105 s 四个耗时)、保留变更记录的文档历史行、页面补齐规划里自写「完成即 冻结」的立项快照表、2026-10-28 那份分工说明、级联框总览.svg(42 节点时代所画, 无生成器,重画另开一笔)、三处伪命中(字体数据行、芯片手册、m2/m3 数据目录) 自查(真实退出码):check_doc_links.py --all RC=0(215 个文档、章节引用可判定 80 %, 合并后第一次全库零红);check_generated_fresh.py RC=0(22 张图 17 一致 / 5 条既有 BASELINE 豁免,生成物零改动);编号门禁 add 后复扫 RC=0;17 + 4 个改动文件字节体检 全绿(无 BOM / LF / 无 U+FFFD / 无尾随空白 / 单个尾换行)。
3.2 KiB
3.2 KiB
name, description, whenToUse
| name | description | whenToUse |
|---|---|---|
| font-regen | 重生成中文子集字体 ui_font_cn_12(extract_cn 提取 → make_font 生成 → diff 检查,固定 4 步,.venv 解释器)。 | UI 代码新增中文文案、用户报告屏幕缺字/空白块、或提交任何含新汉字的 UI 字符串之前。 |
中文字体重生成
本工程唯一字体 ui_font_cn_12(宋体 12px 1bpp 子集,MCU/模拟器双端共用)。缺字渲染为空白——新增汉字必须走以下固定顺序,不得跳过或调换。详细原理见 docs/UI设计/UI_中文字体生成与配置.md。
固定顺序(仓库根目录执行)
# 1. 代码落库(新界面字符串已写入 ui_menu.c / ui_content_page.c 等 UI 源码)
# 2. 提取字符集(纯标准库,任意 python3 均可)
python tools/font_gen/extract_cn.py # 扫描 UI 源码字符串 → 仓库根 ui_cn_chars.txt
# ⚠ extract 只认"当前源码字面量",会把清单里 KEEP_EXTRA 那批**刻意保留字**(历史落盘
# 记录用字,逐条理由见 check_font_charset.py 的 KEEP_EXTRA 字典——不在本文列举,列举必
# 然过期)从 txt 洗掉:跑 make_font 前必须把它们并回 ui_cn_chars.txt,否则 font-charset
# 门禁 A 段 FAIL 并逐字打印保留理由;事故路径实名登记见 docs/门禁说明/font-charset.md §6.1
# 3. 生成字体(需 fontTools,一律用 .venv;宋体 .ttc 的 face0 抽取与 ▶ 箭头补回均自动完成,幂等)
.venv\Scripts\python.exe tools/font_gen/make_font.py
# 变体:--bpp 2(宋体细笔画发虚时)/ --font C:/path/to/font.ttf(换字体)
# 4. diff 检查:新增字在位、旧字不变、生成物 Opts 行字符集与预期一致
提交清单
ui_cn_chars.txt(仓库根)+ Drivers/BSP/UI/ui_font_cn_12.c 随代码一起提交,缺一个都会让另一端/下次构建字体与字集不一致。
坑
- 不要用 PATH 默认
python(msys64,无 fonttools)跑 make_font.py;.venv缺失时按 AGENTS.md「Python 环境」重建 requirements.txt必须纯 ASCII(Windows 下 pip 按 GBK 解码,中文注释 → UnicodeDecodeError)- 生僻字(宋体可能无字形)→ 写码前先手动验证字形,避免"代码写完才发现是空白"
- 生成成功后跑
ui-verifyskill 全回归;黄金参考因字形变化而 FAIL 属预期 →check_content_pages.py --update刷新 - 字数变化时同步更新文档中的字符集计数(当前 224 汉字/符号 + ASCII 0x20-0x7E,共 319 字形;2026-10-29 实测:
ui_cn_chars.txt唯一码点 224、ui_font_cn_12.c的.bitmap_index320 条含 notdef → 319 字形。历史上 119/214 → 179/274 → 185/280 → 218/313 均为当时快照):UI_中文字体生成与配置.md、UI_界面制作流程.mdC3、UI_设计架构.md、simulator/README.md已知坑 #4 - 新增字低于既有最小码位(如 Ⅰ U+2160)会下探稀疏 cmap 起点并吞掉单码位补回条目(实测 ▶ 箭头全变方框而旧版 coverage 全绿)——
make_font.py(2026-10-25 起)按 LVGL 首命中语义插入/守卫/校验,扩字后模拟器像素回归必跑