如何在 OpenType GPOS 查找格式 4.1 中找到基本字符?

How to find the base character in OpenType GPOS lookup format 4.1?

OpenType documentation 声明对于类型 4.1(标记到基础附件定位)的 GPOS 查找,应用程序必须执行以下操作:

To identify the base glyph that combines with a mark, the text-processing client must look backward in the glyph string from the mark to the preceding base glyph.

但我需要回头看多远?这总是前面的字符吗?或者我是否需要跳过标记覆盖率 table 中的所有字形?还是回去,直到我在base coverage中找到一个字形table?

MarkBasePosFormat1 table 有一个基础覆盖子table,它指定了一组要匹配的字形。在确定给定的查找是否适用时,您希望匹配以基本覆盖率 subtable.

中指定的字形之一开头的字形序列

从另一个方向,从标记向后,您将跳过在 GDEF table 的 Glyph Class Definition subtable 中标识为标记字形的任何字形。当您到达候选字形时,您需要检查它是否包含在基础覆盖范围内 table.

我看到 Harfbuzz implementation 在向后扫描时检查了一些其他细节,您可能需要检查一下:在 MarkBasePosFormat1 结构中查找 apply 方法。 (我并不是说 Harfbuzz 是定义规范意图的参考实现;但它被广泛使用并且作为开源提供。)