2014/03/16

unicode の east asian ambiguous 文字 : その2

East Asian Ambiguous な設定をして一段落、と思っていた矢先、¬ の記号が「全角で表示されるのに半角扱いの移動」になる。
さて、今回は Vim でも Emacs でも再現するので設定の問題じゃなさそう。

ということで ¬ が East Asian Ambiguous なのか、ということから調べてみる。
vim で ga すると 00ac らしい。
その辺りを調べてみる と、00ac は NOT SIGN で、それとは別に ffe2 に FULLWIDTH NOT SIGN があるらしい。むむ。
not sign なのに full width になってるのでこれはフォント側の問題っぽい。

ということで Ricty を再生成することに。最新 stable は 3.2.2 なので
$ git clone https://github.com/yascentur/Ricty.git
$ cd Ricty
$ git checkout -b 3.2.2
$ ./ricty_generator.sh  -a -n "3.2.2-half" auto
くらいで。

フォントは InconsolataMigu 1M が必要。あと依存で fontforge。 brew にあった。
-a は full width を無効化するオプション。なのでこれで予想外の全角化は消えるはず。
-n はフォント名に追加で string を足すオプション。 Ricty 3.2.2-half くらいになる。
Ricty 3.2.2 half にしたかったんだけれど、内部処理でスペースを消してるらしくて-にする。

フォントを変えたらどうにか ¬ が半角化した。
フォントを変えただけで、VimとかEmacsとかの設定は基本的に前回から変えてない。

あと、emacs の設定が 22 と23以降で別々な文字テーブルを参照していたのでどうにかこうにか統一する。コピペ用 gist は一番下。
emacs 22 の utf-translate-cjk-set-unicode-range は要素に #x00A1 とかがあるとダメで、(#x00A1 . #x00A1) にしないといけないらしい。なんでだろ。
とりあえず emacs 23 用の設定の方が大量に書かれていたので、それをベースにまとめる。
これでどうにか同一テーブルを参照するようになった。

あとこの辺
FFE0;F # FULLWIDTH CENT SIGN
FFE1;F # FULLWIDTH POUND SIGN
FFE2;F # FULLWIDTH NOT SIGN
FFE3;F # FULLWIDTH MACRON
FFE4;F # FULLWIDTH BROKEN BAR
FFE5;F # FULLWIDTH YEN SIGN
FFE6;F # FULLWIDTH WON SIGN
とかが全角化対象じゃなかったので追加。A幅じゃなくてF幅なので East Asian Ambiguous とはまた別の問題なのかもしれないけれど。

A とか F とかは Unicode が持ってる property らしい。
A は Ambiguous で、 F は Full width とかいろいろある。
詳しいのはこの辺。というか本家っぽい。
おかしい文字があったら文字コード調べてみて、ここでUnicodeの設定的にどうなっているかとか確認しないと、フォントの問題なのかとかの切り分けができなさそう。

というかこういう風にいろんなところでズレてたりすると結構面倒感。
対症療法を取っているけれど、どこが問題でどっちを直すべきなのかとか結構厄介だなー、とか。

ということで記号周り厄介だなー。また何か発生しそう。
emacs 側なら Unicode 指定で width 指定してしまえばどうにでもなってしまいそう。
Vim は ambiwidth の対象かそうじゃないかでまた一悶着ありそう。

まー、 ¬ の問題は乗り切った、ということにしたい。

コピペ用設定gistはこんな感じ。

0 件のコメント:

コメントを投稿