こんなテンプレートエンジンほしい
と思ってます。
テンプレートエンジン作りたい - kazuhoのメモ置き場
ですよねー。
で,そのへんを自然に取り込んでいるのが,おもに Python 方面で人気のある XML ベースのテンプレートシステムだと思います。
実際,Genshi のドキュメントにも
The main feature is a template language that is smart about markup: unlike conventional template languages that only deal with bytes and (if you're lucky) characters, Genshi knows the difference between tags, attributes, and actual text nodes, and uses that knowledge to your advantage. For example:
Genshi
- Intelligent automatic escaping greatly reduces the risk of opening up your site to cross-site scripting attacks (XSS).
なんて書いてあります。
XML ベースのテンプレートエンジンというと,げ,XSL みたいなの?と思いがちですが,
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:py="http://genshi.edgewall.org/" lang="en"> <div py:if="foo"> <p>Bar</p> </div> <ul> <li py:for="item in items">${item}</li> </ul> </html>Documentation/xml-templates.html – Genshi
たとえば Genshi や Kid はこんな感じで直感的に理解可能な構文になっており,XML namespace の機能を使ってるので XML としても「自然」なんです。
んでしばらく前に Perl の Genshi みたいなのってないなぁ暇ができたらつくりたいなぁと思ってたんですが*1,当時は真剣に探してなかった*2ことが判明しました。いま検索してみたら,さっくりと Nenshi と Petal,Template::TAL というのがみつかりました*3。
ただ XML ベースの「一見直感的」なテンプレート構文にも問題点がありまして。厳格な XML ベースにしてしまうと valid な XML でないと通らないエンジンになってしまいます。たとえば,
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:py="http://genshi.edgewall.org/"> <p> <py:if test="foo"><strong></py:if> Hoge ... <py:if test="foo"></strong></py:if> </p> </html>
思わずこんなの書くユーザがいると思うのですが,これは valid でないので通らないと思います。
とあんなこんなで,結局プログラマーの自己満足にすぎないのかなと思ったのと,忙しいというのがあって手をつけずにいました。
id:kazuhooku さんはおそらく軽量ウェブフレームワークに同梱できるようなコンパクトなものを指向なさっていると思うのであまり関係ないかと思いますが,便乗して最近(Perl の)テンプレートエンジンについて考えていることをつらつらと書いてみました。
まとめ
- Genshi みたいな XML 系テンプレートエンジンがほしい
- できれば libxml2 + C によるライブラリ + 各スクリプト言語へのバインディング
- 自分でつくろうと思ったけど
- id:kazuhooku さんみたいなスーパーハカーが作ったらうれしいと思った
- 方向性が違うならいつか自分で作ってみたいです
- 老後だったりして
- 方向性が違うならいつか自分で作ってみたいです
- id:kazuhooku さんみたいなスーパーハカーが作ったらうれしいと思った