« OpenTypeレイアウトへの道(3)・・・FeatureList | トップページ | V1.1.11リリース »

2008年7月23日 (水)

OpenTypeレイアウトへの道(4)・・・LookupList

ということで、今回は残りのLookupList。前々回のScriptList前回のFeatureList同様、退屈なお話になるが・・・

LookupListはフォント内のフィーチャーで使われるすべてのLookupテーブルを定義し、その構造は次のようになる。

LookupList
名前 説明
USHORT LookupCount Lookupテーブルの数
Offset(USHORT) Lookups[LookupCount] LookupテーブルへのLookupListの先頭からのオフセットの配列

LookupCountはLookupテーブルの数つまりフォント内のフィーチャーで使われるすべてのルックアップの数を表し、LookupsはLookupテーブルへのオフセットの配列である。

Lookupテーブルは、グリフの置換やポジショニングを適用するグリフ、適用する操作の種類や適用された結果を定義し、1つ以上のLookupサブテーブルから構成され、その構造は次のようになる。

Lookupテーブル
名前 説明
USHORT LookupType ルックアップタイプ
USHORT LookupFlag ルックアップフラグ
USHORT SubTableCount Lookupサブテーブルの数
Offset(USHORT) SubTables[SubTableCount] LookupサブテーブルのLookupテーブルの先頭からのオフセットの配列

LookupTypeはルックアップタイプつまり適用する操作の種類、SubTableCountはLookupサブテーブルの数を表し、SubTablesはLookupサブテーブルへのオフセットへの配列である。Lookupサブテーブルの構造は、ルックアップタイプによって異なるので、実際のGSUB、GPOSテーブルのところで説明しようと思う。

また、先ほどLookupテーブルの説明で、Lookupテーブルは「グリフの置換やポジショニングを適用するグリフ、適用する操作の種類や適用された結果を定義する」と書いたが、「グリフの置換やポジショニングを適用するグリフ」、「適用された結果」は、実際にはこのLookupサブテーブル内で定義される。特に前者の「グリフの置換やポジショニングを適用するグリフ」を定義するLookupサブテーブル内のテーブルをCoverageテーブルと呼ぶ。Coverageテーブルは、グリフ置換やポジショニングを行うグリフをグリフインデックスで指定するが、主に2つの指定の方法がある。

  1. 個々のグリフのグリフインデックスのリストとして指定する(フォーマット1)。
  2. 連続したグリフインデックスのレンジ(範囲)として指定する。つまり、開始グリフインデックス(StartIndex)と終了グリフインデックス(EndIndex)のペアとして指定する(フォーマット2)。

それぞれの構造は次のようになる。

フォーマット1 Coverageテーブル
名前 説明
USHORT CoverageFormat フォーマット識別子=1
USHORT GlyphCount グリフインデックスの配列内のグリフの数
GlyphID(USHORT) GlyphArray[GlyphCount] グリフインデックスの配列(グリフインデックスの昇順)

暑いよdespair

フォーマット2 Coverageテーブル
名前 説明
USHORT CoverageFormat フォーマット識別子=2
USHORT RangeCount Rangeレコードの数
RangeRecord RangeRecords[RangeCount] Rangeレコードの配列(レンジの開始グリフインデックスの昇順)

Rangeレコードの構造は次のようになる。

Rangeレコード
名前 説明
GlyphID(USHORT) StartIndex レンジの開始グリフインデックス
GlyphID(USHORT) EndIndex レンジの終了グリフインデックス
USHORT StartCoverageIndex レンジの開始グリフインデックスのCoverageインデックス

以上を踏まえて実際にフォントを解析してみる。

まずは、MSゴシックフォント(MSGOTHIC.TTC)のGSUBテーブルのLookupListから。

Lookupmsgothic

上の画像より計1つのルックアップが定義されていることがわかる。また、そのルックアップのルックアップタイプが1、そのルックアップ内に1つのLookupサブテーブルが定義されていることもわかる。ルックアップタイプやLookupサブテーブルの説明がまだなので一体何のことやらと思うと思うが、これらは次回と言う事で・・

ちなみに、前回の結果から分かるように、kana->JAN言語システムで定義されているvertフィーチャーはルックアップインデックス0のこのルックアップを使って定義されている。

次はTahomaフォント(tahoma.ttf)のGSUBテーブルのLookupList。

Lookuptahoma

上の画像より計6つのルックアップが定義されている。

以上。

というか、OpenTypeレイアウトへの道は予想通り険しかったdespair。上の説明で出てきた例えば、Lookupサブテーブルの構造はルックアップタイプに応じて異なるのだが、グリフ置換とグリフポジションニング用合わせると、20以上あるし・・・・・絶対無理。ははは。プログラムの方も追い付かないぜbearing。まぁ、とりあえず、主なルックアップタイプだけやろうかなと。

« OpenTypeレイアウトへの道(3)・・・FeatureList | トップページ | V1.1.11リリース »

フォント」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.f.cocolog-nifty.com/t/trackback/1497665/39651755

この記事へのトラックバック一覧です: OpenTypeレイアウトへの道(4)・・・LookupList:

« OpenTypeレイアウトへの道(3)・・・FeatureList | トップページ | V1.1.11リリース »

自作ソフトウェア

無料ブログはココログ

メモ