contract: FontEntry 加 subfamily,family 改用 name 表的排版族名

注册表值名不是字体身份。实测阿里巴巴普惠体 H:
  注册表「阿里巴巴普惠体-H」、nameID 1「阿里巴巴普惠体 H」— 浏览器都解析不到
  nameID 16「阿里巴巴普惠体」+ nameID 17「Heavy」— 能解析

subfamily 退回 nameID 2 是有损的:该族五个字重的 nameID 2 全是 Regular。

(cherry picked from commit 44b98102741af90620871156d60edf54326df78d)
This commit is contained in:
Jz0ojiang
2026-09-04 16:38:56 +08:00
committed by im0o
parent 5b46e84a44
commit 9a60754401
+20 -1
View File
@@ -32,8 +32,27 @@ export interface CanvasSize {
export interface FontEntry {
/** 稳定 id,用于取文件;不要假设它等于文件名。 */
id: string;
/** 用于 CSS font-family 和界面显示的字族名,如 "阿里巴巴普惠体-H"。 */
/**
* 排版字族名,用作 CSS `font-family`。来源是字体文件 `name` 表的 **nameID 16**,
* 缺失才退回 nameID 1。**不是注册表的值名**——那是安装程序起的标签,不是字体身份。
*
* 反例(2026-09-04 实测):阿里巴巴普惠体 H 的注册表值名是「阿里巴巴普惠体-H」,
* nameID 1 是「阿里巴巴普惠体 H」,两者在浏览器里都解析不到;
* 只有 nameID 16 的「阿里巴巴普惠体」能解析。
*
* `name` 表里同一个 nameID 有中英两份记录(langID 2052 / 1033)。
* 取中文那份,没有中文再取英文——本机两者都能解析,中文在下拉里更好认。
*/
family: string;
/**
* 样式名,如 `Heavy` / `Bold` / `Regular` / `斜体`。来源是 **nameID 17**,
* 缺失才退回 nameID 2。用来在下拉里区分同族多字重,并映射到 `fontWeight` / `fontStyle`。
*
* **退回 nameID 2 是有损的**:阿里巴巴普惠体五个字重的 nameID 2 全是 `Regular`,
* 只有 nameID 17 才区分得出 Heavy / Bold / Medium / Regular / Light。
* 退回时同族多档会塌成一个,界面上要能看出这种情况。
*/
subfamily: string;
/** 字体文件绝对路径(仅供调试与配方记录,前端不直接读)。 */
path: string;
/** 文件后缀,小写不带点:ttf / otf / ttc / woff2 … */