|
お手数かけてすみません。
Mc, Mn, Meとかの意味がよく分かってなかったのですが、とりあえずそこの
ftp://ftp.unicode.org/Public/UNIDATA/UnicodeData.txt
の一覧の中にある「Mc Mn Me」等と書いてある文字は結合文字になる文字って
ことなのですね。
ですが、実はいろいろテストしてたら、もっとややこしい問題があることが分
かってきました。
例えば前回の「セ」+「゜」とかですが、この「゜」の文字が結合文字になる
かどうかは、直前にある文字次第のようでした。例えば「セ」なら結合文字にな
るけども、「ゼ」に「゜」を付けようとしても結合文字にはならないようです。
さらには「A」とかに対しても結合文字にはならないです。現状で秀丸
エディタでそういう風に書いてしまうと、秀丸的には結合文字だと思って動作し
てしまうようで、結果的に「゜」の部分が見えなくなってしまいます。
メモ帳でもやってみたんですが、こちらも表示なりカーソル移動の仕方なりが
おかしくなりました。メモ帳も秀丸と同じロジック(結合する側の文字コードだ
けの判断)で結合文字かどうか判定してるようです。
ということで、これ(「゜」と「゛」)について結合するかどうか正しく判定
するには、直前の文字の文字コードとの対応表が必要になるようです。
これは現実的にはなんとか出来る範囲内かと思いました。
で、今回問題になったU+02E5〜U+02E9の文字ですが、これが結合文字になる法
則は、もっとややこしくて、
− 02E5〜02E9の中での同じ文字同士は結合しない。
− 02E5〜02E9の中での同じじゃない文字同士は結合する。
− 02E5〜02E9の文字が02E5〜02E9外の文字には結合しない。(たぶん)
− 02E5〜02E9の文字が2文字結合した後に、さらに
02E5〜02E9の文字が連なる場合は、それが結合する。
− 結合出来るのは最高3文字まで。
みたいな法則になるようです。
これも、なんとかがんばれば出来るかと思いました。
ですが、もっと難しい例がありました。ベトナム語の場合はもうほとんど僕に
は認識不能です。
http://edn.embarcadero.com/jp/article/38816
の所に書いてあったのですが、
結合文字の並びには規則があり、“U+0061 U+0323 U+0306”
というシーケンスはあっても、“U+0061 U+0306 U+0323”
というシーケンスは有り得ないのです。
のように、何が結合して何が結合しないかは、ほとんどベトナム語を理解出来
る人でないと判断が出来ないように思います。
さらには、実はもっと詳しくテストしてたら、フォントによって結合する場合
としない場合がありました。
今回の「02E5〜02E9」は、MS ゴシックだとまったく結合せず、Tahomaとか
の欧文フォントだと結合します。
それと、縦書きの時にダメな件も、実は縦書き用フォントでは、「セ」+
「゜」が結合しないのだと思います。(これから調べようと思った所ですが)
結合しないのを無理矢理結合文字扱いで描画すると、最初にあった「ゼ」+
「゜」と同様な描画になって、結合する方の文字が画面から消えてしまいます。
ということで、大変長々とした話になってしまいますが、要するに「結合する
かしないか」は、それぞれのフォントで実際に描画してみて文字の幅を計算して
みないと分からないってことが最終結論として出てきます。
っということで、それを実現するには現状の秀丸を大幅にいじる必要がありそ
うで、今のところ手を出すのは難しいとお返事させていただくしか無いです。
で、これらの問題にはとりあえず目をつぶらせていただいて、今回の「3Dグラ
フィックス…」をONにした時に02E5〜02E9の文字が結合しない問題についてのみ
修正させいただきまして、次β版をアップロードしたいと思います。
ということでどうでしょうか。
結合文字を本当に正しく解釈する方は、また機会を見て対応したいと思います。
|
|