如果 OpenType 中的 Local 和 Global Subr INDEX 基本上是可重用的组件

Posted

技术标签:

【中文标题】如果 OpenType 中的 Local 和 Global Subr INDEX 基本上是可重用的组件【英文标题】:If Local and Global Subr INDEXes in OpenType are basically reusable components 【发布时间】:2019-06-11 08:37:02 【问题描述】:

我无法从description for the CFF2 table 看出,但它似乎暗示您的字体可以具有可重复使用的组件。

子例程(“subr”)通常是一个 CharString 字节序列,代表一个子程序,在字体的 CharString 数据中在多个地方使用。一个 subr 可以存储一次,但可以通过使用调用子例程运算符从一个或多个 CharStrings 中被多次引用,该运算符将要调用的 subr 的编号作为操作数。

我的问题是这些到底是什么,如果这意味着您可以将CharString 定义为基本上是一个模块或组件,这将缩小您的字体文件大小并使事情更加精致。

如果是这样,我想知道拥有本地子程序和全局子程序的目的是什么。如果真的只是模块化,我看不出这种隔离级别有什么好处。

嗯,我想这就是chapter 8 中描述的内容。只是想澄清一下。

【问题讨论】:

只需将其发布在“字体技术”部分。我发现 Type1 文档唯一需要的是了解蓝色区域的用途,然后立即说“哦。所以它们无关紧要”,解释了为什么 Type2 文档不涵盖它们:它们只对遗留系统很重要,不适用于普通的现代 OpenType-conformant 引擎。 CFF/Type2 技术说明解释了包括 DICT 格式在内的所有其他内容,CFF2 文档解释了 Type2 的哪些位被删除(最终) 【参考方案1】:

它们听起来是这样的:它们允许您将用于定义字形的任何字节序列定义为子例程,以便您可以在字符字符串中的任何位置引用它,包括其他子例程。它既是一种压缩形式,也是一种通过允许将任意数据有效地用作宏而不是仅允许与整个字形组合来实现更广泛的字形组合的方法。

此外,在增加压缩和帮助子程序组织方面存在全局与局部区别:如果您根据多个 DICT 对象组织 CFF/CFF2 字体数据,那么子程序 pas 可以包括首先执行全局传递, 从字体中的所有字典中查找字形共享的所有字节子字符串,然后您可以根据这些 DICT 结构中的子字符串进一步分别压缩每个 DICT。

还要注意,Type1 规范在此时完全没有意义:Type1 字体在几年前就被弃用了,甚至 Adob​​e 也不再制造它们(事实上,当规范最终确定时,他们非常积极地将所有字体切换到 Type2 )。对于您的规范咨询,您需要 "the compact font format" 和 "the Type2 Charstring format" 技术说明,以及关于 CFF2 和 CFF2 的新字符字符串格式之间差异的 OpenType 1.8 文档。

您可能还想在将来在http://typedrawers.com 上提出类似的问题,这是一个排版师和排版工程师进行问答的专用空间。

【讨论】:

以上是关于如果 OpenType 中的 Local 和 Global Subr INDEX 基本上是可重用的组件的主要内容,如果未能解决你的问题,请参考以下文章

我需要解析 OpenType 文件中的 GSUB 和 GPOS 表。有没有可用的软件可以做到这一点?

使用 Earcut 对 OpenType.js 中的路径数据进行三角测量

没有字体功能设置的CSS中的OpenType大写间距(cpsp)?

过时的实现如何优雅地处理新版本的 OpenType 字体?

Qt 支持哪些 OpenType 排版功能?

opentype.js 和 maker.js 为文本呈现不正确的路径