Template Engine on JRunScript

JRunScriptでJSmartyする

JSmartyとかはDOMなどを利用していないのでDOMがないような環境つまりスパイダーモンキーとかライノーとかでも動くようにすることができます。JSmarty/internals配下にあるsystem.***.jsが各環境用の定義ファイルとなっていてそれをいじって読込むと動くようになります。少なくともAJAJAとJRunScript(javax.script.*含めて)動くようにしています。

jrunscript -f JSmarty.js -f JSmarty/Compiler.js

smarty = new JSmarty();
smarty.assign('foo','Hello World!!');
smarty.display('string:{$foo}');

Hello World!!

ただ0.2.0で配布しているsystem.mustang.jsではプログラムミスにより実行しないので以下のものに変更。名前はsystem.mustang.jsにしてJSmarty/internals/配下に置くと動きます。

(function(def)
{
    var File = java.io.File;
    var StringBuilder = java.lang.StringBuilder;
    var BufferedReader = java.io.BufferedReader;
    var FileInputStream = java.io.FileInputStream;
    var InputStreamReader = java.io.InputStreamReader;

    def.prop = { name : 'mustang', code : 30, auth : 'shogo' };

    def.fgets = function(file, dir)
    {
        var i, f, txt, buf;
        dir = JSmarty.Utility.flatten(dir);

        for(i=0,f=dir.length;i<f;i++)
        {
            if(!(new File(dir[i] + '/' + file).exists())) continue;
            try
            {
                txt = new StringBuilder();
                buf = new BufferedReader(
                        new InputStreamReader(
                            new FileInputStream(dir[i] +'/'+ file)
                        )
                      );
                while(buf.ready()) txt.append(buf.readLine());
                buf.close();
            }
            catch(e){};
        };

        return txt.toString();
    };

    def.mtime = function()
    {
        
    };

    def.print = function(s){ print(s); };
    def.getSelfPath = function(){ return '.'; };

})(JSmarty.System);

JRunScriptでJST(JavaScriptTemplates)する

つづいてJSTも動くよという紹介。TrimPathプロジェクトにて制作されているJavaScriptのテンプレートエンジンです(JSTAPIなどはこのエントリでid:shogo4405:20060928:1159422730)。当然、parseDOMTemplateとかprocessDOMTemplateみたいなのは動きませんので悪しからず。

jrunscript -f template.js

print("${foo}".process({ foo : "Hello World!!"}));