フォントが欲しい話#7
連日、何をやっているのかわかりにくいと思うから、今やってることをまとめておく。
FontForgeでフォント編集すると、いったん独自データにコンバートされるせいで、
読み込んだフォントをそのまま書き出すことは不可能であり、
ほんの一箇所の数字だけ変えたいだけでも、他に余計なところまで勝手に変更されるという事で、
現在、そのピンポイント変更用のソフトを作ってる。
で、今のところ、OS/2テーブルを読み込むところまで来たのだが、書き込みはまだ。
書き込みはまだだけど、読み込んでる時点で場所は把握できたわけで、
場所さえわかればバイナリエディタで試しに変更してみたり出来る。
例の、Bitstream Vera Sans Monoの横幅がMSゴシックと合わなくて、
フォントリンクしたとたんDelphiのIDEで使用できなくなるという問題を、
たった1バイトのバイナリ編集で解決できることがわかった。
具体的には、アドレスAA2Cの、04 D1を、04 00に書き換えるのだ。
もちろんこれは、いままでFontForgeでやって来た付け焼き刃対応の一つにすぎない。
9ptでの使用しか想定していないため、別のサイズでは別の値が必要。
何をやったかというと、フォントの平均幅のところに、emサイズの半分の値を入れた。
すると、MSゴシックの9ptは縦横比2:1なので、Delphiでもリンクされて使えるようになる。
Delphiでは一見まともにリンクされているので、この方法こそが簡単で最善の方法だ。
しかし、Delphi以外のエディタでは、実はちゃんと等幅でないことがわかる。
プロポーショナルフォントに対応する、メモ帳や真魚で見てみてみると、
日本語部分はVeraMono部分の2倍に達していない。
OS/2テーブルに書き込んだ平均幅は10進法に直すと1024で、書き込む前の値は1233だ。
このフォントに含まれる全ての文字は個別に1233の幅を持っていて、
描画する際は1233が使われるが、フォントリンクのサイズは1024が使われているようだ。
で、Delphiの場合、はじめから等幅しか対応してないものだから、
VeraMonoの1233の横幅×2に対して1024×2のMSゴシックを、字間の空いた状態で描画する。
これはDelphi用フォントとして確定でいいんじゃなかろうか。
これはこれで良いとして、ともかく、こういうカスタマイズが自前で出来るソフトを作ろうよと。
ピンポイントで数値を変更できれば、上記のように一箇所変更してどうなるか試せる。
これまでのように、何が変更されてどんな動作なのかって頭をかしげる必要はなくなる。
少なくとも、ここを変更すればこうなるんだという知識を積み重ねることは出来るようになるはず。
FontForgeによって勝手にロシア語とかトルコ語とかを追加されたのを取り除いたり、
あるいははじめから欧文フォントなのに日本語とか追加させたらどうなるかとか、
その辺を今いじって見たい。