OpenType GPOS LookupType 8 - 跳过标记

OpenType GPOS LookupType 8 - skipping marks

我正在尝试理解使用字体 Jameel_Noori_Nastaleeq.ttf 呈现的“بڑ”(乌尔都语 - Unicode 1576、1681)。

字符串被 GSUB table 转换为字形 [607, 460, 471, 1651]。我可以在第一个字形下检测到第二个字形的正确锚点附件。但是我找不到合适的 GSUB subtable,它会将第三个字形定位在第一个字形之上。在这里,左边的是正确的,右边的是我的程序此刻所做的。

另外,我不太了解GSUB的LookupType 8。一些 LookupTable 可以有 LookupFlags,包括一个位 8 - ignoreMarks。在匹配 Backtrack、Input 和 Lookahead 序列时,我是否应该考虑这些标志,即跳过标记? LookupType 8的匹配和应用机制到底是什么?

两个标记('beh' 的小 tah 和圆点)的定位是通过 GPOS[ 的标记定位 ('mark') 功能中的查找完成的 table,在 应用 GSUB 规则后应用 。没有 GSUB 唯一的方法来获得正确的最终定位。必须处理 GPOS(在 GSUB 之后)。

关于 ignoreMarks 标志:该标志并非特定于 GSUB LookupType8。任何查找(GSUB 或 GPOS)都可以设置此标志。它告诉布局引擎忽略正在考虑的序列中的标记,以匹配上下文。这允许仅使用序列的 "root" 字形定义替换上下文,因此如果上下文规则是 A B C,设置了 ignoreMarks 标志的查找将匹配 A (mark) B CA B (mark) C , A B C, 等等

它在这个字体中发挥作用,因为首先两个输入字符被分解(在 GSUB 中)为一系列基本 + 标记字形,然后重新组合(也在 GSUB 中),然后标记被定位(在GPOS)。

(顺便说一句:你为​​什么要自己进行文本布局,而不是使用现有的布局引擎,例如 HarfBuzz 或其他操作系统内置的引擎?)