# 'loca'表 (glyph location table)
# 一般表信息
“loca”表存储相对于“glyf”表开头的字体中字形位置的偏移量。 其目的是提供对特定字符数据的快速访问。 例如,在标准 Mac 字形排序中,字符 A 是字体中的第 76 个字形。 'loca' 表存储从 'glyf' 表的开头到可以找到每个字形数据的位置的偏移量。
表 32 显示了具有 n 个字形的字体的示例'loca'表。该表存储从字形数据开始到索引字形开始的偏移量。 请注意,字形长度列实际上并未存储在表中,但可以使用表提供的数据进行计算。 字形 0 是字体中的第一个字形,与字形数据的开头有 0 个字的偏移量。 它的长度可以通过从表中下一个字形的偏移量中减去它的偏移量来计算。 为了能够计算最后一个字形元素的长度,在指向最后一个有效索引的偏移量之后有一个额外的条目。 该索引指向字形数据的末尾。
偏移量的大小取决于使用的格式。这在字体标题('head')表中指定。 在短格式中,计算的是单词。 100 的偏移量表示 200 个字节(这里指的是短格式)。在长格式中,计算的是字节数。 100 的偏移量表示 100 个字节。
表32 'loca'例子
| 字形索引 | 偏移 | 自行长度 |
|---|---|---|
| 0 | 0 | 100 |
| 1 | 100 | 150 |
| 2 | 250 | |
| ... | ... | ... |
| n-1 | 1170 | 120 |
| 特殊的 | 1290 |
根据定义,任何 TrueType 字体中的第一个字形必须是 MISSING CHARACTER GLYPH。 因此,索引零始终指向在字体中未找到请求字符时显示的字形。 在 Mac 上,MISSING CHARACTER GLYPH 通常由一个空白框表示。 如果字体不包含缺失字符的轮廓,则第一个和第二个偏移量应该具有相同的值。 这也适用于没有轮廓的任何其他字符,例如空格字符。 如果字形没有轮廓,则其长度应为零。
此表有两个版本,短版和长版。 使用的版本在 indexToLocFormat 字段的 Font Header ('head') 表中指定。 长偏移或短偏移的选择取决于最大可能偏移距离。
该表是一个包含 n 个偏移量的数组,其中 n 是字体中字形的数量加一(对于上面提到的额外条目)。 任何特定字形的实际偏移量除以 2。字体中的字形数量必须存储在最大配置文件“maxp”表中。
字形数据始终是字对齐的。
表 33:'loca' 简短版本
| 类型 | 名称 | 描述 |
|---|---|---|
| uint16 | offsets[n] | 实际本地偏移值以 ➗2 形式存储着。n 的值是字体中的字形数量 + 1。字体中的字形数量可在最大配置文件表中找到。 |
表 34:'local' 长版本
| 类型 | 名称 | 描述 |
|---|---|---|
| uint16 | offsets[n] | 存储实际的本地偏移量值。 n 的值是字体中的字形数量 + 1。字体中的字形数量可在最大配置文件表中找到。 |
# 平台特定信息
'loca' 表仅用于具有 TrueType 轮廓的字体(即 'glyf' 表)。 没有 TrueType 轮廓的字体不需要“位置”表。
# 依赖
'loca' 表最密切地依赖于 'glyf' 表的内容,反之亦然。 除非同时对 'glyf' 表进行了适当的更改,否则不得更改 'loca' 表。
“loca”表中条目的大小必须适合'head'表的 indexToLocFormat 字段的值。 条目数必须与'maxp'表的 numGlyphs 字段相同。
# 工具
'loca' 表可以用 ftxdumperfuser 转储和融合。 但是,单独编辑 'loca' 表可能是个坏主意。 每当修改 'glyf' 表时,ftxdumperfuser 都会自动更新 'loca' 和 'head' 表。