2007-05-17 (Thu) [長年日記]
▲ NKF moduleを実装
JRubyのNKF moduleは、定数だけを定義したダミーのビルトインモジュールが含まれていて、本来 あるべきモジュールメソッドがひとつも呼び出せなかった。
そこでビルトインモジュールは削除して捨ててしまい、NKF module相当を動くように実装してみた。 しかし今更Pure JavaでNKFを再実装するのも不毛チックにも思われたので、 今回はkconvがそこそこ満足に動く範囲にとどめて実装している。
- [JRUBY-934]: Unsupported NKF module
無事に取り込まれ*1、先ごろ出たJRuby 1.0.0RC2には含まれている模様*2。
- guessで自動判別できるエンコーディングはiso-2022-jp/Shift_JIS/EUC-JPの三つ。x-JISAutoDetectを使うため。
- 特に指定が無いときは入力エンコーディングを自動判別(x-JISAutoDetect)する。
- $KCODEが指定されていたら、$KCODEで指定されたエンコードが入力されることを期待する。(これはMRIと仕様が違ってくるので変えるかも)
- Shift_JISはWindows-31J(cp932)が指定されたものとして振舞う。
ただし今のNKFではMIME encode/decodeをまったくサポートしていないので、 いずれ追加しようと思ってる。単純に作るとJavaMail APIを使うのが楽チンだが、 mail.jarの追加が可能か交渉しないといけないな。
ということで今度のJRubyではnkf呼び出しを削除するパッチを当てなくても、 Praggerが動くんじゃなかろうか。動くといいな...
実は二番目の問題のほうが根が深くてinstance_evalへの第2引数に 文字列以外のオブジェクトを渡したときに発生するJRubyのバグでした。
以下のIssueでパッチ&報告済み。
- [JRUBY-942]: ClassCastException occurs when Object#instance_eval is invoked
こちらは1.0.0RC2には間に合わなかったみたいだが、次のリリースあたりでは直るんじゃないかな。試したいときは上記パッチをtrunkに当ててください。