Gauche:文字カテゴリとケースマッピング

Gauche:文字カテゴリとケースマッピング

Shiro(2011/07/18 18:09:11 PDT): 内部エンコーディングがutf-8でない場合に、 Unicodeで規定されてるカテゴリやケースマッピングをどう扱うか、についてのメモ。

'none'とcase mapping

--enable-multibyte=none でコンパイルした場合に0x80-0xffの範囲を どう扱うべきか。

0.9.1まではユルく、使う側でISO-8859-Xのどれかだと思って使えばいいって感じで 考えていたけど、case mappingをまともにやるなら 0x80-0xffのコードがどの文字に対応するのか決めとかないとならない。 まあ今でもutf-8に変換する時にはそのままスルーしているので、 事実上Latin-1 (ISO-8859-1) とみなしていることになる。 なので、case mappingではLatin-1として扱うことにする。

Latin-1とUnicodeのU+00ffまでの範囲は文字としては一致するんだけど、 2文字だけ、対応する大文字がLatin-1の範囲に収まらない文字があるんで、 そこだけ特別扱いする。

euc-jp, sjisでのGeneral Category

euc-jp-2004, sjis-2004には、Unicodeに直接対応しない文字が25個ある。 これらの文字のカテゴリやプロパティはUnicodeで規定されてないので、 適当に決める必要がある。

SJIS EUC Unicode 暫定カテゴリ
82F5 A4F7 U+304B U+309A (か + ゜) Letter, other (Lo)
82F6 A4F8 U+304D U+309A (き + ゜) Letter, other (Lo)
82F7 A4F9 U+304F U+309A (く + ゜) Letter, other (Lo)
82F8 A4FA U+3051 U+309A (け + ゜) Letter, other (Lo)
82F9 A4FB U+3053 U+309A (こ + ゜) Letter, other (Lo)
8397 A5F7 U+30AB U+309A (カ + ゜) Letter, other (Lo)
8398 A5F8 U+30AD U+309A (キ + ゜) Letter, other (Lo)
8399 A5F9 U+30AF U+309A (ク + ゜) Letter, other (Lo)
839A A5FA U+30B1 U+309A (ケ + ゜) Letter, other (Lo)
839B A5FB U+30B3 U+309A (コ + ゜) Letter, other (Lo)
839C A5FC U+30BB U+309A (セ + ゜) Letter, other (Lo)
839D A5FD U+30C4 U+309A (ツ + ゜) Letter, other (Lo)
839E A5FE U+30C8 U+309A (ト + ゜) Letter, other (Lo)
83F6 A6F8 U+31F7 U+309A (小さいフ + ゜) Letter, other (Lo)
8663 ABC4 U+00E6 U+0300 (æ + アクサングラーヴ) Letter, lowercase (Ll)
8667 ABC8 U+0254 U+0300 (ɔ + アクサングラーヴ) Letter, lowercase (Ll)
8668 ABC9 U+0254 U+0301 (ɔ + アクサンテギュ) Letter, lowercase (Ll)
8669 ABCA U+028C U+0300 (ʌ + アクサングラーヴ) Letter, lowercase (Ll)
866A ABCB U+028C U+0301 (ʌ + アクサンテギュ) Letter, lowercase (Ll)
866B ABCC U+0259 U+0300 (ə + アクサングラーヴ) Letter, lowercase (Ll)
866C ABCD U+0259 U+0301 (ə + アクサンテギュ) Letter, lowercase (Ll)
866D ABCE U+025A U+0300 (ɚ + アクサングラーヴ) Letter, lowercase (Ll)
866E ABCF U+025A U+0301 (ɚ + アクサンテギュ) Letter, lowercase (Ll)
8685 ABE5 U+02E9 U+02E5 (「/|」みたいな文字) Symbol, modifier (Sk)
8686 ABE6 U+02E5 U+02E9 (「\|」みたいな文字) Symbol, modifier (Sk)

case mappingについて、「æ」、「ɔ」、「ʌ」、「ə」はUnicodeでは 対応する大文字が規定されているが、それら大文字に対応する文字がJISX0213:2004には 存在しないので、case mapping無しって扱いで良いだろう。

More ...