ビットマップ和文フォントのフォーマット

 1. 固定サイズの非圧縮和文ビットマップフォントのフォーマットは以下のような簡単な構造です。

和文フォントの1文字のサイズを n x n(ドット単位)とします。m を、(n+7)/8 を越えない最大の整数とします。1文字のデータは、文字のビットマップの最上位列の左から右へ、各列 m バイトで、順に下の行へと m x n バイトの通常の形式です。

横幅のドット数が8で割り切れないときは、各列の最後のバイトの余った下位ビットには0を入れておきます。上位ビットが左側になります。

フォントファイルには、これがJISコード順に並んでいます。JISコードが J の文字のデータは、J = (H, L)(H は上位、L は下位バイト)とすると、ファイルの先頭から

   ((H-33)x94 + L - 33) x m x n

バイトをスキップした後になければなりません。

2. 上記の和文フォント(あるいは、上記と同様であるが縦と横のサイズが異なっていてもよい)をdviout独自の knjtopk.exe によって圧縮フォントファイルを扱うことができます。

knjtopk c:\font\jfont\kanji.24 temp.24 24 24 H

のようにします。c:\font\jfont\kanji.24 がオリジナルのフォントで、tmp.24というのが圧縮されたフォントです。パラメータの2つの数字のうち最初の 24 は横のドット数で、後の 24 は縦のドット数です。

PKフォントの標準圧縮、あるいは、JXL4フォントで用いられる拡張圧縮と同様な方式で圧縮されます。上記の最後のパラメータ H で、この拡張圧縮を指定しています。

3. KG和文フォントのフォーマットは、少数の文字を登録して扱うのに適しています。文字のビットマップデータが圧縮されないで格納されています。ファイルの先頭は、圧縮された上記和文フォントと同様

0, 0, 247, id[1], width[2], height[2], byte_width[2], dummy[22]

となっています。ただし id は「G」となって、他の形式のフォントと区別されます。dummyは使われていませんが、0 になっています。そのあとに続くのは入っている文字のJISコードのリストで

total[2], code[total][2]

totalは入っている文字数、code[0],...,code[total-1]は、収録順にJISコードが書かれています(width[2]などと同じ2バイト整数)。その後に続けて隙間無く圧縮していない文字データ(1で述べた形式)が最後まで並んでいます。

1文字のデータサイズは、(width+7)/8 x height です。また、JISコードが J の文字は、code[n-1]が、J に等しいとすると J 番目に収められているので、先頭から (width+7)/8 x height x j + 2 x code + 34 byteのところからデータが存在することになります。