Template::Plugin::VimColor

Text::VimColorソースコードをいい感じにマークアップしてくれるモジュールで、テキストの中の Perl コードに色を付けたりするのになかなか便利。

TT から利用できるといいなということで、

<pre>
[% FILTER vimcolor %]
#!/usr/local/bin/perl
use strict;
use warnings;

print "Hello, World!";

sub foo {
   my $self = shift;
   return "bar";
}
[% END %]
</pre>

と書くと

と言う風になるようにしたい。例によって Template::Plugin::Filter で

package Template::Plugin::VimColor;
use strict;
use base qw (Template::Plugin::Filter);
use Text::VimColor;

our $VERSION = 0.01;

sub init {
    my $self = shift;
    $self->{_DYNAMIC} = 1;
    $self->install_filter($self->{_ARGS}->[0] || 'vimcolor');
    $self;
}

sub filter {
    my ($self, $text, $args, $config) = @_;
    my $filetype = delete $config->{filetype} || 'perl';
    my $syntax = Text::VimColor->new(
        string   => ?$text,
        filetype => $filetype,
        %$config,
    );
    return $syntax->html;
}

1;

としてまずは簡単だけど所望の物はできましたと。あとはこれに Apache::VimColor みたく Cache::Cache でキャッシュするようにした方がいいかなと思ったところで、Cache オブジェクトの ID をどうしようかなとか考えてたらちょっと萎え。

ひとまずこれでいいので CPAN にうpしようと思ったけど時間切れ。数日ネットのない生活を送ります。みなさんよいお年を。