« OpenTypeフォントの続き(6)・・・cmapテーブル | トップページ | OpenTypeフォントの続き(8)・・・glyfテーブル »

2008年3月 1日 (土)

OpenTypeフォントの続き(7)・・・locaテーブル

ということで、hheaやhmtxを飛ばすが、やっとTrueTypeアウトライン関連のテーブルに突入。

今回はlocaテーブル。locaテーブルはグリフインデックスからglyfテーブル内のグリフデータの位置へのマッピングを定義するテーブルである。

locaテーブルの構造はショートフォーマットとロングフォーマットの二つのフォーマットがあり、headテーブルのIndexToLocFormatフィールドによってどちらのフォーマットか決まる。

各フォーマットの構造は次のようになる。

ショートフォーマット
名前 説明
USHORT Offsets[NumGlyphs+1] glyfテーブルの先頭からのオフセット(バイト単位)/2の配列

ロングフォーマット
名前 説明
ULONG Offsets[NumGlyphs+1] glyfテーブルの先頭からのオフセット(バイト単位)の配列

Offsetsフィールドは各グリフのグリフデータのglyfテーブルの先頭からのオフセットの配列で、このOffsetsフィールドを使って、実際のglyfテーブル内のグリフデータにアクセスする。ショートフォーマットの場合、オフセットを2で割った値が格納されているので、実際のオフセットはそれを2倍したものになる。NumGlyphsの値はフォント内のグリフ数を表すが、これはmaxpテーブルのNumGlyphsフィールドから取られる。また、Offsets配列の最後にダミーの要素(+1)が追加されているので、各グリフのグリフデータのサイズは

  • グリフインデックスNのグリフデータのサイズ = Offsets[N + 1] - Offsets[N]

と一様に求まる(上の式は、ロングフォーマットの場合。ショートフォーマットの場合は2倍する必要がある)。

ということで、実際にlocaテーブルを解析した実行結果を示す。

Opentype8_1

上の画像はTahomaフォント(TAHOMA.TTF)を解析した時の画像である。フォーマットはロングフォーマットである。また、上の画像より、グリフインデックス1、2、3のグリフデータのサイズが0になっていることが分かるが、これは、空白文字などのアウトラインも持たないグリフを表す。ちなみに、グリフインデックス0のグリフは、フォントにグリフが存在しないことを表す欠損(文字)グリフでなければならない。

« OpenTypeフォントの続き(6)・・・cmapテーブル | トップページ | OpenTypeフォントの続き(8)・・・glyfテーブル »

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

コメント

コメントを書く

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

トラックバック

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

この記事へのトラックバック一覧です: OpenTypeフォントの続き(7)・・・locaテーブル:

« OpenTypeフォントの続き(6)・・・cmapテーブル | トップページ | OpenTypeフォントの続き(8)・・・glyfテーブル »

自作ソフトウェア

無料ブログはココログ

メモ