# “xref”表
# 简介
“xref”(交叉引用表)表由 Apple 的字体工具 ftxdumperfuser 和 ftxenhancer 使用。ftxenhancer 允许字体设计人员使用符号名称生成“just”、“kern”和“morx”表。但是,这些名称不由表本身使用,因此在运行 ftxenhancer 时会丢失。“xref”表用于存储这些符号名称。
该表以标题开头,其结构如下:
'xref' 表
| 类型 | 名称 | 描述 |
|---|---|---|
| uint32_t | version | 表格格式的版本,当前为 1 |
| uint32_t | flags | 标志,当前未使用,设置为 0 |
| uint32_t | numEntries | 表格中的条目数 |
| uint32_t | stringOffset | 从表格开头到字符串数据的偏移量 |
标题后面跟着一些条目,这些条目将字体表中的数据映射到字符串:
‘xref’ 表条目
| 类型 | 名称 | 描述 |
|---|---|---|
| FourCharCode | tableTag | 使用此条目的表的标签(当前为 'just'、'kerx' 或 'morx') |
| int16_t | chainIndex | 与此名称对应的 'morx' 链 |
| int16_t | subtableIndex | 与此名称对应的子表的索引 |
| int16_t | tableType | 与此名称对应的对象的类型。值为 0(类名)、1(状态名)、2(条目/转换名)、3(操作名)、4(列类名)和 5(行类名)。 |
| int16_t | tableIndex | 与此名称对应的对象的索引 |
| uint16_t | stringOffset | 从字符串数据的开头到此名称的偏移量 |
| uint16_t | stringLength | 此名称的字符串数据的长度 |
对于 chainIndex、subtableIndex、tableType 和 tableIndex 字段,都可以使用 -1 作为通配符,尽管这很少适用。
字符串数据采用 UTF-8 编码。索引以零为基础。
例如,假设字体的“morx”表有一个带有四个子表的链。第四个子表是一个上下文子表,除了标准的四个类之外,还定义了两个类,这两个子表的第一个名为“myClass”。条目 { tableTag:'morx', chainIndex:0, subtableIndex:3, tableType:0, tableIndex:4 }。偏移量和长度将指示字节 6D 79 43 6C 61 73 73。请注意,tableIndex 字段会计算四个隐式类,即使它们具有标准名称。同样,状态表的数据会计算两个隐式状态“StartOfText”和“StartOfLine”。
# 警告
“xref”表通常仅用于生产目的,因此应从运输字体中删除。