ATOK2008のSTYフォーマット
前書き:
はてなダイアリーは すごくよくなったね。
画像容量がレンタルサーバより広大になった!
「その場で編集モード」で新しいエントリーが手軽に書けるようになったし、明らかな欠点が無くなった。だからしばらく再開してみるよ。
本文:
ATOK2008 for Windows のSTYファイルについて調べているのだ。
BELLDA配列というのを作った (http://ai11.net/2008/05/12/) のだが、MS-IMEでは「ゎ」の文字を指定できるが、ATOKではうまく指定できなかったので調査です。
わたしはこちらのキー配列作成スクリプト (http://www.massangeana.com/mas/charsets/hana/hanasetup.htm) を使わせてもらって STYファイルを作成したのだが、このスクリプトは、MS-IMEでは「全角かな」を使うので「ゎ」でも指定できるが、ATOKのキー配列には「半角カナ」を使うようになっているので半角カナには「ゎ」の文字がないから配列に指定できないのだ。
でもATOKでも通常のローマ字入力で xwa とか lwa と入力すると、「ゎ」って入力できるよね。じゃあ どうやって指定されてるのかな?と思って、STYファイルのフォーマットを調べたよ。
#ATOK2008 STYファイルのローマ字定義を得る Perlスクリプト while(<>){ if (/^ロ.*マ字=(.*)/){ $r=$1; break; } } @rk=(); for($i=0; $i<length($r); $i+=4){ push @rk , substr($r, $i, 4); } foreach $i (@rk){ if($i =~ /^ff/){ $char = pack('C*', hex($i) - 0xff60 + 0xa0); print "=". $char . " ($i)\n"; }elsif(0x20 < hex($i) && hex($i) <= 0x7f){ $char = pack('C*', hex($i)); print $char . "($i)\n"; }else{ print "($i)\n"; } }
で元の文字に戻して見てみると、
-(002d) =ー (ff70) a(0061) =ア (ff71) b(0062) a(0061) =ハ (ff8a) =゙ (ff9e) k(006b) y(0079) o(006f) =キ (ff77) =ョ (ff6e)
のような「ローマ字⇔かな」定義が得られる。
半角カナの部分は Unicode UCS2 Halfwidth Katakata (http://www.unicode.org/charts/PDF/UFF00.pdf) のコードが使われている。
半角カナにない「ヵ ヶ ヮ ヰ ヱ」をどう指定しているか調べてみると、
x(0078) k(006b) a(0061) (0012) l(006c) k(006b) a(0061) (0012) x(0078) k(006b) e(0065) (0013) l(006c) k(006b) e(0065) (0013) l(006c) w(0077) a(0061) (0014) x(0078) w(0077) a(0061) (0014) w(0077) y(0079) i(0069) (0010) w(0077) y(0079) e(0065) (0011)
つまり以下のように内部定義されている。Unicodeと関係ない数値みたいだね。
- ヵ
- 0x0012
- ヶ
- 0x0013
- ヮ
- 0x0014
- ヰ
- 0x0010
- ヱ
- 0x0011