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

1. 固定サイズの非圧縮和文ビットマップフォントのフォーマットは以下のような簡単な構造です。
和文フォントの１文字のサイズを n x n（ドット単位）とします。m を、(n+7)/8 を越えない最大の整数とします。１文字のデータは、文字のビットマップの最上位列の左から右へ、各列 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というのが圧縮されたフォントです。パラメータの２つの数字のうち最初の 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で述べた形式）が最後まで並んでいます。
１文字のデータサイズは、(width+7)/8 x height です。また、JISコードが J の文字は、code[n-1]が、J に等しいとすると J 番目に収められているので、先頭から (width+7)/8 x height x j + 2 x code + 34 byteのところからデータが存在することになります。