じゅんじゅんのきまぐれ このページをアンテナに追加 RSSフィード

2011-10-04 wshをいじる

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

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/junjun777/20111004/javascript_here_document