WEBrick の Request/Response を cgi.rb のインターフェイスに合わせるのが 激しく無駄に思えてきたので、webrick/cgi をベースに再構成することにした。 面倒だろうと思っていたが意外と簡単であった。
もっとも変更差分はかなり大きいので、 cvs up するときは用心してください。 また、webrick/cgi.rb は Ruby 1.8.1 以降にしか入ってないので、 Ruby 1.8.0 で動かしている場合はどっかから webrick/cgi を調達してください。 それでもだめなら webrick をまるごと 1.8.1 ので上書き。
ちなみに、特に先端追従をモットーにしてるというわけではありません。 ありませんが、開発初期 (ver 0.x のあいだ?) に限っては先端指向でやる予定です。
いつ 1.0 になるかってのも二転三転してますが、 日本語ページ名と細かいエラー処理は解決しておきたいところです。 でも時間かかりそうなら適当に切り上げて 1.0 にしちゃうかもー。
(00:44)
http://www.rubyforge.net/projects/ripper/
勢いだけで Ripper を CVS HEAD に追従させる。 ようやく標準添付ライブラリが全部通るようになった。
ただ、今度は 1.8.1 で使うと落ちると思う。 ID がらみで、動いてる Ruby の parse.y と トークンが全く同じでないとまずいからだ。 今は CVS HEAD に合わせているので、 トークンが一つ足りない 1.8 では落ちるはずだ。
で、次は自分のプログラムでもパースしてみるかーと思ったらいきなり問題発生。 改行が CR LF のファイルだと "\\\r\n" が 次のトークンと同じイベントで出てきてしまうという、謎のバグだ。 行をまたぐときに内部で汚いことをやっていたのが原因だった。
しかしこのバグは内部構造の関係上、非常に直しづらい。 とりあえず落ちないようにはなってるので、そのうち考えよう。
つーか、実を言うと、 今の Ripper っていつどこからイベントが発生してるのか 自分でもよくつかめてなかったりする。 イベントの発生タイミングを完全に把握するには 即ち Ruby のパーサの動作を完全に (先読みまで含めて) 把握してないといけないわけで、 それはなんとうんざりすることであろうか、いとおかし。
(02:52)
Copyright (c) 2002-2007 青木峰郎 / Minero Aoki. All rights reserved.