From: "NARUSE, Yui" Date: 2008-09-14T12:30:34+09:00 Subject: [ruby-dev:36293] Re: 合成文字の2コードポイント目 成瀬です。 Tanaka Akira wrote: > In article , > Yukihiro Matsumoto writes: > >> そんな気はします。Unicodeでは文字を定義することをあきらめて >> るような気がしますが。 > > 完全に定義することをあきらめるからといって、コードポイントの > ままで済ますわけではないようなので。 たぶん「grapheme cluster」が Ruby の「character」ですよね。 >> その辺には踏み込みませんが、将来のことを考えると、そういう仕 >> 組みを用意しておくのが親切なのかもしれません。 >> >> しかし、エンコーディングを定義するのにrb_enc_precise_mbclenと >> rb_enc_precise_mbcharlenの両方を必要とするのはあんまりうれし >> くありませんねえ。 > > まぁ、each_char と each_codepoint を両方実装するとすれば結局 > どちらも必要になりますが、似ていてわかりにくいというのはあり > ますね。 すぐそこにまで codepoint がくるならば each_codepoint を 提供してもいいと思うんですが、わざわざ用意するのは面倒ですね。 今でも each_char は String、each_codepoint は Integer なので、 相応の区別はされるかなぁと期待しますが。 > あと、oniguruma をそのまま動かすにはコードポイント単 > 位に見せておくのが簡単なようです。 ここも気になるところなのですが、1 grapheme cluster って、 OnigCodePoint に入りきるんですかね。 たとえば、U+FDFA (ARABIC LIGATURE SALLALLAHOU ALAYHE WASALLAM) の NFKD は という 18 Unicode scalar value になります。 これは両者とも「1 文字」だと思うのですが、後者は 1 OnigCodePoint に 収まりませんよね、たぶん。 合成文字が有限ならば連番を振ればいいのでしょうが、そうも行きませんし。 -- NARUSE, Yui