JavaScript言語仕様拡張大作戦2 ~ヒアドキュメント編~
ヒアドキュメント
複数行の文字列を埋め込むようなヒアドキュメントって JavaScriptだと構文エラーでできないんですけど、これを実現します。
エラーになる例
var js = " <html> <body> ヘイ提督ゥ!HTML直打ちもいいけどサー、改行と場所をわきまえなヨー。 </body> </html> ";
これならOKだけど、めんどくさいし読みづらい例
var js = "\ <html>\ <body>\ 制御文字?あぁ……ウザい。\ </body>\ </html>\ ";
Pythonでのヒアドキュメント例
pyhtml = """ <html> <body> Pythonの本気を見るのです! </body> </html> """
JavaScriptヒアドキュメントのオレ仕様
こんな感じにすることにした。
var jshtml = ""/* <html> <body> 俺ヒアドキュメント! </body> </html> */;
実装
function _h(fn) { dat = fn.toString(); dat = dat.replace(/""\/\*([\s\S]*?)\*\//gm, function(va, v1) { v1 = v1.replace(/\n/gm, "\\n").replace(/"/gm, '\\"'); return '"'+ v1 + '"'; }); return eval(["(", dat, ")()"].join('')); } $(function(){ //jQueryつかう _h(function() { //この中は独自仕様になる $("body").append( ""/* <pre style="font-size:30px; font-family:"MS P明朝"> 第壱話 使 徒、襲来 </pre> */ ); }); });
実行結果
第壱話 使 徒、襲来
まとめ
CoffeeScriptとか使わなくてもヒアドキュメントできた。
注意点としてコメントアウト部分はかなり昔のFireFox限定でtoStringで取得されるプログラムから消えてしまうようです。最新のFireFoxだと問題ないです。
コメントアウトを使うと何を書いてもエラーにならないので、JavaScriptの文法を完全無視できます。
例えばこんな感じで別言語で書いたりできそう。 JavaScriptで他言語を実装すればですが・・・。
//C++で書く _cpp(function(){/* int i; for(i=0;i<10;i++){ printf("hoge"); } */});
こんなのは便利そうなので誰か実装するべき
//吉里吉里のシナリオをそのまま書ける _kirikiri(function(){/* [wait time=200] *start|スタート [cm] そんなこと言う人、嫌いです。 */});
つづく。