KanjiPadのデータファイルである、strokedata.hの書式について簡単な説明を行います。これがわかると、KanjiPadやKanjiPad+に新たな漢字データを追加できるようになります。ちなみに、ソースを読んでちょっと調べた内容なので、やや不確かです。間違いがあったら教えてください。
また、役に立つストロークデータを追加されましたら、ぜひぜひ私(yashiromann@gmail.com)までお知らせください。私のところで配布しているKanjiPad+にデータを追加できると思います。
漢字一つ分のデータは例えば以下のようになっている。
"B\223\361FF\n" // 「二」に対応するデータ
"C\215\110FBF|b2-b1 l3-l1\n" // 「工」に対応するデータ
これは、以下のような書式に従っている。
[画数] [文字コード(2バイト)] [1画目のストロークデータ] ... [n画目のストロークデータ] '\n'
あるいは、その後に制約条件のついた形式、
[画数] [文字コード(2バイト)] [1画目のストロークデータ] ... [n画目のストロークデータ] '|' [1個目の制約条件] ' ' ... ' ' [k個目の制約条件] '\n'
以下、具体的にそれぞれについて説明する。
これは、1バイトのアルファベットの大文字で指定される。
'A'なら1画、'B'なら2画、'C'なら3画、…というように、[実際の画数 + 'A' - 1]
を満たす文字コードを与えてやればよい。
ストロークデータに対応する漢字の文字コードを指定する。
Shift-JISで指定するので、このフィールドは必ず2バイトとなる。
書き順通りにストロークデータを与えてやる。各ストロークデータは[A-Z][a-z]*
という正規表現に従う形で与えてやる必要がある。
大文字で指定されるところが書き始め、小文字で指定されるところが前のストロークにつながって、そのままストロークを続ける部分である。
それぞれの意味は以下の通りである。
'A' or 'a' ... 225度(時計の7:30に対応)の方向にストロークが進む。 'B' or 'b' ... 180度(時計の6:00に対応)の方向にストロークが進む。 'C' or 'c' ... 135度(時計の4:30に対応)の方向にストロークが進む。 'D' or 'd' ... 270度(時計の9:00に対応)の方向にストロークが進む。 'F' or 'f' ... 90度(時計の3:00に対応)の方向にストロークが進む。 'G' or 'g' ... 315度(時計の10:30に対応)の方向にストロークが進む。 'H' or 'h' ... 360度(時計の12:00に対応)の方向にストロークが進む。 'I' or 'i' ... 45度(時計の1:30に対応)の方向にストロークが進む。 'J' or 'j' ... 下向き(6:00)から左下方向(7:30)に曲がるストローク (おそらく、「川」の一画目のようなストロークのようなものを表現するのだと思う。) 'K' or 'k' ... 下向き(6:00)から右下方向(4:30)に曲がるストローク 'L' or 'l' ... 下向き(6:00)から右方向(3:00)に曲がるストローク 'M' or 'm' ... 右向き(6:00)から下方向(3:00)に曲がるストローク(「刀」の1画目など。)
制約条件は、例えば「末」と「未」を区別するのに必要となる条件である。画数と各ストロークの方向だけでは両者の区別がつかないからである。不要な時は記述しない。
制約条件は、条件式が負となるとき真となり、正となるときに偽となる。
条件式は、たとえばi3-x5
のような、引き算の形をとっている。i3, x5 のような各項の意味は以下のように解釈される。
項の1文字目のアルファベットは、ストロークのどの座標を値とするかを指定する。具体的には以下の通りである。
'x' ... ストロークの初めの点の X 座標の値 'y' ... ストロークの初めの点の Y 座標の値 'a' ... ストロークの中央の点の X 座標の値 'b' ... ストロークの中央の点の Y 座標の値 'i' ... ストロークの終わりの点の X 座標の値 'j' ... ストロークの終わりの点の Y 座標の値 'l' ... ストロークの初めの点と終わりの点との距離
項の2文字目の数字は、何画目かを指定するために使う。
従って、たとえば x3 という表記は、「3画目のストロークの初めの点のX座標の値」として理解してやればよい。
制約条件の後に '!' をつけてやると、必ずその制約条件を評価するよう になる。'!' を指定しない場合には、あくまで与えられた制約条件は ストロークデータだけで判定できない場合に使用されるものとなる。
[ 戻る ]
Yashiro Takeshi <yashiromann@gmail.com>