SmartyなテンプレートとJavaScript

よくあるSmartyなテンプレート

<{if $hoge}>
  Hello World!!
<{/if}>

これをJavaScriptでも同様の挙動させる為には…正規表現を利用して文法解析するとおつ。SmartyコンパイラーをハックしてJavaScript形式にコンパイルする方式も考えたけどSmartyをハックするのは骨が折れるし何やっているかわからないのでパス。

文法解析のアルゴリズムの草案

var vars = new Array();
var string = '<{if $hoge}>Hello World!!<{/if}>'
var regular = new RegExp('<{if\\s\\$([^<{]+)}>(.*|\\r?\\n)*<{/if}>','');

vars['hoge'] = true;
string = string.replace(regular, (vars["$1"])?'':"$2");

document.write(string);

正規表現の文法を間違うと偉いことになるので正規表現の本でも買って勉強しないと…。

  • 昔、PukiWikiの*や!などが<h1>〜</h1>に変換するのを自力でつくってみたときのをヒントにしてみました。
  • PukiWikiは行単位でTXTを解析していたけど、タグが入れ子になるSmartyは行単位の解析無理という結論に達する。