You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 08:12:58