コンテンツにスキップ

Lookup Type 6 — Chaining Contextual Substitution

Chaining Contextual Substitution は、前後の文脈が一致したときだけ、マーク(')を付けたグリフを置き換える GSUB の規則です。

sub e' t' c by ampersand;

規則はフィーチャーブロックの中に書きます。たとえば clig フィーチャーで使うと次のようになります。

feature clig {
sub e' t' c by ampersand;
} clig;
sub <backtrack 列> <マーク付きの入力列> <lookahead 列> by <置換先>;
  • <backtrack 列> — 入力列の前に要求する文脈のグリフ列。省略できます。
  • <マーク付きの入力列> — 置き換えの対象になるグリフ列。グリフ名・グリフクラス名のそれぞれにマーク(')を付けます。
  • <lookahead 列> — 入力列の後ろに要求する文脈のグリフ列。省略できます。
  • <置換先> — 入力列を置き換える 1 つのグリフまたはグリフクラス。

規則が適用されるのは、backtrack 列・入力列・lookahead 列の全体が一致したときだけです。3 つの列はすべてテキストに現れる順で書きます。バイナリの GSUB では backtrack 列が逆順で格納されるため、フォントツールの開発者がこの構文をしばしば混同すると仕様が注意しています。

置き換えの対象にできるのは入力列のグリフだけです。backtrack 列・lookahead 列のグリフは置き換えられません。

by で置換先を直接書けるのは、置換の操作が 1 つで、それが Single Substitution か Ligature Substitution になる場合だけです。どちらになるかは、マークを付けたグリフ・グリフクラスの数で決まります。それ以外の置換は、lookup を参照する形で書きます。

# マークが 1 つ → Single Substitution
sub [A-Z] [a.sc-z.sc]' by [a-z];
# マークが 2 つ以上 → 入力列全体を構成要素とする Ligature Substitution
sub e' t' c by ampersand;

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

substitute e' t' c by ampersand;
sub e' t' c by ampersand;

入力列のグリフ・グリフクラスには、置換先を書く代わりに、その位置で適用する lookup を lookup <名前> で指定できます。位置ごとに別の lookup を指定でき、型の異なる置換も混ぜられます。参照先の lookup に複数の規則があるときは、その位置の文脈に一致した規則が適用されます。

lookup CNTXT_LIGS {
sub f i by fi;
sub c t by c_t;
} CNTXT_LIGS;
feature calt {
sub [a e i o u] f' lookup CNTXT_LIGS i';
sub [a e i o u] c' lookup CNTXT_LIGS t';
} calt;

この例では、母音の後の f i と c t だけが合字になります。

規則の例外は、同じ lookup の中で、規則より前に ignore sub 文を置いて表します。

ignore sub <backtrack 列> <マーク付きの入力列> <lookahead 列>;

一致した列には置き換えを行わず、その位置では後続の規則の適用も飛ばします。backtrack 列と lookahead 列は省略できますが、マークを付けたグリフ・グリフクラスが少なくとも 1 つ必要です。マークは、例外にしたい規則で置き換えが起きる位置に付けます。複数の列を指定するときは、コンマで区切って 1 つの文にまとめられます。

文脈があるときだけ組む合字(clig)

Section titled “文脈があるときだけ組む合字(clig)”

Feature File 仕様の例から、このフォントに無いグリフを除いた規則です。e t は、後ろに c が続くときだけ ampersand に置き換わります。

Without rules
etc. et al.
With rules
etc. et al.
Compiling…

仕様が語境界の判定の例として挙げている形です。前に文字(@LETTER)がある並びを ignore sub で例外にすると、規則は語頭でだけ適用されます。

Without rules
fish selfish
With rules
fish selfish
Compiling…

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

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

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

  • calt — Contextual Alternates。グリフがつながるよう設計された筆記体などで、文脈に応じて接続のよい字形に置き換える。
  • clig — Contextual Ligatures。特定の文脈でだけ推奨される合字を組む。
  • cswh — Contextual Swash。文脈に応じて、既定の字形をスワッシュ字形に置き換える。
  • rclt — Required Contextual Alternates。calt と似た文脈による置き換えのうち、正しいレイアウトに必須で、オフにできない扱いのもの。
  • ordn — Ordinals。数字の後に続く文字を序数用の字形に置き換える。