rcodetools 0.8.3 リリース
rcodetools 0.8.3 をリリースしました。以下のバグを修正しました。
「 gem install rcodetools 」、あるいは http://rubyforge.org/projects/rcodetools/ から tarball をダウンロードしてください。
rcodetools.el も忘れずに更新してください。
やっぱりエンコードが utf-8 だと xmp が動かない - ひがきの日記
$ xmpfilter -S ruby19 --dev --detect-rbtest utf8ng.rb # こっちは NG
/usr/local/lib/ruby19/gems/1.9.1/gems/rcodetools-0.8.1.0/lib/rcodetools/xmpfilter.rb:41:in `detect_rbtest': invalid byte sequence in Windows-31J (ArgumentError) from /usr/local/bin/xmpfilter:79:in `'
$ LANG=ja_JP.UTF-8 xmpfilter -S ruby19 --dev --detect-rbtest utf8ng.rb
(動作する)
これはロケールエンコーディング以外のエンコーディングのスクリプトを作成した場合で確認できました。
Ruby 1.9 の正規表現マッチはエンコーディングが正しく設定されてないとできないことが原因です。しかし、ロケールエンコーディング以外のファイルを読み込んだ時点でエンコーディングが狂ってしまうのではまります。*1
ASCII 文字でしか正規表現マッチしないので、とりあえず以下の行を加えてバイナリとして処理してみました。強引な気がしますが、どうなんでしょうね…
Encoding.default_external = "ASCII-8BIT" if RUBY_VERSION >= "1.9"
それに伴い、 column はバイト数で指定する必要がでてきます。 EUC-JP や Shift_JIS はバイト数=文字幅なので問題ありませんが、 UTF-8 はバイト数と文字幅が異なるので注意。そのように rcodetools.el も修正しました。
rct-complete の Ruby 1.9 用クイックハック - ひがきの日記
Ruby 1.9 を使っていると、以下のコードを補完できない。
# -*- coding: utf-8 -*-
"こんにちは".enc同じように、文字列に対して enc で始まるメソッドを探してるだけなのに。
これは Ruby 1.8 でも起こります。なぜなら、バイト数と文字幅が異なるからです。
追記
方向性としては magic comment を調べて force_encoding のが正解ですね。
Ruby 1.9 的にはそれが正しいでしょう。しかし、( Ruby 1.8 用の) magic comment が指定されていないスクリプトの場合はどうするのかは悩みます。 rcodetools 自体は Ruby 1.9 で動かしていて、注釈・補完用に内部で起動する Ruby インタプリタが Ruby 1.8 …というケースです。
なので、 Ruby 1.9.2 が出てしばらくしたら encdet.rb を使おうかなと思っています。そのころには標準添付になっているかな。
/\\/=~"表".encode("Shift_JIS").force_encoding("ASCII-8BIT")がマッチしちゃったり
まあ rcodetools を Ruby 1.8 で動かした場合も起きるでしょう。