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