mirror of
https://github.com/2234839/web-font.git
synced 2026-09-04 23:02:27 +08:00
fonteditor-core 对含 idRangeOffset 的 CID cmap 解析有 bug,产出 gid 错乱子集(SSIM 0.93~0.97)。 新增独立 otf-subset + cff-subset,直接重建 CFF/cmap/hmtx,透传 charstring。 核心修复: 1. cff-subset 透传各 FD 的 Local Subr INDEX(op 19 指向)+ patch op19 新偏移。 原仅透传 Private DICT 字节未带 Local Subr INDEX,思源等字形用 callsubr 引用本地 subr, 子集 op19 指向越界致 OTS "Failed to parse Top DICT Data" 拒绝加载。 2. otf-subset 接入 subsetGSUB/subsetGPOS 按 subsetGids 做 gid 重映射。 原透传原始 GSUB/GPOS 字节 gid 未重映射,coverage 引用旧 gid 指向错字, 致 shaping 把字符替换成 .notdef(思源 otf SSIM 0.623,洪/法等字变空白)。 OTF 与 TTF 的 GSUB/GPOS 表结构相同,字节级子集化器可直接复用。 结果:思源 otf OTS 拒绝→可加载,SSIM 0.623→0.953,白狐 otf SSIM 1.0, 逐字 charstring 字节级与原始一致,渲染像素级一致(5 种独立验证 diff=0)。 所有非 otf 用例无回归。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>