Ampita-0.09 フィックス版

Amrita と同様に XHTML/XML の要素を直接テンプレートのノードとして利用できる Perl 用のテンプレート・エンジンです。ようやく、当初、盛り込みたいと考えていた機能をすべて盛り込みましたので、コード・フィックス版とします。次回のアップデートでドキュメントを追加する予定ですが、いつになるやら。
この版では、Smarty 風のパイプでつなげる修飾子(modifier)を使えるようにし、内部の処理も修飾子を利用するように変更しました。さらに、フォームの input 要素等の name アトリビュートの名前もプレゼンテーション・オブジェクトのフィールド名に使えるようにしました。option 要素と input 要素の radio、checkbox では value もフィールド名に使えるようにしましたが、これはやりすぎだったかも。
1ファイル版では 1000 行を超えましたので、この版から、ソースをパッケージごとに分割することにしました。CGI で使うには、1 ファイル版の方が扱いやすいですので、動作する 1 ファイル版も置いておきます。
バグ修正版:Ampita-0.10
https://tociyuki.sakura.ne.jp/archive/Ampita-0.09.pm (1ファイル版ソース)
https://tociyuki.sakura.ne.jp/archive/Ampita-0.09.tar.gz
⇒ 前の版 Ampita-0.08

分割版ソース

0.11 でクラス構造を見直しました。現在の分割版ソースは Ampita-0.11 のリンクを参照ください。
⇒ lib/Ampita.pm
⇒ lib/Ampita/VarsMixin.pm
⇒ lib/Ampita/ModifierMixin.pm
⇒ lib/Ampita/XMLParser.pm
⇒ lib/Ampita/Output.pm
⇒ lib/Ampita/Node.pm
⇒ lib/Ampita/Node/PrepareMixin.pm
⇒ lib/Ampita/Node/FinalizeMixin.pm
⇒ lib/Ampita/Modifier/Buildin.pm
⇒ lib/Ampita/Modifier/DateFormat.pm
⇒ lib/Ampita/Modifier/Escape.pm

サンプル

sample/modifier.pl (修飾子の使い方。Ampita では、$_|lower|escape:htmlと記述します。修飾子を追加することもできます)
sample/rdf.pl (修飾子の使い方その2)
sample/form.pl (フォーム要素を name と value で指定する例)
sample/hello.pl
sample/attr_hash.pl
sample/attr_po.pl
sample/calendar.pl (default_modifier と dynamic_tag_match の例)
sample/cond.pl
sample/parent.pl
sample/subst_hash.pl
sample/subst_po.pl
sample/table.pl
sample/variable_hash.pl
sample/variable_po.pl
sample/ampitans.pl

定義済みの修飾子

Smarty の真似をしています。修飾子に複数の引数を与えるときはコロンで区切ります。
修飾子は、アトリビュートかテキストに $_|modifier のように書き込みます。

  1. string_format:'%.4f' -- sprintf する。
  2. cat:' hoge' -- 後ろに文字列をくっつける。
  3. default:'untitled' -- 空文字のときに代わりに出力する。
  4. lower -- 小文字にする。
  5. upper -- 大文字にする。
  6. nl2br -- s{\n}{<br />}g する。
  7. strip -- 連続するブランクと改行をスペース1個に置き換える。
  8. strip_tags -- タグを削除する。
  9. date_format:'%Y-%m-%d %H:%M' -- エポック(time 関数の結果)をローカルタイムでフォーマットする。
  10. utc_format:'%Y-%m-%d %H:%M' -- エポック(time 関数の結果)を UTC でフォーマットする。
    • 利用できるフォーマットは POSIX::strftime に準拠し、漢字月・週などのセット、年号表示を追加しています。DateFormat.pm のコメント参照。
  11. escape:'asis' -- エスケープ処理をバイパスする。-innerHTML と同じ。
  12. escape:'no' -- 同上。
  13. escape:'xml' -- <>&"'エスケープして、文字列エンティティを数字エンティティに変換する。-innerXMLTEXT と同じ。
  14. escape:'html' -- <>&"'エスケープる。ただし、正しいエンティティは素通しする。-innerHTMLTEXT と同じ。
  15. escape:'htmlall' -- <>&"'エスケープする。-innerTEXT と同じ。
  16. escape:'uri' -- <>&"エスケープしてから、% 記号でエスケープする。
  17. escape:'url' -- 同上。
  18. escape:'quotes' -- バックスラッシュが前置しないシングルクォートをバックスラッシュでエスケープする。
  19. escape:'hex' -- すべての文字を % 記号でエスケープする。
  20. escape:'hexentity' -- すべての文字を &#x..; で16進数エンティティにする。
  21. escape:'decentity' -- すべての文字を &#..; で10進数エンティティにする。
  22. escape:'javascript' -- Javascript の文字列用にエスケープする。
  23. escape:'mail' -- アットマークとピリオドを置き換える。