gouketsu.netで使用しているtDiary(ほぼCVS最新)で、追記や編集で本文に
麻婆豆腐、野菜炒め、しめじと玉葱とわかめのみそ汁
と入力すると、 なぜか入力内容が消えてしまう現象が発生。 プレビューを行っても、何も表示されない。
「野菜炒め、」の部分がなければ問題がない模様。「炒」の字が怪しそうなので、試しに「炒飯」とだけ本文に入力したところ、同様に何も表示されなかった。
とりあえずは、「野菜炒め」と「、」の間に半角スペースをはさむことで回避できたのだが、気持ち悪い現象なので、調査。
プレビューでも発生するため、まずは
class TDiaryPreview
のあたりに適当にprintをはさんで一時ファイルに変数の内容を書き出す。 eval_rhtml の変換でどうなっているか確認したところ、すでに内容が消えている。最初、do_eval_rhtml での変換が怪しいのかと考えたのだが、どうやら do_eval_rhtml での変換以前に、すでに入力は消えてしまっていることが判明。
そこで、initialize の
@body = @conf.to_native( @cgi.params['body'][0] )
に注目。本文に「炒飯」があれば、@cgi.params['body'][0]も@bodyも「炒飯」のはず。前者は「炒飯」で間違いなかったが、後者が空文字になってしまっていた。どうやら、to_native が怪しいらしい。
grep で探したところ、どうやら tdiary/lang の下にある各言語向けの実装で定義されているらしい。日本語の場合は ja.rb だが、この to_native の実装を見ると、NKFライブラリを利用している模様。to_native の第二引数は存在しないので、
NKF::nkf( "-m0 -#{from}e", str )
の from は空文字、したがって
NKF::nkf( "-m0 -e", str )
と呼ばれる。どうも、この変換が偏食家らしく、「野菜炒め」や「炒飯」が嫌いらしい。試しに、to_nativeの第二引数がない場合、fromに'E'を与えるようにする、すなわち
NKF::nkf( "-m0 -Ee", str )
となるようにしたところ、「野菜炒め」も「炒飯」も好き嫌いなく処理するようになった。
こんな対処方法でいいのか、よくわからないが、しばらくは、これで様子を見ることに。
*Messages* の更新情報取得には、antenna.lirs もしくは index.rdfをご利用ください。 豪傑アンテナ の LIRSからも取得可能です。