OpenType链式上下文替换语义规则解析及异常问题咨询
OpenType链式上下文替换(Chained Contexts Substitutions)语义规则疑问
我始终无法理解OpenType中链式上下文替换的语义规则,以下是我编写的简化版Feature文件代码:
@MarkSet0=[\A \D]; @MarkSet1=[\A \B]; lookup Lookup0 { lookupflag UseMarkFilteringSet @MarkSet0; sub \A \D by \C; } Lookup0; lookup Lookup1 { lookupflag 0; sub \B \B by \E; } Lookup1; lookup ligaLookup2 { lookupflag UseMarkFilteringSet @MarkSet1; sub [\A]'lookup Lookup0 [\B]'lookup Lookup1; } ligaLookup2;
仅ligaLookup2归属某feature。我预期输入ABBD会被替换为CE,但在Crowbar等OpenType工具及浏览器中实际结果为CBB;输入ABBG得到AEG,Lookup0的替换似乎阻止了Lookup1对中间BB的修改。
两年后我使用新版工具及不同方式创建字体测试,仍出现相同行为。完整Feature文件如下:
@MarkSet0=[D]; @MarkSet1=[A B]; lookup Recur1 { lookupflag UseMarkFilteringSet @MarkSet0; sub A D by C; } Recur1; lookup Recur2 { lookupflag 0; sub B B by E; } Recur2; lookup TopLevel { lookupflag UseMarkFilteringSet @MarkSet1; sub A' lookup Recur1 B' lookup Recur2; } TopLevel; lookup ToBase { lookupflag 0; sub A by P; sub B by Q; sub C by R; sub D by S; sub E by T; } ToBase; feature liga { script DFLT; language dflt; lookup TopLevel; lookup ToBase; } liga;
通过fontTools.feaLib.builder构建字体后,ABBD渲染为RQQ,ABBA渲染为PTP。现咨询该异常是否可通过链式上下文替换的通用语义规则解释。
内容的提问来源于stack exchange,提问作者Mark-Jan Nederhof
相关产品推荐
相关产品推荐

