From: "NARUSE, Yui" Date: 2008-09-15T15:46:57+09:00 Subject: [ruby-dev:36306] Re: 合成文字の2コードポイント目 Tanaka Akira wrote: > In article <48CC86FD.3000409@airemix.jp>, > "NARUSE, Yui" writes: > >> たぶん「grapheme cluster」が Ruby の「character」ですよね。 > > えぇ。実装したのは (extended) grapheme cluster です。 > >> すぐそこにまで codepoint がくるならば each_codepoint を >> 提供してもいいと思うんですが、わざわざ用意するのは面倒ですね。 >> >> 今でも each_char は String、each_codepoint は Integer なので、 >> 相応の区別はされるかなぁと期待しますが。 > > 面倒、とは? > ちょっと意図がつかめません。 each_codepoint を実装するからには、見せるに値するものを見せるべきであろうので、 Unicode 系の場合は each_codepoint の返す codepoint は、 Unicode scalar value であるべきでしょう。 この前提と、「文字が複数のコードポイントを持つということを認め」ないことの両立が可能か、 という意図でした。 可能ならば現時点で each_codepoint を許しても将来首が絞まることはありません。 難しくてかつ、複数コードポイント所持を認めない可能性があるならば、 現時点での each_codepoint は見送った方がいいでしょう。 わたしは複数コードポイントを持てるようにした方がいいと思っているのですが、 そちらに進んだ場合でも大丈夫なのか確認しておきたかったと。 >> ここも気になるところなのですが、1 grapheme cluster って、 >> OnigCodePoint に入りきるんですかね。 >> >> たとえば、U+FDFA (ARABIC LIGATURE SALLALLAHOU ALAYHE WASALLAM) の NFKD は >> > U+0639, U+0644, U+064A, U+0647, U+0020, U+0648, U+0633, U+0644, U+0645> >> という 18 Unicode scalar value になります。 >> これは両者とも「1 文字」だと思うのですが、後者は 1 OnigCodePoint に >> 収まりませんよね、たぶん。 >> 合成文字が有限ならば連番を振ればいいのでしょうが、そうも行きませんし。 > > oniguruma は OnigCodePoint をなんに使っているんですかね。 > > character class には使ってるようで、そこはたしかに厄介そうで > すが、他には。 あ、なるほど、oniguruma のレベルでは確かにあまり問題になりませんね。 -- NARUSE, Yui