Lookup Type 2 — Multiple Substitution
Multiple Substitution は、1 つのグリフを 2 つ以上のグリフの列に置き換える GSUB の規則です。
sub fi by f i;規則はフィーチャーブロックの中に書きます。たとえば ccmp フィーチャーで使うと次のようになります。
feature ccmp { sub fi by f i;} ccmp;なぜ分けるのか
Section titled “なぜ分けるのか”Unicode には、合字を 1 つの文字として符号化したものがあります。fi(U+FB01)がそれにあたります。f と i を並べたものとは別の、独立した 1 文字です。
cmap は 1 つの文字に 1 つのグリフしか対応付けられないので、この文字はフォントの中でも 1 つのグリフになります。f と i の 2 グリフに戻すには、この規則を使うしかありません。GSUB の規則のうち、グリフ列を入力より長くできるのはこの型だけです。
分けておけば、f と i を対象にするフィーチャー(smcp や sups など)がそのまま効きます。分けなければ、合字のグリフ専用の異体字を、フィーチャーの数だけ用意することになります。組み合わせの数だけ描くか、部品の数だけ描くかの差です。
タイ文字のように 1 つの文字が複数の部品でできていて、そこにさらに記号が積まれる文字体系では、この差がもっと大きくなります。部品に分けておけば、位置決めは GPOS に任せられます。
sub <glyph> by <glyph sequence>;<glyph>— 置き換え元の 1 つのグリフ。<glyph sequence>— 置き換え先の 2 つ以上のグリフ。置き換え後に現れる順で書きます。
<glyph sequence> にグリフクラスは使えません。使えるとすると、どの列に置き換えるのか規則が曖昧になるためです。
sub は substitute の省略形です。次の 2 つは同じ規則です。
substitute fi by f i;sub fi by f i;Lookup Type の判別
Section titled “Lookup Type の判別”Lookup Type 4 と書式が似ていますが、Lookup Type を明示する必要はありません。コンパイラが規則の形から判別します。
# 1 グリフ → 2 グリフ = Multiple Substitution(Lookup Type 2)sub fi by f i;# 2 グリフ → 1 グリフ = Ligature Substitution(Lookup Type 4)sub f i by fi;この Lookup Type を使うフィーチャー
Section titled “この Lookup Type を使うフィーチャー”OpenType 仕様にあるフィーチャーのうち、次のものはこの Lookup Type での実装が推奨されています。