【发布时间】:2019-12-10 23:33:16
【问题描述】:
根据Apple's Reference manual for TrueType字体文件,共有45种不同类型的字体表。检查我在我的系统上安装的那些 ttf,我确定这些文件中实际存在的表的数量范围从每个文件 12 到最多 22 个字体表。
进一步查看真类型字体文件的结构,它从以下信息开始:
uint32 scaler type 表示用于光栅化此字体的 OFA 缩放器的标签;有关详细信息,请参阅下面有关缩放器类型的说明。
uint16 numTables 表数
uint16 searchRange(2 uint16 entrySelector log2(2的最大幂 uint16 rangeShift numTables*16-searchRange
这让我们有理由相信,对于预先计算但又完全是多余的字段rangeShift、entrySelector、searchRange,会有共同的需求。它甚至声明它们被用于对字体表列表进行二进制搜索:
searchRange、entrySelector 和 rangeShift 的条目用于 便于对后面的表目录进行快速二进制搜索 (来源https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6.html)
考虑添加这些字段(无论如何都可以从numTables 即时计算)的正当理由是确实存在大量字体表。
因此,我的问题是,尽管经过我的测试,确实存在确实存在合理预期真实类型字体具有更大(例如>1000)数量的表格的情况,这意味着问题是否完全可能45 种不同类型的字体表中的任何一种都可以出现多次?
它列出的表格如下。
- “acnt”(重音附件)表
- “ankr”(锚点)表
- “avar”(轴变化)表
- “bdat”(位图数据)表
- “bhed”(位图字体标题)表
- 'bloc'(位图位置)表
- “bsln”(基线)表
- “cmap”(字符代码映射)表
- “cvar”(CVT 变体)表
- 'cvt'(控制值)表
- “EBSC”(嵌入式位图缩放控制)表
- “fdsc”(字体描述符)表
- “壮举”(布局功能)表
- “fmtx”(字体规格)表
- “喜欢”(字体系列兼容性)表
- “fpgm”(字体程序)表
- “fvar”(字体变体)表
- “gasp”(网格拟合和扫描转换过程)表
- “glyf”(字形轮廓)表
- “gvar”(字形变体)表
- “hdmx”(水平设备指标)表
- 'head'(字体标题)表
- “hhea”(水平标题)表
- “hmtx”(水平指标)表
- 'just'(理由)表
- “kern”(字距调整)表
- “kerx”(扩展字距调整)表
- “lcar”(连字插入符号)表
- 'loca'(字形位置)表
- “ltag”(语言标签)表
- “maxp”(最大配置文件)表
- “元”(元数据)表
- “morx”(扩展变形)表
- 'name'(名称)表
- “opbd”(光学边界)表
- “OS/2”(兼容性)表
- “post”(字形名称和 PostScript 兼容性)表
- “准备”(控制价值计划)表
- “prop”(属性)表
- “sbix”(扩展位图)表
- “trak”(跟踪)表
- 'vhea'(垂直标题)表
- “vmtx”(垂直指标)表
- “外部参照”(交叉引用)表
- “Zapf”(字形参考)表
似乎“字体表”允许其中任意“扩展”,例如有一个标记为FFTM的字体表,
"[...] 是 FontForge 独有的。它包含三个时间戳:第一个 FontForge 的版本日期,然后是生成字体的时间,以及生成字体的时间 字体已创建。我在这里描述它的格式。”
https://fontforge.github.io/TrueOpenTables.html
即使是像FFTM 这样偶尔添加的表格似乎也不值得searchRange 等字段。
【问题讨论】:
标签: fonts truetype file-format