id:r7kamura さんが作った view_source_map.gem をいいアイデアだなあ、と思っていて、折しも INCLUDE
/WRAPPER
が舞う嵐のようなテンプレートを抱えるアプリケーションの開発というかデバッグにおいてまさにこういうものを欲したので Template Toolkit 2 向けに移植した。
特に ShipIt する予定もないので Gist にでも置いておけばよいか、と思ったいたけれど、せっかくなので Minilla を使ってセットアップした。
CPAN モジュール、いろいろ含めなければいけないファイルがあるとかやりかたがいろいろあるとか煩雑な印象があって近寄りがたかったけれど、Minilla は考えることが少なくてよかった。
おかげで横で id:hitode909 さんが音を出しているのを聞いてゲラゲラ笑いながらビールを飲んでこのようにコードを書くことができた。
ところで現在、このモジュールは HTML 文書を壊すことがある。
[% MACRO html_class_name BLOCK %]highlighted[% END %] <div class="[% html_class_name %]">...</div>
<div class="<!-- BEGIN html_class_name --> highlighted <!-- END html_class_name -->">...</div>
呼び出し元の文脈を把握しないと、まあ、こうなる、というかんじ。
汎用のテキストテンプレートエンジンを使う限りこうなるのは仕方ないと思っているので、解決しようと思ったら Haml や Slim のように構文木を自前でどうこうするようなメタ言語を使うくらいしか解決策が思い付かない。
改めてview_source_map.gem を紹介するエントリを読んだら、もともとは @todesking さんの発言から着想を得たようだった。
お二人に感謝します。
Template::Context::SourceMap について、Kyoto.pm 05 Tech Talk で LT した。今思い返すとものすごく雑な説明だったと思う。