Template-Toolkitで指定区間を一行にまとめる
Template-ToolkitでSmartyの{strip}相当のことをやろうとしたけど、該当する機能が見つからない。
具体的には、
<table> <tr> <td> <p>これを一行にしたい</p> </td> </tr> </table>
とかテンプレートに書いた時に
<table><tr><td><p>これを一行にしたい</p></td></tr></table>
てなHTMLを出力させたい。
CPAN見てもそれっぽいプラグインが見当たらなかったので、Template::Plugin::OneLinerというフィルタのプラグインを書いてみた。さっきの例だとこんな感じで書ける。
[% USE OneLiner -%] [% FILTER oneliner %] <table> <tr> <td> <p>これを一行にしたい</p> </td> </tr> </table> [% END %]
コードは以下。こんな感じでいいのかな。書き方がおかしいとか、それ○○とかあったら突っ込んでください。
package Template::Plugin::OneLiner; use strict; use warnings; use Template::Plugin::Filter; use base qw(Template::Plugin::Filter); our $VERSION = '0.1.0'; our $FILTER_NAME = 'oneliner'; sub init { my ($self) = @_; $self->install_filter($FILTER_NAME); $self; } sub filter { my ($self, $context) = @_; $context =~ s/\s*\n+\s*//g; $context; } 1; __END__ =head1 NAME Template::Plugin::OneLiner - provides a Template Toolkit filter for compact html into single line =head1 SYNOPSIS [% USE OneLiner -%] [% FILTER oneliner %] <table> <tr> <td> <p>Too much place is taken.</p> </td> </tr> </table> [% END %] You get it. <table><tr><td><p>Too much place is taken.</p></td></tr></table> =head1 DESCRIPTION Template::Plugin::OnerLiner strip line breaks and space at beginning and end of lines. I refer to the Smarty(template engine for php) function 'strip'. http://www.smarty.net/manual/en/language.function.strip.php =head1 AUTHOR Ryo Miyake E<lt>ryo.studiom@gmail.comE<gt> =cut