WSHでCoffeeScript簡易コンパイラを作る

// CoffeeScript簡易コンパイラ
// CoffeeCompile.jse

// カレントをスクリプトのあるパスにする
var fso    = new ActiveXObject("Scripting.FileSystemObject")
var WShell = new ActiveXObject("WScript.Shell")
WShell.CurrentDirectory = fso.GetFile(WScript.ScriptFullName).ParentFolder.Path

// coffee-script.js読み込み
try {
	eval(readFile("coffee-script.js"));
} catch (e) {
	WScript.Echo("coffee-script.jsが見つかりません。\n" +
				"http://coffeescript.org/extras/coffee-script.js\n" + 
				"から取得して同じパスに配置してください。");
	WScript.Quit();
}

// 引数取得
var wargv  = WScript.Arguments;
if (wargv.length == 0) {
	WScript.Echo("引数を指定してください。");
	WScript.Quit();
}
var file = wargv.item(0);

// コンパイル
try {
	var program = readFile(file);
	var compiled = CoffeeScript.compile(program);
	writeFile(file + ".js", compiled);
	WScript.Echo("ok");

} catch (e) {
	var msg = "[LINE:{line}, COL:{column}] {message}"
				.replace("{line}"   , e.location.first_line   + 1)
				.replace("{column}" , e.location.first_column + 1)
				.replace("{message}", e.message);
	WScript.Echo(msg);
}

function readFile(file) {
	var ts = fso.OpenTextFile(file);
	var text = ts.ReadAll();
	ts.Close();
	return text;
}

function writeFile(file, text) {
	var ts = fso.OpenTextFile(file, 2, true);
	ts.WriteLine(text);
	ts.Close();
}