我试图理解使用字体Nastaleeq.ttf呈现"بڑ“(乌尔都-Unicode 1576,1681)。
该字符串由GSUB表转换为符号607,460,471,1651。我可以检测到正确的锚-依附的第二个字形下的第一个。但是我找不到一个合适的GSUB子表,它会把第三个字形放在第一个表的上面。在这里,左边的是正确的,右边的是我的程序目前所做的。

而且,我也不太明白GSUB的LookupType 8。有些LookupTable可以使用LookupFlags,包括位8- ignoreMarks.在匹配回溯、输入和查找序列时,是否应该考虑这些标志,即跳过标记?LookupType 8的匹配和应用机制到底是什么?
发布于 2019-03-28 01:19:18
GPOS表的标记定位功能(表中的标记定位功能)通过查找GSUB规则之后应用,实现了这两个标记(小塔和‘beh’的点)的定位。没有GSUB唯一的方法来获得正确的最终定位。必须处理GPOS (在GSUB之后)。
至于ignoreMarks标志:标志并不是特定于GSUB LookupType8的。任何查找(GSUB或GPOS)都可以设置此标志。它告诉布局引擎忽略正在考虑的序列中的标记,以便匹配上下文。这允许仅使用序列的“根”符号定义替换上下文,因此如果上下文规则是A B C,则使用ignoreMarks标志集的查找将与A (mark) B C、A B (mark) C、A B C等匹配。
它在这种字体中起作用,因为首先两个输入字符被分解(在GSUB中)为一个基+标记符号序列,然后重新组合(也是在GSUB中),然后标记被定位(在GPOS中)。
(顺便说一句:为什么要自己进行文本布局,而不是使用现有的布局引擎,比如HarfBuzz或内置于其他操作系统的引擎?)
https://stackoverflow.com/questions/55388207
复制相似问题