Lookup Type 4 — Ligature Substitution
Ligature Substitution は、2 つ以上のグリフ・グリフクラスを 1 つのグリフに置き換える GSUB の規則です。
sub f i by fi;規則はフィーチャーブロックの中に書きます。たとえば liga フィーチャーで使うと次のようになります。
feature liga { sub f i by fi;} liga;sub <glyph sequence> by <glyph>;<glyph sequence>— 2 つ以上のグリフまたはグリフクラス。現れる順で書きます。<glyph>— 列全体を置き換える 1 つのグリフ。
sub は substitute の省略形です。次の 2 つは同じ規則です。
substitute f i by fi;sub f i by fi;ブロック内の規則は、長い列が先に照合されます。
適用されるのは最初に一致した規則です(先勝ち)。そのため、置き換え元のグリフ数が多い規則ほど先に格納されている必要があります。ただし並べ替えはコンパイラが行うと仕様で定められているため、書く順序は気にしなくてかまいません。
Lookup Type の判別
Section titled “Lookup Type の判別”Lookup Type 2 と書式が似ていますが、Lookup Type を明示する必要はありません。コンパイラが規則の形から判別します。
# 2 グリフ → 1 グリフ = Ligature Substitution(Lookup Type 4)sub f i by fi;# 1 グリフ → 2 グリフ = Multiple Substitution(Lookup Type 2)sub fi by f i;ラテン文字の合字(liga)
Section titled “ラテン文字の合字(liga)”Without rules
difficult waffle
With rulesdifficult waffle
Compiling…
分数(frac)
Section titled “分数(frac)”Without rules
1/2 1/4 3/4
With rules1/2 1/4 3/4
Compiling…
この Lookup Type を使うフィーチャー
Section titled “この Lookup Type を使うフィーチャー”OpenType 仕様にあるフィーチャーのうち、次のものはこの Lookup Type での実装が推奨されています。
liga— Standard Ligatures。fi や ffl など、通常の合字。dlig— Discretionary Ligatures。ユーザーが明示的に指定したときだけ適用する装飾的な合字。hlig— Historical Ligatures。long s の組み合わせなど、歴史的な表記の合字。rlig— Required Ligatures。アラビア文字の lam-alef など、用字系が必須とする合字。ccmp— Glyph Composition/Decomposition。他のフィーチャーが動く前に、文字の並びを 1 つのグリフへまとめる。frac— Fractions。推奨実装の 1 つは、数字・スラッシュ・数字の並びを合成済みの分数グリフに対応づける。
clig(Contextual Ligatures)でも合字を組みますが、特定の文脈でだけ働くため、文脈依存の規則で書きます。