プログラマ向けの超美しいRictyフォント
以前、開発用として自宅のLinux向けにRictyフォントを生成していて、それを自宅と会社で使っていたのですが、昨年の秋に会社で使っていたマシンのOSがクラッシュし(Windows VistaのWindows Updateをかけたら起動しなくなった。(´・ω・`))、OSをWindows 7に入れ直した際に生成済みで且つ再配布可能の姉妹フォント「Ricty Diminished」をインストールして使っていたのですが、これは第2水準の文字が表示されないものだったので、騙し騙し使っていました。(表示できない文字は□に化ける)
しかし、このところ難しい漢字が多く入っているメールをNTEmacs上で読んでいたら、やたらと文字化けしまくったので、「そろそろちゃんとジェネって化けないようにでもするか…」と、仕事も谷になっていた事もあって、最新のInconsolataフォントやMigu 1Mフォント、生成スクリプトをあちこちからダウンロードして、以前実施した流れでサクサク作っちゃおうっと。(^^)
…と思ったのですが…
「何度生成しても、Windows 7にフォントがインストールできない!」
という情けない事態に…

こんな感じでエラーになります。
「有効なフォント ファイルではありません。」…だと?
「おかしい… 何が行けないんだ???」と思い、生成までの仕様をまるで理解していない私は、トップダウンではなく、ボトムアップで調べて行く事に…
しかし、このところ難しい漢字が多く入っているメールをNTEmacs上で読んでいたら、やたらと文字化けしまくったので、「そろそろちゃんとジェネって化けないようにでもするか…」と、仕事も谷になっていた事もあって、最新のInconsolataフォントやMigu 1Mフォント、生成スクリプトをあちこちからダウンロードして、以前実施した流れでサクサク作っちゃおうっと。(^^)
…と思ったのですが…
という情けない事態に…

こんな感じでエラーになります。
「有効なフォント ファイルではありません。」…だと?
「おかしい… 何が行けないんだ???」と思い、生成までの仕様をまるで理解していない私は、トップダウンではなく、ボトムアップで調べて行く事に…
(1) 生成されたフォントをdiff & バイナリエディタで覗く。
この際、生成時にOS/2 Versionが書き換えられたフォントが.bakで作成されるので、変換前と変換後の比較を行う。
[結果] ヘッダとフッタが変化したのみで、何がおかしいのか判断つかず。(フォントフォーマットマニアでもないと無理!)
(2) .bakのフォントがおかしいか確認。
これがおかしければ、当然変換後もおかしくなるので、.bakを.ttfにリネームしてWindowsに読み込ませる。
[結果] 無事読み込まれた! (1)の時点で壊れた事が分る。
ちなみにOS/2 Versionの書き換えを行わないと、Windows上では文字間が妙に空いてしまうという問題があるので、この変換をos2version_reviser.shというシェルスクリプトで実施している(らしい)。
OS/2 Versionは"4"を"1"にしないとWindows上では問題になる(らしい)。
(3) os2version_reviser.shの解析。
読みたくないがos2version_reviser.shを解読する事に。
[結果] この中でFontForgeというプログラムのスクリプトモードをコールしているだけ。ただしWindows版 fontforge-cygwinの実行環境を構築して呼んでいるので、なかなかよくできたスクリプトと判断した。
(4) FontForgeについて解析/検討。(その1)
FontForgeはマルチプラットフォームで動作するオープンソースのフォント生成プログラムで、TrueTypeフォントを生成及び編集が可能のものとなる。Cygwin版はWindows上でX Windowシステムを生成し、ここからFontForgeをXのアプリケーションとして実行している(ただし、WindowsのCygwin版にコンパイルされているのでプログラムは.exe形式)。
FontForgeはXのGUIモードでOS/2 Versionを変更できる事から、付属の.batから実行する仕組みを書き換えて直接GUIから実行して書き換えようとしたところ、警告ダイアログが表示され、それを無視して進めたところエラーが数百出てしまった。
[結果] GUIで操作すると単純にOS/2 Versionの書き換えだけでは設定不足があるように見え、「これは何か違うな…」と判断。
(5) FontForgeについて解析/検討。(その2)
FontForgeのコマンドfontforge.exeは引数"-script"でコマンドライン実行が可能となり、FontForgeのスクリプトが実行できる。os2version_reviser.sh内では、単純にcat + ヒアドキュメントを用いて"Open", "Save", "Generate"というメソッドを呼んでいるだけだったので、Cygwinから呼び出すFontForge実行用シェルスクリプトと、os2version_reviser.shを改造して、直接FontForgeのスクリプトをステップ実行するようにしてみた。
ちなみにFontForgeのサイトでスクリプトの仕様を読むと、"Open"で元のバイナリフォントを開き、"Save"でフォントをSDFフォーマット(ASCIIで可読可能なフォーマット)に出力し、"Generate"が読み込んだSDFフォーマット等を指定したフォントに変換するとのこと。
os2version_reviser.sh内では、
(a) 文字間の開いてしまったRictyフォントファイル(BIN)を"Open"で読み込み、"Save"でSDFフォーマットファイル(TXT)に変換。
(b) SDFフォーマットファイルをsedにて、OS/2 Versionを"4"から"1"に置換。
(c) 置換したSDFフォーマットファイルを"Open"で読み込み、"Generate"で変換。この直前で元のRictyフォントファイル名を.bakにmvしておき、出力ファイルを.ttfとしている。
[結果] ステップ実行で追っていってもフォントの変換結果がおかしくなるという事が分った。
てっきり、Rictyを生成する側の人が適当に作ったスクリプトが行けないと思っていたのですが(失礼!)、「まさか実はFontForge自体がおかしい???」と思い始め、もう一度GitHubのバージョンやら、ネット検索で「Rictyフォント」に関連するサイトをしらみ潰しに調べてみる事にする。
(6) FontForgeのバージョンを古いものにする。
ネット上ではRictyフォントを生成するための情報が、どうにも半年以前という事が分かったが、今年になって解決している人もチラホラ見受けられ、「あっれー!?」と思いながら、ネット検索でヒットする比較的新しい昨年秋位のFontForge(のCygwin版)を探そうとしたところ、これが全く見付からない。Rictyに関して紹介されているどこのサイトでもリンクが張られてる総本山的な場所(といってもunofficialと書いてあるのですがw)を見ても、今年の1月のバージョン(2014_01_04)となっていて、そこから過去のバージョンのものが見付からない。
更に紹介しているサイトの観覧者コメントの書き込みを見ると、「fontforge-cygwin_2014_01_04.zipで私と同現象になっている」方がいて、「やっぱり古いバージョンでないとならないのかな…」とunofficialな総本山より、URLを無理矢理変更して古い「fontforge-cygwin_2013_10_07.zip」をダウンロード(これも皆が四苦八苦して見つけた方法みたいですw)して実行したところ…
「で…出来た…orz」
となりました。
【結論】
「fontforge-cygwin_2014_01_04.zip」がWindows 7(他のバージョンは未検証)上だと生成されるフォントに不具合生じる(事がある)。
その後別途調べたら、海外サイトでも似たことを指摘している人がいる事を発見しました。
恐らくfontforge-cygwin_2014_01_04.zipはすぐに更新されると思うので(=ネタがすぐに腐ると思うので)、「このような事があったよ」的な感じで、こうして残しておきます。
ちなみにこの時点で、2日もかかったという… (そりゃ、仕事しながら知識ゼロでトライ&エラー&アナライズをすればこうなるかと思いますが…むしろ2日で済んで良かった…)
そして、もしもこれをトップダウンで調べていたら、早く見つかるどころか、もしかしたら問題が分からないまま匙を投げていたかもしれないです。
「ネットに躍らされた俺、乙!!」って感じですが、このような苦労をして様々なソフトウェア技術を習得する事も必要な事だと思っているので、結果オーライという感じですね。
尚、生成したRicyフォントは再配布禁止となっているとの事で、「個人で生成して使う分にはあり」というライセンス体系になっているようです。また、Windowsに何も考えずにインストールをすると「汚ったないフォント」になるのですが、MacTypeという中華なソフトと組み合わせると、MacOSで表示したような綺麗なフォントに早変りです。

↑このようなフォントが… (クリックすると12pointの実物大)

↑このようなフォントにっ!(☆∀☆)イイ!!
ちなみに、再配布可能の姉妹フォント「Ricty Diminished」で第2水準文字を表示すると、

このような感じで第2水準の文字が□に化けます。
どの文字が化けたかというと…↓
そして「Ricty」フォント(+ os2version_reviser.shフィルタ済み)で第2水準文字を表示すると、

という感じです。
プログラマな方にはオススメなフォントなので、フォントを自分でジェネって、周りのエンジニアに「綺麗なフォントですね~」と言わせたら勝ちですね。(´▽`)
しっかし、こんな素晴らしいフォントテクノロジを開発している人達はネ申ですね。
生成したフォントは、ありがたく使わせていただきます♪(^^)
この際、生成時にOS/2 Versionが書き換えられたフォントが.bakで作成されるので、変換前と変換後の比較を行う。
[結果] ヘッダとフッタが変化したのみで、何がおかしいのか判断つかず。(フォントフォーマットマニアでもないと無理!)
(2) .bakのフォントがおかしいか確認。
これがおかしければ、当然変換後もおかしくなるので、.bakを.ttfにリネームしてWindowsに読み込ませる。
[結果] 無事読み込まれた! (1)の時点で壊れた事が分る。
ちなみにOS/2 Versionの書き換えを行わないと、Windows上では文字間が妙に空いてしまうという問題があるので、この変換をos2version_reviser.shというシェルスクリプトで実施している(らしい)。
OS/2 Versionは"4"を"1"にしないとWindows上では問題になる(らしい)。
(3) os2version_reviser.shの解析。
読みたくないがos2version_reviser.shを解読する事に。
[結果] この中でFontForgeというプログラムのスクリプトモードをコールしているだけ。ただしWindows版 fontforge-cygwinの実行環境を構築して呼んでいるので、なかなかよくできたスクリプトと判断した。
(4) FontForgeについて解析/検討。(その1)
FontForgeはマルチプラットフォームで動作するオープンソースのフォント生成プログラムで、TrueTypeフォントを生成及び編集が可能のものとなる。Cygwin版はWindows上でX Windowシステムを生成し、ここからFontForgeをXのアプリケーションとして実行している(ただし、WindowsのCygwin版にコンパイルされているのでプログラムは.exe形式)。
FontForgeはXのGUIモードでOS/2 Versionを変更できる事から、付属の.batから実行する仕組みを書き換えて直接GUIから実行して書き換えようとしたところ、警告ダイアログが表示され、それを無視して進めたところエラーが数百出てしまった。
[結果] GUIで操作すると単純にOS/2 Versionの書き換えだけでは設定不足があるように見え、「これは何か違うな…」と判断。
(5) FontForgeについて解析/検討。(その2)
FontForgeのコマンドfontforge.exeは引数"-script"でコマンドライン実行が可能となり、FontForgeのスクリプトが実行できる。os2version_reviser.sh内では、単純にcat + ヒアドキュメントを用いて"Open", "Save", "Generate"というメソッドを呼んでいるだけだったので、Cygwinから呼び出すFontForge実行用シェルスクリプトと、os2version_reviser.shを改造して、直接FontForgeのスクリプトをステップ実行するようにしてみた。
ちなみにFontForgeのサイトでスクリプトの仕様を読むと、"Open"で元のバイナリフォントを開き、"Save"でフォントをSDFフォーマット(ASCIIで可読可能なフォーマット)に出力し、"Generate"が読み込んだSDFフォーマット等を指定したフォントに変換するとのこと。
os2version_reviser.sh内では、
(a) 文字間の開いてしまったRictyフォントファイル(BIN)を"Open"で読み込み、"Save"でSDFフォーマットファイル(TXT)に変換。
(b) SDFフォーマットファイルをsedにて、OS/2 Versionを"4"から"1"に置換。
(c) 置換したSDFフォーマットファイルを"Open"で読み込み、"Generate"で変換。この直前で元のRictyフォントファイル名を.bakにmvしておき、出力ファイルを.ttfとしている。
[結果] ステップ実行で追っていってもフォントの変換結果がおかしくなるという事が分った。
てっきり、Rictyを生成する側の人が適当に作ったスクリプトが行けないと思っていたのですが(失礼!)、「まさか実はFontForge自体がおかしい???」と思い始め、もう一度GitHubのバージョンやら、ネット検索で「Rictyフォント」に関連するサイトをしらみ潰しに調べてみる事にする。
(6) FontForgeのバージョンを古いものにする。
ネット上ではRictyフォントを生成するための情報が、どうにも半年以前という事が分かったが、今年になって解決している人もチラホラ見受けられ、「あっれー!?」と思いながら、ネット検索でヒットする比較的新しい昨年秋位のFontForge(のCygwin版)を探そうとしたところ、これが全く見付からない。Rictyに関して紹介されているどこのサイトでもリンクが張られてる総本山的な場所(といってもunofficialと書いてあるのですがw)を見ても、今年の1月のバージョン(2014_01_04)となっていて、そこから過去のバージョンのものが見付からない。
更に紹介しているサイトの観覧者コメントの書き込みを見ると、「fontforge-cygwin_2014_01_04.zipで私と同現象になっている」方がいて、「やっぱり古いバージョンでないとならないのかな…」とunofficialな総本山より、URLを無理矢理変更して古い「fontforge-cygwin_2013_10_07.zip」をダウンロード(これも皆が四苦八苦して見つけた方法みたいですw)して実行したところ…
「で…出来た…orz」
となりました。
【結論】
「fontforge-cygwin_2014_01_04.zip」がWindows 7(他のバージョンは未検証)上だと生成されるフォントに不具合生じる(事がある)。
その後別途調べたら、海外サイトでも似たことを指摘している人がいる事を発見しました。
恐らくfontforge-cygwin_2014_01_04.zipはすぐに更新されると思うので(=ネタがすぐに腐ると思うので)、「このような事があったよ」的な感じで、こうして残しておきます。
ちなみにこの時点で、2日もかかったという… (そりゃ、仕事しながら知識ゼロでトライ&エラー&アナライズをすればこうなるかと思いますが…むしろ2日で済んで良かった…)
そして、もしもこれをトップダウンで調べていたら、早く見つかるどころか、もしかしたら問題が分からないまま匙を投げていたかもしれないです。
「ネットに躍らされた俺、乙!!」って感じですが、このような苦労をして様々なソフトウェア技術を習得する事も必要な事だと思っているので、結果オーライという感じですね。
尚、生成したRicyフォントは再配布禁止となっているとの事で、「個人で生成して使う分にはあり」というライセンス体系になっているようです。また、Windowsに何も考えずにインストールをすると「汚ったないフォント」になるのですが、MacTypeという中華なソフトと組み合わせると、MacOSで表示したような綺麗なフォントに早変りです。

↑このようなフォントが… (クリックすると12pointの実物大)

↑このようなフォントにっ!(☆∀☆)イイ!!
ちなみに、再配布可能の姉妹フォント「Ricty Diminished」で第2水準文字を表示すると、

このような感じで第2水準の文字が□に化けます。
どの文字が化けたかというと…↓
そして「Ricty」フォント(+ os2version_reviser.shフィルタ済み)で第2水準文字を表示すると、

という感じです。
プログラマな方にはオススメなフォントなので、フォントを自分でジェネって、周りのエンジニアに「綺麗なフォントですね~」と言わせたら勝ちですね。(´▽`)
しっかし、こんな素晴らしいフォントテクノロジを開発している人達はネ申ですね。
生成したフォントは、ありがたく使わせていただきます♪(^^)
コメントの投稿