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