SkRegExpのUTF-8対応

15日に書いたとおり、ぽっかり時間が空いたのでネットを巡回していました。

これもそのときに見つけたネタです。

SkRegExp を FreePascal に移植しようとした方がいらっしゃいました。

結局うまく行かなかったようですが。

SkRegExp は UTF-16 が前提で書いてます。

それをUTF-8に対応させるのは「ものすごく大変なんだろうなあ」と、他人事のように思ってしまいました。

文字列比較関数群を書き換えなければなりません。REStrLComp とか、REStrLJComp とか。

REStrPos などの下請けの文字列検索関数も変更が必要です。

IsLeadCharをはじめとする文字種判定関数の一部も書き換えが必要です。

文字列変換関数群もUTF-16ありきの実装ですからココの書き換えも必要です。

GetREChar などの文字列の入出力関数群もそのままでは使えません。

あと、一番大変だと思うのが、文字列を読み進める関数です。

SkRegExp では CharNext と CharPrev の2つの関数は文字単位で次に進めたり、前へ戻しています。

まあ、これは関数の内部を書き換えればいいでしょう。

厄介なのは、文字を読み進めるのに CharNext ではなく Inc を使っている箇所があることです。

これはせこく処理速度を稼ぐため、意図的に行なっていることです。

私が SkRegExp を UTF-8 化するなら、まずはココの書き換えからやりますね。

Inc を CharNext に、Dec を CharPrev に書き換えるコトから始めます。

さて、対処方法がわからないのはTREQuickSearch クラスです。

UTF-8 の場合、SkipTable をどうすればいいのでしょうか?

私にはわかりません。

そんなこんなで、ソースコードの場所で言うと、SkRegExp の上の方の書き換えを迫られることになるでしょうね。

いずれにしろ大変な作業になることは間違いありません。

私はちょっとごめんです(笑)

SkRegExpの最新バージョンはコチラからダウンロードできます。

コメントを残す

メールアドレスが公開されることはありません。