例によってスーパーpreがおかしい (ので はてなダイアリーへの要望 です)

えーと、スーパーpreでのエスケープですが、

 ====

をきちんとエスケープしてくれません。仕様?本気?上で一見エスケープされているように見えるのは、行頭にスペースをいれて、====が機能しないようにしているからです。行頭にスペースいれないと、何も表示されません。

これは仕様ですか?それともバグですか?>id:hatenadiary
えーと。そろそろ無闇な機能拡張はやめて、一度実装モデルを見なおすべきじゃないかなあ。(また嫌がられるようなことを言ってみるテスト)

また「先頭に空白を挿入するのが、標準的かつ簡易な…」と言われてしまうかもしれないので、補足。

そもそも、エスケープって「ある文章」をはてなの記法で解釈させなくするものでしょ?エスケープする能力がない場合には、書きたい内容を全てチェックして、はてな記法がまじって変に解釈されないかどうかチェックする必要がでてくる。エスケープ記法がないと、プログラミングソースとか、そもそもはてな記法の解説をしたい場合に、いちいちはてな記法の全てを頭にいれておいて、エスケープしたい文章の全てに、それがまじってないかどうかチェックしないといけない。エスケープ記法っていうのは要するにこれを避けるためのものだ。エスケープしたい文章のチェックを全くしなくても、一発エスケープ記法書いときゃ安心できるのが嬉しいところなはず。

でも今のpreやスーパーpreを見ると、すでにエスケープされる記法とされない記法が存在してる。結局、それぞれのエスケープ機能でエスケープされない全ての記法を頭にいれておいて、エスケープしたい文章の全てにそれがまじってないかどうかチェックしないといけない。確かに、スーパーpreを使うと、モジュールと、====以外はちゃんとエスケープされるみたいだけど、一個でも解釈される記法があると結局文章全部チェックしないといけないのだよね*1。そうすると実はほとんどエスケープ記法の意味がなくなってしまうのです*2。そもそも今みたいに記法が増えるたびにエスケープの対象が変わっちゃうと、昔の日記の中で意図せず解釈されちゃうところがでてきてびっくり、みたいにならないのかな。

だから一発、「これいれときゃ、この最終区切り文字以外はなにがあってもエスケープします」ってのを用意しとけばいいと思うんだけどな。今の場合だと、一番実装が簡単なのはそういうモジュールを用意することだと思うのだけれど。ちがうのかなあ。違うんだろうなあ。

単にshやperlrubyにある、ヒアドキュメントがあればいいだけかな…

*1:実は、終了を現わす区切り文字だけはどうしてもチェックしないといけない。でも今みたいに記法が増えるたびにエスケープされるのかされないのかチェックしないといけないのと、(ほぼ)未来永劫、ある固定文字以外はエスケープされるのが保証されているのとは、えらい違い

*2:特に、モジュールが展開されるのはひどい仕様だと思っています。何故なら、モジュールは自分が書いた内容をひどく書きかえてしまうから。例えば、プログラミングソースをはりつけて、たまたまモジュールと解釈される文字列がまじってると、元の記述が跡形もなくなります。こうなってると、ちょっとやそっとでは簡単に修正できませんよ。