Beefy Boxes and Bandwidth Generously Provided by pair Networks
go ahead... be a heretic
 
PerlMonks  

Template::Plugin::PerlTidy

by OeufMayo (Curate)
on Apr 25, 2002 at 23:31 UTC ( [id://162134]=sourcecode: print w/replies, xml ) Need Help??
Category: Miscellaneous
Author/Contact Info briac@cpan.org
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.
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 us
+ed
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<stderr>, C<perltidyrc>, C<logfile>, C<errorfile>). The C<source> an
+d
<destination> options are handled by the filter.

Note that options which does not take any arguments (like -html or -pr
+e)
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<[% U
+SE
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}"' : " -$ke
+y";
    }

    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é <briac@cpan.org>

=head1 COPYRIGHT

This module is distributed under the same terms as perl itself.

=head1 SEE ALSO

Template::Plugin::Filter, Perl::Tidy

=cut

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: sourcecode [id://162134]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others cooling their heels in the Monastery: (4)
As of 2024-03-29 01:33 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found