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;
})());

グローバルの汚染は気にしない。
あんまり考えずに作ったもので。
javascriptvbscriptと違って、ブロックコメントがあるので、それを主に利用。

横道

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)が含まれている。