やっと休んだわ。3週間弱働きっぱなしだったけど、なんとか休むことができた。バグの問題は解決してないんだけど、いろいろ怪しいところを地道に直していってみたら改善してるんじゃないかという気がする。
他にまだ休日出勤する必要がありそうな仕事があったが無事金曜のうちに終わらせたので問題なかった。ちょっと質問が上がってきてたのを家から返事してたりしたけど。
しばらく休んでないのに急に三日も休んだら体調崩すんじゃないかと思ったけど、当然ながらそんなことなかったよ。ていうか土日は疲れがとれずにずっとごろごろしてただけだった。月曜も洗濯したり買い物行ったりしたくらいでごろごろしてたけどな。
バグの問題が上手く解決してくれればしばらくは忙しくもなさそうなんだけどどうだかな。
21世紀に生きる日本人なら文字の読み描きくらいはできるようになっておきたいですよね。
ということでまずは読み、TrueType(およびOpenType)フォントの読み込みをやり始めた。 読み描きってなら「読み」はOCRじゃねーの?という気もするが、さすがにOCRを自前で書く必要性は感じなかったのでそんな気はしなかったことにした。 「描き」は当然描画のことですね。
TrueTypeとかOpenTypeの仕様はMSのサイトやAppleのサイトに詳しい。特にMSのサイトはOpenTypeの仕様書に加えてそこから参照してる仕様もいっしょに落とせるので便利だ。Appleの方はTrueTypeの分しか書いてないし書いてあることもだいたいいっしょだけど、表現が微妙に違ってたりするので両方突き合わせた方がわかりやすい。実際のフォントはフリーのフォントを解析してやっていこう。
書き始めたのはいいけど、今のところファイルを仕様に沿って解析してるだけなので特にどうということもないな。 フォーマット自体がメモリ上に置いてCでアクセスすることを強く意識しているようで、Rubyで頭からストリームで解析していくとめんどくさい。先に出てくるテーブル1が後に出てくるテーブルの中を参照しないと解析できなかったり、不定長配列の個数が書かれていなかったり2している。不定長配列はテーブルの長さがあるからその最後までとすれば大丈夫そうだが、先に出てくるテーブル解析が後に出てくるテーブルに依存してるのは1パスでは無理っぽいね。
仕様書は読んでると、テーブル毎に仕様の書き方が違ったりしていて歴史が感じられるのが面白い。OS/2テーブルとかもう名前からしてアレだが、仕様の書き方も明らかに他と違ってるし、フィールドにシステムハンガリアンな名前付いてるし読んでるだけであれだ、その、ピキピキくるね。
まだ何も考えずに仕様書にある通りにバイナリ解析してるだけなので特に難しいことはないけど、グリフの中身を見ようとしたらTrueTypeのコマンドがどうこうとか書いてあって描画しようとしたら結構大変そうね。詰め情報についてのバイトコードマシンまで書くつもりはないんでなんとかなるかなぁ。
まあただの現実逃避なんでぼちぼち気が向いた時に進めましょ。