M+フォントとFontForgeの虫下し

あらすじ

M+フォントがWindows7で使えない (http://mplus-fonts.sourceforge.jp/cgi-bin/blosxom.cgi/mplus_fonts/mplus_fonts-120624-2.html コメント欄参照)

原因

FontForgeOS/2テーブルに正しいデータを書きだしていない。

詳細

M+フォントには書体が7つ*1あるが、漢字グリフは2種類*2。効率化のために、先に漢字グリフ分のTTFを生成しておいて、それをベースに各種フォントを作成する処理を導入した。これで漢字グリフ処理時間は2/7になり、ビルド処理の時間が大幅に短縮された。
その後、TESTFLIGHT-048までのビルドシステムはFontForgeの独自スクリプトで書かれていたが、049からは拡張しやすいPythonに移行した。*3
調べた所、OS/2テーブルが正しくないらしい。@egtraさんに教えて頂きました。文字を追加しても、OS/2テーブルのCodePagesとUnicodeRangesの情報が更新されていなかった。

解決

M+フォントのスクリプトの修正

PythonからUnicodeRangesを設定しようとしても何故か上手く行かなかったので、応急処置としてTTX/FontToolsのttLibライブラリを使って書き換えることにした。この修正をM+フォントのビルドシステムに導入するとしたら、ビルドにはTTX/FontToolsが必要になる。

バグレポート

FontForge側には、どういう修正を提案すればいいか。グリフを追加してもCodePagesとUnicodeRangesの情報が更新されない点と、PythonからUnicodeRanges変更できない点を報告するべきか。

*1:1P, 2P, 1C, 2C, 1M, 2M, 1MNの7つ

*2:2*系の漢字は1*系のものに縮小処理を掛けている

*3:この時TrueTypeのヒント命令を追加する処理を削ってしまったので、Windows環境で横棒が欠けが発生してしまった。ごめんなさい。050で直しました。