表示されない結合文字No.07483
colder さん 12/09/14 17:52
 
colderです

3Dグラフィックスアクセラレータ使用時、
秀丸Ver8.21β5でも表示できない結合文字があります

˩˥ ˥˩ ˧˥ ˩˧ ˨˥˨ など
が正しく表示されないです
正しく表示できているか判らないので参考サイトのurlです
http://ja.wikipedia.org/wiki/%E5%9B%BD%E9%9A%9B%E9%9F%B3%E5%A3%B0%E8%A8%98%E5%8F%B7%E3%81%AE%E6%96%87%E5%AD%97%E4%B8%80%E8%A6%A7
以下のpdfの28p figure 7-7
http://www.unicode.org/versions/Unicode6.1.0/ch07.pdf

また、3Dグラフィックスアクセラレータを使用していないときでも、
縦書きモード時、半濁音付きの「セツトㇷ」などが表示されないです。

環境 win7 秀丸Ver8.21β5 font:tahoma

[ ]
RE:07483 表示されない結合文字No.07484
秀まるお さん 12/09/17 11:18
 
 とりあえず、

> ˩˥ ˥˩ ˧˥ ˩˧ ˨˥˨ など

 の方を調べてみたのですが、たしかにこちらについては秀丸エディタは結合文
字と判定してませんでした。

 「3Dグラフィックス…」のオプションOFFの時も、特に結合文字として描画す
る処理はしてませんでしたが、全部ユニコード文字であるがために、結果として
うまく結合文字で描画されてるようです。ただ、カーソルの移動の仕方とか、範
囲選択した時の動作とかは、結合文字としては動作してなくて、結果として描画
がくずれたりすることもありました。なのでこの時点でそもそもおかしいといえ
ばおかしいです。

 で、問題の「3Dグラフィックス…」をONにした場合ですが、この場合も一応、
全部ユニコード文字であるがために、普通に描画すれば結合文字になってくれる
はずが、なぜかうまく結合文字になっくれないです。で、Windows SDKに付属の
DirectWrite関係のサンプルである「CustomLayout」ってやつを少しいじって、
今回の結合文字を描画させてみたら、こちらも結合文字になってくれません。
(前回の「セ+゜」はうまくいってました)

 さらに調べてみて、同じくDirectWriteで動作してるはずのInternet Explorer
9(Windows7上)では、今回の結合文字がちゃんとした結合文字として描画され
ます。なのでDirectWriteでうまく結合文字を出す方法はあるはずだと思います。
ですが今のところ方法が分かりません。

 今それでつまずいてる所です。

 それと、メモ帳で試すと、メモ帳も今回の結合文字は結合文字として認識して
ないようで、カーソルが自由に文字の途中に移動してしまいます。それと、
Firefoxでも試してみたら、Firefoxでも範囲選択の動作的には結合文字として扱
ってないようです。さらには「˧˥」等はそもそも結合文字にならずに
描画してしまってるようです。

 っと、長々と説明してしまったんですが、要するに一筋縄ではいかない、難し
い問題なので、解決できるかどうかちょっと自信が無い所です。

 まずは、DirectWriteで今回の文字をうまく結合文字として描画する方法を探
してみます。

 縦書きの方は、もうしばらくお待ちください。

[ ]
RE:07484 表示されない結合文字No.07485
秀まるお さん 12/09/17 11:44
 
 テストしてて思ったことですが、「文字コード表示」で文字コードを表示した
時に、結合文字の場合に、結合してる文字すべてのコードが出なくてちょっと不
便なようです。

 とりあえずそこから先に修正させていただきます。

[ ]
RE:07485 表示されない結合文字No.07486
秀まるお さん 12/09/17 23:13
 
 結合文字の一覧ってのが、無いみたいな…

 とりあえず、今現在抜けてる物として、

    http://homepage2.nifty.com/k_maeda/code/uni/uni116.html

 の所に書いてある、U+FE20〜U+FE23 の文字がありました。それは追加しまし
た。

 「結合文字 一覧」でgoogle検索すると、ちゃんとしたリストが無いみたいな
話が出てくるようだし、

   http://dobon.net/vb/dotnet/string/issurrogatepair.html

 の「結合文字が含まれているか調べる」の所を見ると、

      Marksカテゴリにすべての結合文字が含まれているか、そして、
      結合文字以外の文字が一切含まれていないかについては、はっ
      きりしていません。ご存じの方がいらっしゃいましたら、コメ
      ントで教えていただけると助かります。

 みたいに書いてあって、なんだかはっきりしないです。

 誰か詳しい方ご存じ無いでしょうか?(とりあえず聞いてみる)

[ ]
RE:07486 表示されない結合文字No.07487
colder さん 12/09/18 17:17
 
colderです

>   http://dobon.net/vb/dotnet/string/issurrogatepair.html
>
> の「結合文字が含まれているか調べる」の所を見ると、
>
>      Marksカテゴリにすべての結合文字が含まれているか、そして、
>      結合文字以外の文字が一切含まれていないかについては、はっ
>      きりしていません。ご存じの方がいらっしゃいましたら、コメ
>      ントで教えていただけると助かります。
>
> みたいに書いてあって、なんだかはっきりしないです。

http://blogs.wankuma.com/naka/archive/2008/01/30/119963.aspx
ここのコメント欄によると
    Unicode 5.0ではD52にGeneral CategoryがMc, Mn, Meの文字すべてと明記されて
いますけど?

とあって、Marksカテゴリの文字はすべて結合文字と考えて良さそうです
で、Marksカテゴリの文字の一覧は
ftp://ftp.unicode.org/Public/UNIDATA/UnicodeData.txt
ここから3番目のフィールドで抽出すれば得られます

で、˥ ˦ ˧ ˨ ˩ などは、カテゴリがSkになっていて、こ
れは前の文字によっては結合文字になるものみたいで、
どういうときに結合文字になるのかよく分からないです、

[ ]
RE:07487 表示されない結合文字No.07488
秀まるお さん 12/09/18 17:43
 
 お手数かけてすみません。

 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の文字が結合しない問題についてのみ
修正させいただきまして、次β版をアップロードしたいと思います。

 ということでどうでしょうか。

 結合文字を本当に正しく解釈する方は、また機会を見て対応したいと思います。

[ ]
RE:07488 表示されない結合文字No.07489
秀まるお さん 12/09/19 09:27
 
>  結合文字を本当に正しく解釈する方は、また機会を見て対応したいと思います。

 秀丸担当とも相談したのですが…

 とりあえず、V8.21β6の後にV8.21正式版をアップロードさせていただく予定
としまして、その後で、V8.22βとして、出来る限りの結合文字対応をする予定
とさせていただきます。

 (今いじったらレベルダウンが怖いので…)

[ ]
RE:07489 表示されない結合文字No.07491
秀まるお さん 12/09/19 12:08
 
 追加追加ですみません。

 縦書きの時に「セ」+「゜」等が出ない件ですが、やはり、フォントが対応し
てないので出ないようです。

 縦書きの場合でも、フォントが対応してる、例えば「は」+「゜」のような場
合は「ぱ」としてうまく出るようです。

 V8.22として結合文字対応をするにしても、基本的にフォントが対応してない
結合文字は結合しない扱いで出すしか無いと思います。なので、縦書きの場合は
(フォントが対応しない限り)無理ということでお願いします。

[ ]
RE:07491 表示されない結合文字No.07492
colder さん 12/09/19 14:29
 
coldeです

> 縦書きの時に「セ」+「゜」等が出ない件ですが、やはり、フォントが対応し
>てないので出ないようです。

調査ありがとうございます
フォントの問題でしたか。
ㇷ゚(小書きのプ)はともかくセ゜なんかは横書きと縦書きで字体の差が
ないので表示可能だろうという考えは甘かったようです。

> さらには「A」とかに対しても結合文字にはならないです。現状で秀丸
>エディタでそういう風に書いてしまうと、秀丸的には結合文字だと思って動作し
>てしまうようで、結果的に「゜」の部分が見えなくなってしまいます。

これは現状のままでいいのではないでしょうか。
まともな文章で、こういう例は出てこないし、
正しくない基底文字と結合文字の組み合わせでまともに表示できないのは仕方がない
と思います。
(そもそもどう表示されるべきなのか判らない)

[ ]
RE:07492 表示されない結合文字No.07503
秀まるお さん 12/10/04 11:27
 
 今さらのコメントになるので見ていただけるかどうか分かりませんが、念のた
め書いて起きます。


 ˩˥ などの文字がうまく結合して表示されない件は、最近のβ版で
は直っているんですが、すみませんがV8.21の正式版ではV8.20相当に一回戻させ
ていただきます。

 実は、この修正のせいで、例えばメイリオフォントの場合にカーニングが効い
てしまうようになってってて、表示される文字列とカーソル位置がずれてしまう、
レベルダウンのバグが起きてしまってます。これを直すためには、とりあえず上
記の結合文字は結合しないで描画させる方が安全だという結論になりました。

 結合文字もちゃんと表示させつつカーニングも効かないようにする方法も分か
ってはいるんですが、V8.21に入れてしまうのはちょっと危ないかと思いました。
なので、V8.22以降で、そもそも現状で結合文字がある時にカーソルの動きがお
かしい所も含めてまとめて修正したいと思います。

 よろしくお願いします。

[ ]
RE:07503 表示されない結合文字No.07504
秀まるお さん 12/10/10 15:58
 
 ついでに、今さらのコメントになりますが…、

 縦書きの時に、結合文字の濁音/半濁音付きの「セ」+「゜」等が出ない件で
すが、独自に「セ」と「゜」を重ね書きして表示可能にします。

 それと、「゜」だけ単独で出てくる場合に、それが、フォントによっては文字
幅0になってしまうことが多いんですが、そういう場合も無理矢理文字幅を適当
に確保して表示出来るようにします。例えばメイリオフォントの横書きとかで
「゜」とかの単独文字が現状うまく出ないんですが、うまく出るようにします。

 ついでに書くと、たぶん誰も使ってなかったんだと思いますが、タイ語の結合
文字なんかも全然うまく動いてなかったので、これもちゃんと対応します。

[ ]