Edited at

OpenType フォントのプロポーショナルメトリクス情報をぶっこぬく

More than 3 years have passed since last update.

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つの英文がひたすら書かれてるページを、じーっと読んでるとなんとなく理解できました。

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ファイルに内蔵された情報を使わないで、文字の大きさを読み取り、文字間隔(ツメ)の調整を行う機能のこと。