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

2008年2月18日 (月)

OpenTypeフォントの続き(5)・・・OS/2テーブル

今回はOS/2テーブルである。OS/2テーブルはOS/2・Windows固有のメトリックスを定義するテーブルで必須である。前回と同様に、先に実行結果を示す。

Opentype6_1

上の画像はMS ゴシックフォントを解析した時の実行結果である。WeightClassはフォントの太さを表すフィールドで、windows.hで定義されているFW_NORMALやFW_BOLD等の値をとる。FsSelectionはフォントのスタイルを表すビットフィールドである。UnicodeRangeはフォントが提供しているグリフによってカバーされるUnicodeブロックを表すビットフィールドである。同様に、CodePageRangeはフォントが提供しているグリフによってカバーされるコードページ(文字コード)を表すビットフィールドである。上の画像より、日本語の文字コードであるShift-JIS(SHIFTJIS_CHARSET)に対応するビット17がセットされていることがわかる。また、上の画像からは判断できないが、MS ゴシックフォントには、ラテン文字やギリシャ文字のグリフも含まれているので、それらに対応するビットもセットされている(ANSI_CHARSETやGREEK_CHARSETなどに対応するビット)。

通常、Windowsでフォントを指定する時、LOGFONT構造体で表される論理フォントで指定するが、実際にはWindowsのフォントマッパによって、指定された論理フォントに近い物理フォントが選択される。この時、フォントマッパはフォントのこれらのフィールドをLOGFONT構造体のフィールドと比較していると思われる。例えば、LOGFONT構造体のlfWeightフィールドはOS/2テーブルのWeightClassフィールド、lfCharsetフィールドはOS/2テーブルのCodePageRangeフィールドという具合に(lfFaceNameフィールドはOS/2テーブルではなくnameテーブル)。

ところで、OS/2テーブルのUnicodeRangeやCodePageRangeフィールドの表す値は、Win32APIのGetTextCharsetInfoなどで返されるFONTSIGNATURE構造体として取得できるので、それらの値も括弧付きで示してある。他にもFamilyClassPanoseフィールドなどおもしろそうなフィールドもあるが、省略・・・

最後に、TahomaフォントのOS/2テーブルを解析した時の実行結果を示す。

Opentype6_2

というか、ずっとフォントの話ばっかりなので、しばらく他の話題にしようかと思っている。肝心のcmap・glyfテーブルやOpenTypeテキストレイアウトテーブルと呼ばれるGSUB・GPOSテーブルのことにほとんど触れていないが・・後、この作ってるツールをある程度完成したら、ダウンロードできるようにもしようかなと。

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

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

コメント

コメントを書く

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

トラックバック

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

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

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

自作ソフトウェア

無料ブログはココログ

メモ