route99の日記: TTFのハックを試みる。 2
日記 by
route99
OpenTypeやTrueTypeのフォントファイルOTF、TTF、TTCをパーズするプログラムを書いてみた。仕様自体はMicrosoftやAppleのサイトにあるので書くことはできるが、実際のファイルの多くが仕様どおりでないことには驚いた。
TTFはテーブルがいくつも繋がっているもので、テーブルのメタデータにはチェックサムが書いてあるのだがファイルによってそのチェックサムの計算がまちまちだったりする。たとえば、headテーブルのあるフィールドは最初0にしてチェックサムを計算し、あとからほんとうの値をいれる。つまりチェックサムでチェックするにはそのフィールドを0として読みこんで計算する。であるが、ダイナラブのフォントはあとからチェックサムを計算していた。
TTFのテーブルはかなり抽象度の高い部分なのであるがそれでも仕様どおりでない。まして個々のテーブルの内容はひどいものだ。nameテーブルからフォントの名前を取りだすだけでも一苦労である。
ほんとうはパーズよりも書き込みを作りたいのだがどうしようか。。。とりあえずfreetypeが読む部分だけまともに作ろうかな。
TTX (スコア:1)
Re:TTX (スコア:1)
これはPythonなんですね。
でもttLib/tables/のやり方は見やすくてよさげですね。
あ、でも_n_a_m_e.pyのdecompileメソッドにある
name.string = stringData[name.offset:name.offset+name.length]
だとたぶんだめっぽいです。
# ファイル中の name.length がうそっぽいから。