2008年10月14日火曜日

WSHでJemplate

前に「文房具としてのWSH」ってエントリーを書きました。

http://chushoww.blogspot.com/2008/09/wsh.html

このとき、WSHスクリプトでJemplate使えたら便利そう、今度やってみよう、なんていってたわけですが、ちょっと時間ができたのでホントにやってみました。

問題なく動きますね。

Template Toolkit の記法で、たとえば、template.html っていうファイルを作成して、これを、Jemplate でコンパイルしますね。

jemplate --runtime=lite --compile template.html > template.js


みたいにして。

そして、出来上がった template.js を wsf ファイルにインクルートします。

<?XML version="1.0" standalone="yes" encoding="utf-8"?>
<package>
<job>
<script language="JScript" src="template.js" />
<script language="JScript">//<![CDATA[

// your code

//]]></script>
</job>
</package>


そうすると、

var data = {
// some keys and values
}
var str = Jemplate.process('template.html', data);


これで、変数 data の値を template.html に展開した文字列が変数 str にちゃんと入ります。

CSVデータを元に一定のフォーマットで大量のHTMLファイルを生成したいときなんかに重宝しそうですね。ファイル生成を行うマシンに特別な環境設定を行う必要もないですしね。でも、Jemplateをコンパイルしなくちゃいけないのが、ちょっと面倒かな。

あと、WSHでローカルのテキストファイルを簡単に取り扱うためラッパーも書いてみました。

http://code.google.com/p/wsh-sugar-folder/source/browse/trunk/folder.js

これをインクルートして使うと、

http://code.google.com/p/wsh-sugar-folder/

にも書きましたが、

var f = folder.getFileByFilename( filename )
f.innerStr( str )


みたいなかんじで、ブラウザでJavascriptを動かしてDOM操作を行う感覚で簡単にテキストファイルの内容を出し入れできるようになります。ファイルの内容をCSVデータとして読み込むこともできます。

Jemplate とこれを一緒に使うと、

for ( var i in folder.files) {

if ( folder.files[i].filename.match(/\.csv/) ) {

recs = folder.files[i].csv()

var data = {
"recs" : recs
}

var str = Jemplate.process('template.html', data);

var output_filename = "output" + i + ".html";

folder.create( output_filename, str )

}

}


なんて、こんなことができるようになります。

まあ、時と場合と人によりけりですが、これはけっこう便利なんじゃないかなって思ってるんですけど、どうでしょう。

0 件のコメント: