11.62023
2.オフセットテーブルとテーブルディレクトリ
こんにちは、カルチスタッフです。
前回、TTFファイルフォーマットの概要についてお話ししました。
TTFファイルは複数のテーブルを持っており、大きく3つの種類に分けられます。
今回は、その3つうちの2つ、
①オフセットテーブル
②テーブルディレクトリ
について詳細を見ていきたいと思います。
まず、オフセットテーブルです。下表のような項目で構成されています。
型 | Byte数 | 名前 | 説明 |
Fixed | 2 | SFNT version(*1) | 0x00010000 のとき、 version 1.0 |
USHORT | 2 | num Tables | タグテーブル数 |
USHORT | 2 | search Range | 検索範囲: (2の最大累乗 <= numTables) × 16 |
USHORT | 2 | entrySelector | Log2 (2の最大累乗 <= numTables) |
USHORT | 2 | rangeShift | NumTables ×16-searchRange |
(*1)SFNTはスケーラブルフォント(アウトラインフォントの別名)の略語
num Tables以降の値を、具体的な数字で説明します。
テーブル数が18の場合、テーブル数を超えない2の最大乗数は16です。なので、
・search Rangeは、16×16で256
・entrySelectorは、log2(16)=4
・rangeShiftは18×16-256=32
となります。
次に、テーブルディレクトリです。
テーブルディレクトリは、オフセットテーブルの【num Tables】で指定された数分のテーブルディレクトリエントリで構成されます。
テーブルディレクトリエントリは、下表のような項目で構成されています。
型 | Byte数 | 名前 | 説明 |
ULONG | 4 | tag | 4バイト識別子(タグ名) |
ULONG | 4 | checkSum | テーブルのチェックサム |
ULONG | 4 | offset | テーブルのファイルの先頭からのオフセット(バイト) |
ULONG | 4 | length | -テーブルのサイズ(バイト) |
*tagは4つのASCII文字です。
*offsetとlengthを使ってフォント内の各テーブルへアクセスします。
ここまで、オフセットテーブルとテーブルディレクトリについて説明しました。
TTFファイルのフォーマットについてご質問・ご相談などございましたら、お気軽にお問い合わせください。
カルチスタッフ