From: TOYOFUKU Chikanobu Date: 2001-07-24T02:54:46+09:00 Subject: [ruby-dev:14015] Re: m17n ruby 特に TRON 文字コード 豊福です。 まつもとさん > |素人考えですが must[1] が islead でなくても skipバイトを超える > |まで先頭文字ポインタずらしていくようにすれば BMサーチ使えない > |でしょうか。 > > 使えるかもしれません。パフォーマンスが気になりますけど。実際 > にやってみないと(コードを見ないと) 断言できません。 釈迦に説法ですが re_compile_pattern(...) ... hogehoge = m17n_islead(enc, bufp->must[1]); ... bm_search(...) ... if (hogehoge) { i += skip[big[i]]; } else { /* p はいつも文字の先頭を指す */ p = &big[i-llen+1]; pe = p + skip[big[i]]; while (p < pe) { p += m17n_mbclen(encode, *p); } i += p - p0; } ... でうまくいかんですかね。 > 0xffはマルチバイトマッチにもかかわらず、単一のバイトにマッチ > したい場合に正規表現内部で、0xff<バイト>という形で表現されま > す。エスケープみたいなものですから、マルチバイトの中の0xffま > ずくないです(リテラル0xffは0xff0xff と表現されます)。 if (had_num_literal || c == 0xff) { BUFPUSH(0xff); のとこですか。 > でも、 > M17Nではそもそも0xffが不要という気もします。 詳しいことはわからないのですが今のままだとマルチバイトの中に 0xff があると NO_BM になってしまいますよね。 --- 豊福 toyofuku@juice.or.jp