mirror of
https://github.com/2234839/web-font.git
synced 2026-09-04 14:53:32 +08:00
fix(gsub): emitCoverage format 选择改精确字节比较(原判据过宽)
emitCoverage 选 format1(list) vs format2(range) 的判据从 rangeCount < n 改为精确字节比较 rangeCount*6 < n*2(即 rangeCount < n/3),与 subsetGPOS emitCoverageFromGids 一致。 format1=4+n*2,format2=4+rangeCount*6。原判据 rangeCount<n 在 rangeCount ∈ [n/3, n)(中等长度 range,avg 1~3 gid/range)时误选 format2 致体积更大。 coverage 的 format1/format2 是等价表达(同一 gid 集合),选 format 不影响渲染。 体积(30 用例 SSIM 全不变,总体积 -168B): - FiraCode woff2 -64B / 初夏纯标点 -32B / otf-思源 ttf -20B。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
1adbf2e0d1
commit
ade5d279a0
@ -376,7 +376,11 @@ function emitCoverage(w: Writer, newGids: number[]): number {
|
||||
i = j + 1;
|
||||
}
|
||||
const rangeCount = rangeStarts.length;
|
||||
if (rangeCount > 0 && rangeCount < n) {
|
||||
/** format 选择按精确字节比较(与 subsetGPOS emitCoverageFromGids 一致):
|
||||
* format1(list)=4+n*2,format2(range)=4+rangeCount*6。format2 更紧凑 ⟺ rangeCount*6 < n*2 ⟺ rangeCount < n/3。
|
||||
* 原判据 rangeCount < n 过宽:rangeCount ∈ [n/3, n)(中等长度 range,avg 1~3 gid/range)时误选 format2 致体积更大。
|
||||
* coverage 的 format1/format2 是等价表达(同一 gid 集合),选 format 不影响渲染,纯体积优化。 */
|
||||
if (rangeCount > 0 && rangeCount * 6 < n * 2) {
|
||||
/** format2 区间更紧凑 */
|
||||
w.writeUint16(COV_RANGE);
|
||||
w.writeUint16(rangeCount);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user