UTF-8化開始

影舞の UTF-8 化を始めてみる。UTF-8 化しないといけない場所は、

  1. レポートの保存と読み込み
  2. 表示(テンプレート)
  3. ReportType の定義
  4. 検索
  5. 文字列の折りたたみ

ぐらい。できれば移行スクリプトなどを使わずに勝手に処理できるようにしたい。

とりあえず今日は厄介かもしれない 4 と 5 を。

4 はアルファベットの全角と半角が混ざった状態でも検索できるようにしているやつだけど、いらない気がしなくもない。EUC のときに全角を 2 バイトして処理していたのを 3 バイトで処理するように修正。決めうちでいいのかというのはあるけど、日本語に特有の処理は Config[:language] を参照するようにしておく。

そして問題の 5。折りたたみ処理は fold.rb でやってるんだけど、今見るとどうなってちゃんと動いてるのか謎だ。禁則処理とかも入ってるし。しょうがないので、今のコードは脇においておいて、一から考え直すことに。

大雑把に言えば、文字列中のマルチバイト文字の先頭の位置が折りたたみの候補にできる。UTF-8 の場合、マルチバイト文字の 1 バイト目は必ず上位 2ビットが 1 になっている、かつ、上位 2ビットが 1 なのはマルチバイト文字の 1 バイト目だけという仕様らしい。だから、作ってみると EUC の場合より簡単になった。とりえず禁則処理なしで作ってみて、そのあとテストコードも見ながら禁則処理を入れていってなんとか完成。

テストを -Ku オプションつきで動かすようにしたので、とりあえず終わった検索条件と折りたたみ以外で日本語が入ってるテストは全滅のはず。試すまでもないのでやってないけど。