如何在CFF字体文件中组织编码和字符集表?

问题描述

CFF规范的第11章至第13章给出了文件中组织哪些编码和字符集数据的粗略描述。 CFF Specification。这是一些问题。

  1. 考虑到可能存在多字体文件,并且以每种字体方式访问字符串,因此相应的索引也仅对每种字体有意义。但是,文件最多只有一种编码和一个字符集表?如果是这样,字形索引与字符串的索引如何对应?如果不是,它们是否在访问它们的TopDict中多次出现? (已解决。请参见下面的答案。)

  2. 似乎字符集为每个字形命名。编码怎么样?每个数组元素中存储的Card8数据是什么?鉴于其256个限制,编码是否会受到很大限制?为何以补充格式通过SID传输数据?通过编码(以混合字符串/代码方式)访问字形的设计方法是什么?以及为什么这些数据字符串在使用预定义编码时又如此?

谢谢

解决方法

我可以从实际的角度做出回应:

关于#1,问题似乎是有关多个CFF FontSet的,在OpenType / CFF字体的上下文中这是一个不起眼的问题:仅允许/识别一个CFF FontSet。

关于#2,在OpenType / CFF字体的情况下,编码问题在某种程度上也没有引起关注,因为编码是由“ cmap”表施加的。

总而言之,独立的CFF实际上是一文不值,这使多个CFF字体集和内置CFF编码的任何实际或可感知的收益无效。

,

以下是问题1的答案:

以为单个字体文件中只有一个TopDict是一个错误。 TopDict是一个索引结构,其中可能包含FontSet中每种字体的多个顶层表。因此,encodingcharset的定义自然是每个字体的。有点令人困惑的是,在规范的数据布局中,NameTopDict没有标记为“每字体”。参见第8节。

这包含FontSet中所有字体的顶级DICT。 存储在INDEX结构中。该索引中包含的对象 对应于名称INDEX中的顺序和编号。每 对象是与顶级相对应的DICT结构 PostScript字体的字典。字体由以下条目标识 名称INDEX及其数据可通过相应的顶部访问 DICT。