高木さんの日記で、

そうすると、「h」付きと「h」無しを逆にしたらよかったのにと思えてくる。

ということだったので、ERB を改造してサクッと作ってみた。 rerb。

とりあえず、h の意味を逆転させてしまうと（hを流用してしまうと）それはそれで 混乱すると思ってそれは避けたのだが、高木さんは「hの逆」を命名してくれなかったので、 とりあえず "raw html" ということで r を使った。何かいいアイディアはないものか。

ついでに、rerb-cgi という名前で起動された場合は CGI モジュールを内包して、 ローカル変数 cgi, header 経由で引数や出力ヘッダにアクセスできるようにしてみた。 そういうわけで、test.ehtml は (rerb-cgi という実行ファイルを用意すれば) 単独でcgiとして動作して ……/test.cgi?q=%3c%3d%3e%3f&p=2nd+param とか起動しても ちゃんと quote が行われるような例になっている。

内部的には、Ogawaさんの

で、やっぱり思ったのは、PHPにしろPerlにしろSQLにしろ、String Processingの範疇にあるプログラムは、ほとんど常に処理中の文字列が指し示す「型」を意識しなければ作れないにも関わらず、最もベーシックな型である「文字列型」だけを使って実装されていることに、一番の問題があるのではないか、ということです。

とか、この「こめんと」その他でも何度となく「HTML と String は違う型だと思え」とは主張してきたわけですが、 それをちょっとだけ踏まえて HTML 文字列型は RERB::Rerb_html という型で実装されていたりします。 (というか, r 埋め込みを実装するには今の ERB/Ruby を前提にするとそうせざるを得ない)

実際に作ってみると、本当はもっと強く型を意識して言語から設計しないといけない気もしてきたり するのですが、それはおいおい研究ネタにでもすることにして、quick hack としては 結構面白いものができたかな、と思ってみたり。 あ、header 部分の RHS 対策とか、 attribute を single quote で括ったときの処理とか、 「これを使えば万全」になるような細工は全然してないので気をつけてね :-)