關(guān)鍵字 sub 用于聲明替換(substitute)字形。正如所支持的替換類型章節(jié)所述,有幾種不同的字形替換類型。替換字形只能在查詢(lookup)中聲明,不能在特征(feature)中直接聲明替換。每個查詢只能有一種類型的替換,這意味著如果您想在單個特征中使用幾種替換類型,必須聲明多個查詢。
聲明單個(類型 1)替換
lookup MyLookupTable {
sub A -> a.smcp;
}
聲明多個(類型 2)替換
lookup MyLookupTable {
sub ffi -> f f i;
}
聲明替代式(類型 3)替換
lookup MyLookupTable {
sub asterisk -> [asterisk asteriskmath uni2051 uni2042 uni203B uni273B];
}
聲明連字(類型 4)替換
lookup MyLookupTable {
sub f f i -> ffi;
}
聲明鏈?zhǔn)缴舷挛?類型 6)替換
lookup MyLookupTable {
context (@<backtrackclasses>) @<inputclasses (@<lookaheadclasses);
sub 0 <substitution table>;
}
替換聲明出現(xiàn)的順序,也是支持 OpenType 布局特征的應(yīng)用程序?qū)ζ溥M行處理的順序。這意味著在連字替換情況下:
lookup MyLookupTable {
sub f i -> fi;
sub f f i -> ffi;
}
上面語法與下面語法的效果不一樣:
lookup MyLookupTable {
sub f f i -> ffi;
sub f i -> fi;
}
并且,后者的聲明將得到正確的結(jié)果。為什么呢?在前者示例中,當(dāng)遇到“f i”序列時,就先行以“fi”字符進行了替換,不再匹配“f f i”序列。在后者的示例中,“f f i”在“f i”之前進行匹配,結(jié)果與預(yù)期相一致。FontCreator 會自動處理正確的順序,因此也無需擔(dān)心。