OpenType GPOS LookupType 8 - 跳过标记

问题描述 投票:0回答:1

我试图用字体Jameel_Noori_Nastaleeq.ttf来理解“بڑ”(乌尔都语 - Unicode 1576,1681)的渲染。

GSUB表将字符串转换为字形[607,460,471,1651]。我可以在第一个字形下检测到第二个字形的正确锚定附件。但是我找不到合适的GSUB子表,它会将第三个字形放在第一个字形的顶部。在这里,左边的是正确的,右边的是我的程序目前所做的。

enter image description here

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

fonts true-type-fonts opentype
1个回答
1
投票

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

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.