Saqooshaさんの「OpenType フォントのカーニング情報をぶっこぬく」という記事の最後に
palt があるならそれもちゃんと処理しないといけない。OTF 複雑すぎ、、、
と書いてあって。Saqooshaさんの記事を参考に、palt
と、それに関連するhalt
テーブルの情報をとってみたログです。
やりたいこと
Open Typeフォントのフォーマットからプロポーショナルメトリクス情報をとりだしたかったです。もっと直接的にいうと、paltとhaltのデータをぶっこぬきたかったです。
paltとは? haltとは?
両方とも、fontのGlyphの位置を調整するためのデータが入ったテーブルです。microsoft のページに書いてあるpaltとhaltの説明で重要そうな部分を抜いて以下にかきます。
palt
- Proportional Alternate Widths。Glyphの全角幅の代わりのメトリクスとして適用する。
- kernが有効なとき、paltが存在するなら、paltはマストで有効にするべき。
- この機能は他の全てのglyph幅にまつわる機能と相互に排他的。
halt
- Alternate Half Widths。カッコや句読点や記号などの半角幅のGlyphのメトリクスを全角幅にするために適用する。
- haltはdefaultはoff。
- カッコや句読点や記号などのときに限り有効にする
- haltがONのときはpaltやkernがOFF。逆に、kernやpaltがONの時にはhaltがOFF。
Open Typeからどうやってpalt、haltにまつわる情報をとってくる?
microsoftの以下2つの英文がひたすら書かれてるページを、じーっと読んでるとなんとなく理解できました。
- GPOS - The Glyph Positioning Table : palt、haltテーブルが入ってるGPOSテーブルの内部フォーマットについて書いてある
- OpenType™ Layout Common Table Formats : Open Typeの全テーブルで共通で使われてるフォーマットについて書いてある
Saqooshaさんのページにのってるlibotf
という OTF ファイルをパースできるツールを使って、以下の手順でOTFをdumpして、そのdump結果にそってみると、理解しやすかったです。
以下、libotfのotfdumpの使い方メモです。
-
このページから
The libotf library (0.9.13)
をダウンロード - ダウンロードしたディレクトリへいき、いつもの
./configure
make
make install
する。 -
cd example
すると、otfdump
ができてる -
./otfdump {任意のOTFフォントファイルへのパス} > output.txt
で、output.txtにdumpされた情報が出力される
このdumpしたデータに microsoft のページに書いてある paltテーブル ぶっこぬき方を、ざっくり書き込んでみると、以下のような感じです。
LookUpテーブルのSubtableの中のValueというところに、paltやhaltの情報が入ってるのですが、その数字が何を意味するかというと、ValueFormatに応じて以下のような値が入っています。
- ValueFormatが0x0001のときは、glyphのleft-side bearingを調整するために、XPlacementになる
- ValueFormatが0x0004のときは、別のglyphとのadvanceを調整するためにXAdvanceになる
- ValueFormatが0x0005のときは、XPlacementとXAdvanceになる
Advance、Bearingは、GlyphのPositionまわりの用語で、その用語についてはfreetypeのこのページがまとまっていました。
これでpalt、haltの情報はとりだして、Glyphの各positionデータに反映することができるようになると思います。
おまけ:フォント用語
- トラッキング : 文字間隔の「等間隔のアキ」の値。
- プロポーショナル : 字幅に合わせた文字(グリフ)の位置を調整するもの。OpenTypeでは、横組みの場合は「palt」、縦組みの場合は「vpal」がこれに当たる。以下の図でいうと、「仮想ボディ」のwidth,heightにあたる部分。
- カーニング : fontごとに、任意の文字ペアに対して登録された「文字間のアキ」の値。OpenTypeでは「kern」がこれに当たる。
- メトリクス : プロポーショナル情報で字幅を整え、カーニング情報により文字間隔(ツメ)を調整すること。この機能はプロポーショナルメトリクスとか、メトリクスカーニングとか、自動(メトリクス)とか、ソフトによって、いろんな記述されてるっぽい。(もしかしたら厳密には違うかも)
- オプティカル : イラレや、InDesignの独自機能。fontファイルに内蔵された情報を使わないで、文字の大きさを読み取り、文字間隔(ツメ)の調整を行う機能のこと。