2011年10月22日

coffeescriptコンパイラを更新!

以前、WSHでcoffeescriptのコンパイルができるjsの記事を書いた

http://nmksb.seesaa.net/article/229407060.html

んだけど、あれ、実は弱点があった。
入力元coffeeファイルのエンコードがShift_JISでないとだめなんだ。
 
 
UTF-8大好きの俺は、htmlファイルもjavascriptファイルもすべてUTF-8にする癖があるんで、当然coffee-scriptもUTF-8になっていて欲しい。しかし、WSHエンジンはどうもShift_JISでないと受け付けてくれないようだ。どうすれば・・・

WSHでエンコードを変更すればいいんじゃね?

ま、とうぜんこういう案思いつくよね。色々調べたけど、ADODB.Streamというオブジェクトを使えばできるっぽい。
なぜエンコードを変更するのにDBオブジェクト・・・?という疑問はあるにしろ、ひとまずこの案採用しよう。

var rs = new ActiveXObject("ADODB.Stream");
rs.Type = 2; // adTypeText
rs.Charset = "utf-8";
rs.Open();
rs.LoadFromFile(input);
var src = rs.ReadText();
使い方の概要はだいたい↑。
Type = の部分でテキストかバイナリかを選択、Charset = の部分でエンコードを選択、って感じ。
これを以前のスクリプトに埋め込むと

// compiler.js
var fs = WScript.CreateObject("Scripting.FileSystemObject");
 
//coffeescriptを読み込んで評価
var path = WScript.ScriptFullName.replace(WScript.ScriptName,"");
eval(fs.OpenTextFile(path + "coffee-script.js", 1).ReadAll());
 
//
// ここからメインです。
//
var args = WScript.Arguments;
if (args.length == 0) {
    WScript.Echo("error: please Drag And Drop *.coffee file!");
    WScript.Quit(-1);
}

var input = args.Item(0);
var rs = new ActiveXObject("ADODB.Stream");
rs.Type = 2; // adTypeText
rs.Charset = "utf-8";
rs.Open();
rs.LoadFromFile(input);
var src = rs.ReadText();

//var src = fs.OpenTextFile(args.Item(0), 1).ReadAll();
var compiled = CoffeeScript.compile(src);
WScript.Echo(compiled);


こういうふうになるな。出力は相変わらずShift_JISだけど、これはまあ出力をコピペしてテキストエディタで処理するだろうから、いいか。
ラベル:CoffeeScript
posted by LoyalTouch at 17:03| Comment(0) | TrackBack(0) | クライアントサイド | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:


この記事へのトラックバック