OpenTypeレイアウト

あけましておめでとうございます

         謹┃賀┃新┃年┃
   ∩       2012年 元日
   ∩∪
   ∪.| |∩  .   〃ノヽヽ
.   | |.| |∪     从^∀^) <あけましておめでとうございます
.   | |.| |.| |     ハ∨/^ヽ 
  (∩∩∩∩)   ノ:[三ノ :.'、 
  (∪∪∪∪)  i)、_;|*く;  ノ
.    |=RSK=|  .   |!: ::."T~
  /≠≠≠\.    ハ、___|

1. コンピューターと文字 おさらい

フォントの機能は文字の形をシステムに提供することです。

文字をGIDに直すのは利便性のためです。

2. 合字、字体切り替え、スワッシュ、etc.





フォントは合字を用意したり、アラビア文字の複雑な置き換えを用意したり、グリフ装飾を用意したりできます。

縦書き、ベースライン調整、平均字面、印刷標準字体も用意できます。

これらの機能はOpenTypeレイアウトと呼ばれます。

3. 構成

OpenTypeレイアウトは5つのデータ構造で実現されます。

タグ 意味
BASE ベースライン、平均字面
GDEF
GPOS 位置調整
GSUB 置き換え
JSTF 行揃え

4. データ構造

データ構造は木構造を持つかも知れません。

例を上げて説明します。

4.1. Coverageフォーマット

 データ構造ではCoverageフォーマットが出現します。IndexとGIDの構造体の配列に展開できます。

フォーマット1とその例
フォーマット2とその例

4.2. ClassDefフォーマット

 データ構造ではClassDefフォーマットが出現します。GIDの集合に展開できます。

フォーマット1とその例
フォーマット2とその例

5. GSUB:置き換え

 GSUBは文字列の置き換えを定義します。正確にはGIDの置き換えを定義します。

5.1. ルックアップタイプ1 Single

 1対1の置き換えを定義します。2つのフォーマットが存在します。
フォーマット1はCoverageのGIDにDeltaGlyphIDを足すだけです。

フォーマット2はSubstitute[CoverageのIndex値]が置き換え後のGIDです。

5.2. ルックアップタイプ2 Multiple

 1対多の置き換えを定義します。1つのフォーマットが存在します。

5.3. ルックアップタイプ3 Alternate

 1対多の置き換えを定義します。1つのフォーマットが存在します。

5.4. ルックアップタイプ4 Ligature

 多対1の置き換えを定義します。1つのフォーマットが存在します。
最初の文字に対して、その後ろに続く文字列と置き換えを複数定義することができます。
例)f→[([f,l],ffl),([l],fl),([fi],ffi),([i],fi)]

追記予定