ストロークデータの書式についてのメモ

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>
Last modified: Sun Oct 3 16:34:04 2010
Valid XHTML 1.0!