WSH:JScript(javascript)でヒアドキュメント
VBScript版を書いたので、JScript版も書いてみた。
あくまで、WSHだからこその存在価値。
ODBCドライバー(oo4oとか)とこれを使って、SQLの書かれたスクリプトファイルが可能ですね!
書いたもの
var _scriptText = "" function GetHereDoc(name) { if(_scriptText.length == 0) { var fso = new ActiveXObject("Scripting.FileSystemObject"); var f = fso.OpenTextFile(WScript.ScriptFullName); _scriptText = f.ReadAll(); f.Close(); f = null; fso = null; } var re = new RegExp("^\\s*/\\*\\s*" + name + "[ \\f\\r\\t\\v]*\\n((.|\\s)*?)(?=\\n[ \\f\\r\\t\\v]*\\*/)", "m"); var ret; if(re.test(this._scriptText)) { ret = RegExp.$1; //ret = ret.replace(/^[ \\f\\r\\t\\v]*/gm, ""); } return ret; }; /* 松尾 芭蕉 夏草や 兵どもが 夢の跡 */ /* 小林 一茶 我と来て 遊べや親の ない雀 */ /* 正岡 子規 柿食へば 鐘が鳴るなり 法隆寺 */ WScript.Quit((function() { WScript.Echo(GetHereDoc("松尾 芭蕉")); WScript.Echo(GetHereDoc("小林 一茶")); WScript.Echo(GetHereDoc("正岡 子規")); return 0; })());
グローバルの汚染は気にしない。
あんまり考えずに作ったもので。
javascriptはvbscriptと違って、ブロックコメントがあるので、それを主に利用。
横道
VBScriptの時に、ブラウザーでやりたい場合をちょっとだけ触れましたが、先人がいますね。
たくさん。すばらしいのが。
調べず適当なことを書くと、痛い目にあいますね、、、。
JavaScriptでヒアドキュメントを使うライブラリを作った。 - こせきの技術日記
また、ここの参考ドキュメントにある、
とてもシンプルに自分自身が属する script 要素を取得 - IT戦記
OreScript時代の幕開け - yukobaのブログ
が、とてもとても。
2006年〜2008年の記事を見つけて喜んでるとは、情けない限りですが、
ブラウザーの動作を利用して、scriptタグを掴む方法
var currentScript = (function (e) { if(e.nodeName.toLowerCase() == 'script') return e; return arguments.callee(e.lastChild) })(document);
と、scriptのtypeを勝手に使って、ブラウザに解釈させないドキュメントを書くのは、知らなかったもので。
なお、scriptのtypeは、
オレオレ言語の MIME タイプ: Days on the Moon
にあるように、「application/x-...」か「application/x....」がよさそう。
でも、タイプ量から「text/x-...」にしてしまうかもしれない悪寒。
いや、上のscriptタグを掴む方法を使えば、MIMEタイプの勝手定義はいらないか?
ヒアドキュメントライブラリーを使う手もありますが、お手軽には勝手script typeか非表示ドキュメントですね。
今回の失敗
javascriptで「*」にマッチさせたい場合、「\*」でなく「\\*」を渡す必要がある。
さもないとどこかで「文字の繰り返しを表す正規表現演算子が不正です」とかなりかねない。
定義されていない識別子です。 (Jscript)
javascriptの\sには、改行(\r\n)が含まれている。