- dddd.md - 任务文档模板
TeXmacs/langs/encoding/tmuniversaltounicode.scm— 符号 ↔ Unicode 编码表(数据源)lolly/lolly/data/gen_cork_data.py— 由编码表生成编译期常量表lolly/lolly/data/cork_data.inc— 生成物,cork↔UTF-8 编译期查找表(勿手改)lolly/tests/lolly/data/cork_test.cpp— lolly 转换函数单元测试(TDD)TeXmacs/plugins/latex/progs/latex/latex-kbd.scm— LaTeX 命令键盘映射TeXmacs/progs/math/math-kbd.scm— 数学模式快捷键TeXmacs/progs/language/std-symbols.scm— 数学符号语义分组TeXmacs/progs/language/tests/tmuniversaltounicode-test.scm— 单元测试
Scheme 层(符号 ↔ Unicode 契约):
xmake b stem && xmake i stem && xmake r tmuniversaltounicode-testC++ 层(lolly 编译表转换函数 cork_to_utf8 / utf8_to_cork /
strict_cork_to_utf8,TDD):
xmake test "lolly_tests/cork_test"注意:Windows 下 scheme 测试目标运行的是安装目录里的
build/packages/stem/data/bin/MoganSTEM.exe(见 xmake/tests.lua 的
add_target_scheme_test),不是 build/windows/.../MoganSTEM.exe;
xmake b stem 之后必须 xmake i stem 才能把新二进制和资源同步过去。
- 启动 Mogan(
xmake b stem && xmake r stem) - 插入数学公式(
$) - 输入
\进入命令模式(hybrid 模式),输入bowtie并回车,验证插入 ⋈; 输入Join并回车,验证插入 ⨝ - 快捷键
> < var与| var * |插入 ⋈
gf fmt --changed-since=main修正 bowtie 一族符号的底层命名,使其与 LaTeX 命令语义一致:
| LaTeX 命令 | TeXmacs 符号(修正前) | TeXmacs 符号(修正后) | Unicode |
|---|---|---|---|
\bowtie |
<join> |
<bowtie> |
U+22C8 ⋈ |
\Join(latexsym) |
<Bowtie> |
<Join> |
U+2A1D ⨝ |
具体改动:
tmuniversaltounicode.scm:<join>→<bowtie>(#22C8)、<Bowtie>→<Join>(#2A1D), 并删除文件头中以此为「正确示例」的过时注释;- 运行
python3 lolly/lolly/data/gen_cork_data.py重新生成lolly/lolly/data/cork_data.inc(cork↔UTF-8 双向查找表编译进二进制, 仅改 .scm 不重新生成则运行时不生效); latex-kbd.scm:kbd-symbols列表中join/Bowtie改为bowtie/Join, 删除上一版临时加的("bowtie" ... (kbd-insert "<join>"))与("Join" ... (kbd-insert "<Join>"))两条显式映射(改名后kbd-symbols自动生成的\bowtie→<bowtie>、\Join→<Join>即为正确映射);math-kbd.scm:> < var、| var * |两个快捷键改为插入<bowtie>;std-symbols.scm:Times-visible-symbol 组中的<join>改为<bowtie>(Relation-nolim-symbol 组原本就列着<bowtie>/<Join>, 改名前这两个名字没有编码映射、是悬空的)。
- LaTeX 中
\bowtie= U+22C8(⋈,小蝴蝶结),\Join= U+2A1D(⨝,大蝴蝶结), 而底层符号名却是<join>(对应 22C8)与<Bowtie>(对应 2A1D), 大小写命名与 LaTeX 恰好相反; - 改名前
<bowtie>/<Join>没有任何 Unicode 映射:\Join经 kbd 插入的<Join>无法渲染,LaTeX 导入\bowtie得到的<bowtie>也无法渲染; - LaTeX 导出按名字映射(
<foo>→\foo):改名前导出<join>会得到 非标准命令\join,<Bowtie>会被错误导出为 wasysym 的\Bowtie。
- 旧文档中已存在的
<join>/<Bowtie>符号将变为未注册符号(原样透传、不渲染); - wasysym 的
\Bowtie命令(与\Join不同字形)此前碰巧映射到 U+2A1D, 改名后导入得到悬空的<Bowtie>;该命令本身与 JOIN 语义不同,留待后续单独处理; convert-latex-texmacs-drd.scm中\join(tm 专有命令)的导入映射保留不动。
cork↔UTF-8 转换不在运行时读 .scm:lolly/lolly/data/gen_cork_data.py
把 TeXmacs/langs/encoding/*.scm 解析为编译期常量表 cork_data.inc,
由 lolly/lolly/data/cork.cpp 编译进二进制(converter.cpp 中
hashtree_from_dictionary 的运行时加载路径对 Cork↔UTF-8 已不可达——
convert() 直接短路到 lolly;但该路径仍服务于 Cork→SourceCode、
Cork→ASCII、LaTeX↔UTF-8 等其它编码对)。
因此修改编码表后必须重新运行生成脚本并重新编译。
验证重新生成的 diff 语义:新旧 cork_data.inc 的实体表/码位表逐项对比,
唯一差异即 <join>→<bowtie>、<Bowtie>→<Join> 两处改名,值不变,
无其它条目漂移。
- 先在
lolly/tests/lolly/data/cork_test.cpp新增test_named_bowtie_join用例(8 个断言:双向映射 + 旧名透传 + strict 变体); - Red:把
cork_data.inc回滚到修复前版本,新用例如期全部失败; - Green:恢复重新生成的
cork_data.inc,全部通过 (70 用例 / 1177 断言,含存量用例无回归)。
lolly/tests/Data/String/cork_test.cpp(tm_encode/tm_decode 等用例)与
lolly/tests/lolly/data/cork_test.cpp 同名,xmake add_tests 按 basename
注册时后者把前者覆盖,lolly_tests/cork_test 实际只跑后者,前者是从不
运行的死测试。已将前者改名为 tm_cork_test.cpp(内容测的是
Data/String/cork.cpp 的 tm_* 帮助函数),解除遮蔽后两个测试各自独立
运行:tm_cork_test 5 用例 / 25 断言、cork_test 70 用例 / 1177 断言,
全部通过——旧树实现与测试契约一致,无需改实现。
遗留:lolly_tests/file_test 在本机失败是环境相关的既有问题
(依赖 bin/test_only.bat 等工作目录假设),与本任务无关。