コンテンツにスキップ

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 つのグリフ。

subsubstitute の省略形です。次の 2 つは同じ規則です。

substitute f i by fi;
sub f i by fi;

ブロック内の規則は、長い列が先に照合されます。

適用されるのは最初に一致した規則です(先勝ち)。そのため、置き換え元のグリフ数が多い規則ほど先に格納されている必要があります。ただし並べ替えはコンパイラが行うと仕様で定められているため、書く順序は気にしなくてかまいません。

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;
Without rules
difficult waffle
With rules
difficult waffle
Compiling…
Without rules
1/2 1/4 3/4
With rules
1/2 1/4 3/4
Compiling…

この Lookup Type を使うフィーチャー

Section titled “この Lookup Type を使うフィーチャー”

OpenType 仕様にあるフィーチャーのうち、次のものはこの Lookup Type での実装が推奨されています。

  • liga — Standard Ligatures。fiffl など、通常の合字。
  • dlig — Discretionary Ligatures。ユーザーが明示的に指定したときだけ適用する装飾的な合字。
  • hlig — Historical Ligatures。long s の組み合わせなど、歴史的な表記の合字。
  • rlig — Required Ligatures。アラビア文字の lam-alef など、用字系が必須とする合字。
  • ccmp — Glyph Composition/Decomposition。他のフィーチャーが動く前に、文字の並びを 1 つのグリフへまとめる。
  • frac — Fractions。推奨実装の 1 つは、数字・スラッシュ・数字の並びを合成済みの分数グリフに対応づける。

clig(Contextual Ligatures)でも合字を組みますが、特定の文脈でだけ働くため、文脈依存の規則で書きます。