« OpenTypeフォントの続き(2)・・・OpenTypeテーブル | トップページ | OpenTypeフォントの続き(4)・・・head・maxpテーブル »

2008年2月11日 (月)

OpenTypeフォントの続き(3)・・・nameテーブル

ということで今回はnameテーブル

nameテーブルは、フォントファミリ名・フォントの著作権注釈など、フォントに関する文字列データを定義するテーブルである。nameテーブルの構造は次のようになる。

nameテーブル
名前 説明
USHORT format フォーマットセレクタ(=0)
USHORT count Nameレコードの数
USHORT stringOffset テーブルの先頭からの文字列ストレージへのオフセット(バイト)
NameRecord nameRecords[count] nameレコードの配列
(Variable) 文字列ストレージ

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

Nameレコード
名前 説明
USHORT platformID プラットフォームID
USHORT encodingID プラットフォーム固有のエンコーディングID
USHORT languageID 言語ID
USHORT nameID 名前ID
USHORT length 文字列の長さ(バイト)
USHORT offset 文字列ストレージの先頭からの文字列へのオフセット

プラットフォームIDはプラットフォームの種類を表すIDで次のような値になる。

プラットフォームID
プラットフォームID プラットフォーム名
0 Unicode
1 Macintosh
2 ISO
3 Microsoft
4 カスタム

MicrosoftのWindows向けのフォントでは、通常、プラットフォームID=3が使われる。次のエンコーディングIDは、プラットフォーム固有のエンコーディングを表すIDで、例えば、プラットフォームID=3のMicrosoftプラットフォームでは、次のような値になる。

エンコーディングID(プラットフォームID=3)
エンコーディングID 説明
0 シンボル
1 Unicode BMP面のみ
2 シフトJIS
3 PRC
5 Big5
6 Johab
7 予約済み
8 予約済み
9 予約済み
10 Unicode フルレパトリー

Windows向けのUnicodeフォントの場合、通常、エンコーディングID=1もしくは10、シンボルフォントの場合、0が使われる。次に言語IDであるが、Microsoftプラットフォーム(プラットフォームID=3)の場合、Windowsのロケール(LCID型のロケールID) を表す。最後に、名前IDであるが、これは文字列データの内容を表すIDで、次のような値になる。

名前ID
名前ID 説明
0 著作権注釈
1 フォントファミリ名
2 フォントサブファミリ名
3 フォント識別子
4 完全なフォント名
5 バージョン文字列
6 PostScript名
7 商標
8 製造社名
・・・以下省略・・・

以上を踏まえて、実際にnameテーブルを解析してみた。実行結果は次のとおり。

Opentype4_1_3

上の画像はMS ゴシックフォントのnameテーブルを解析したときの実行結果である。MicrosoftとMachintoshプラットフォーム向けの文字列データが含まれていることが分かる。また、Microsoftプラットフォーム(プラットフォームID=3)向けの文字列データは、Unicode(エンコーディングID=1)でエンコードされ、英語ロケール(ロケールID=0x0409)と日本語ロケール(ロケールID=0x0411)向けの2種類含まれていることもわかる。アプリケーション側でこれらの情報をユーザーに対して表示する時、アプリケーションの実行環境のロケールに合わせて切り替えれば、よりユーザーフレンドリになることは言うまでもない。

ちなみに、上の画像のNameRecords & String DataリストビューのString Data列は文字列データを16進数で表示した値である。String Data(Encoded)列は文字列データをプラットフォームID、エンコーディングIDで指定されたエンコーディングで符号化し、表示できるようUnicodeに変換して表示した値である。Macintosh向けの文字コードはよくわからないので、空白にしておいた。

最後に、Tahomaフォントのnameテーブルを解析した時の実行結果も載せておく。

Opentype4_2

追記:Macintosh向けの文字コードはよくわからないと書いたが、Windowsには、Mac用のいくつかのコードページがインストール・サポートされているので、Win32APIのMultiByteToWideCharを使ってUnicodeに変換してみた。

Opentype4_3

Macintoshプラットフォーム(PlatformID=1)のEncodingID=0(Roman)は、Windowsコードページ10000に対応するようなので、コードページ10000を指定して、MultiByteToWideCharを呼び変換してみたが、上手くいったようである。

« OpenTypeフォントの続き(2)・・・OpenTypeテーブル | トップページ | OpenTypeフォントの続き(4)・・・head・maxpテーブル »

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

コメント

コメントを書く

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

トラックバック

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

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

« OpenTypeフォントの続き(2)・・・OpenTypeテーブル | トップページ | OpenTypeフォントの続き(4)・・・head・maxpテーブル »

自作ソフトウェア

無料ブログはココログ

メモ