package Template::Plugin::PerlTidy; use strict; use Template::Plugin::Filter; use Perl::Tidy; use base qw( Template::Plugin::Filter ); use vars qw($VERSION); $VERSION = 0.01; use vars qw( $DYNAMIC ); $DYNAMIC = 1; =pod =head1 NAME Template::Plugin::PerlTidy - Perl::Tidy filter =head1 SYNOPSIS # HTML Syntax Coloring, no reformatting [% USE PerlTidy 'html' 'nnn' 'pre' %] [% FILTER $PerlTidy %] #!/usr/bin/perl -w use strict; my@foo=(1,2,'a',4); for(1,3,5){print" $_\n"} my %hash =( 1=>'foo',foo=>'bar',); [% END %] # Chained filter, code reformatting and syntax coloring [%- USE PerlTidy -%] [%- FILTER $PerlTidy 'html' 'nnn' -%] [%- FILTER $PerlTidy i=10 -%] ... perl code goes here ... [%- END -%] [%- END -%] =head1 DESCRIPTION This modules is a Template Toolkit Filter for Perl::Tidy. It can be used to automatically display coloured and formatted perl code in web pages. =head1 OPTIONS All the options available in perltidy should be also available in this plugin. The options defined in Perl::Tidy::perltidy() are also supported (C, C, C, C). The C and options are handled by the filter. Note that options which does not take any arguments (like -html or -pre) should be enclosed in quotes (i.e. C<[% USE PerlTidy 'html' %]>), and options which take an argument are not enclosed in quotes (i.e. C<[% USE PerlTidy i=8 %]>). =cut sub filter { my ( $self, $text, $args, $conf ) = @_; $args = $self->merge_args($args); $conf = $self->merge_config($conf); my %options = %{$conf}; my ( $stderr, $perltidyrc, $logfile, $errorfile ) = @options{qw( stderr perltidyrc logfile errorfile )}; delete @options{qw( stderr perltidyrc logfile errorfile )}; foreach my $args ( @{$args} ) { $options{$args} = undef unless exists $options{$args}; } my $argv; foreach my $key ( keys %options ) { $argv .= $options{$key} ? qq' -$key="$options{$key}"' : " -$key"; } my $formated; perltidy( source => \$text, destination => \$formated, argv => $argv, stderr => $stderr, perltidyrc => $perltidyrc, logfile => $logfile, errorfile => $errorfile, ); return $formated; } 1; __END__ =pod =head1 AUTHOR Briac Pilpré =head1 COPYRIGHT This module is distributed under the same terms as perl itself. =head1 SEE ALSO Template::Plugin::Filter, Perl::Tidy =cut