Common Template HTMLタグ版文法ジャケットを追加します。


Common Template(
http://www.commontemplate.org)は注釈版と属性版の文法ジャケットを提供しています。
注釈版文法ジャケット:

<html>
    <body>
        <!--$if{users != null && users.size &amp;gt; 0}-->
        <table border="1">
            <!--$for{user : users}-->
            <tr>
                <td><!--$output{for.index + 1}-->1<!--$end--></td>
                <td><!--$output{user.name}-->james<!--$end--></td>
                <td><!--$output{user.coins}-->2.00<!--$end--></td>
            </tr>
            <!--$end-->
        </table>
        <!--$end-->
    </body>
</html>
属性版文法ジャケット:

<html>
    <body>
        <table ct:if="users != null && users.size &amp;gt; 0" border="1">
            <tr ct:for="user : users">
                <td><span ct:output="for.index + 1">1</span></td>
                <td><span ct:output="user.name">james</span></td>
                <td><span ct:output="user.coins">2.00</span></td>
            </tr>
        </table>
    </body>
</html>
XML/HTMLにテンプレートが適用される場合、完全なDOMモデル構造を維持する必要があります。
属性版の文法ジャケットもできますが、変換に時間がかかります。また、不規則なHTML文法の互換性があります。
桂林はXML/HTMLタグ版の文法ジャケットに参加することを提案しています。

<html>
    <body>
    	<ct:if param="users != null && users.size &amp;gt; 0">
	        <table border="1">
	        	<ct:for param="user : users">
	            <tr>
	                <td><ct:out param="for.index + 1"/></td>
	                <td><ct:out param="user.name"/></td>
	                <td><ct:out param="user.coins"/></td>
	            </tr>
	            </ct:for>
	        </table>
        </ct:if>
    </body>
</html>
その構造と標準文法は一対一で、とても便利です。
Resource Filter拡張点を用いて実現し、
リソースの読み込み時に簡単な正規表現を使って置換します。
HTML文法を解析しないと、不規則なHTML文法互換問題がありません。
二つの正規表現だけで変換が完了しました。

text = text.replaceAll("\\<ct\\s*\\:\\s*([0-9|_|A-Z|a-z]+)\\s+param\\s*\\=\\s*\\"([^\\"]+)\\"\\s*\\/?\\>", "\\$$1{$2}");
text = text.replaceAll("\\<\\/\\s*ct\\s*\\:\\s*([0-9|_|A-Z|a-z]+)\\s*\\>", "\\$end{$1}");
テンプレートのリソースをロードする時、メモリの消耗と変換時間がありますが、消費は大きくありません。
0.8.7バージョンからサポートを開始します。
参照:
http://www.commontemplate.org