=head1 NAME

Mojolicious::Plugin::PPI - Mojolicious Plugin for Rendering Perl Code Using PPI

=head1 SYNOPSIS

 # Mojolicious
 $self->plugin('PPI');

 # Mojolicious::Lite
 plugin 'PPI';

 # In your template
 Perl is as simple as <%= ppi q{say "Hello World"} %>.

=head1 DESCRIPTION

L<Mojolicious::Plugin::PPI> is a L<Mojolicious> plugin which adds Perl syntax highlighting via L<PPI> and L<PPI::HTML>. Perl is notoriously hard to properly syntax highlight, but since L<PPI> is made especially for parsing Perl this plugin can help you show off your Perl scripts in your L<Mojolicious> webapp.

=head1 ATTRIBUTES

L<Mojolicious::Plugin::PPI> inherits all methods from L<Mojolicious::Plugin> and implements the following new ones.

=over

=item *

C<< line_numbers => [0/1] >> specifies if line numbers should be generated. Defaults to C<1> for file-based snippets, however C<0> is used for an inline snipppet unless explicitly overridden in the helper arguments.

=item *

C<< no_check_file => [0/1] >> specifies if a file check should be performed. Default C<1>.

=item *

C<< src_folder => 'directory' >> specifies a folder where input files will be found. When specified, if the directory is not found, a warning is issued, but not fatally. This functionality is not (currently) available for per-file alteration, so only use if all files will be in this folder (or subfolder). Remeber, if this option is not specified, a full or relative path may be passed to L</ppi>.

=item *

C<< style => '.ppi-code { some: style; }' >> a string of overall style sheet to be applied via the C<ppi_css> helper.

=item *

C<< class_style => { class => 'string color', other_class => { style => 'pairs' } } >> This hashref's keys are individual element style definitions. If the value is a string, it is used as the value of the color attribute. If the value is another hashref, it is converted into style definitions.

=back

=head1 METHODS

L<Mojolicious::Plugin::PPI> inherits all methods from L<Mojolicious::Plugin> and implements the following new ones.

=head2 C<register>

  $plugin->register;

Register plugin in L<Mojolicious> application. At register time, key-value pairs for the plugin attributes may be supplied.

=head1 HELPERS

L<Mojolicous::Plugin::PPI> provides these helpers:

=head2 C<ppi>

  %== ppi 'my $code = "highlighted";'
  %== ppi 'file.pl'

Returns HTML form of Perl snippet or file. The behavior may be slightly different in each case. If the argument is the name of a file that exists, it will be loaded and used. If not the string will be interpreted as an inline snippet. In either form, the call to C<ppi> may take the additional option:

Additional key-value pairs may be passed which override the object's defaults. Most attributes are available (except: C<no_check_file> for now) and the additional key C<inline> lets you override the default choice of display inline vs block (by string vs file respectively).

=head2 C<ppi_css>

Injects a generated CSS style into the page, using style properties defined in the plugin attributes.

=head1 SEE ALSO

L<Mojolicious>, L<PPI>, L<PPI::HTML>

L<PPI>, L<PPI::HTML>

=head1 SOURCE REPOSITORY

L<http://github.com/jberger/Mojolicious-Plugin-PPI>

=head1 AUTHOR

Joel Berger, E<lt>joel.a.berger@gmail.comE<gt>

=head1 COPYRIGHT AND LICENSE

Copyright (C) 2011-2013 by Joel Berger

This library is free software; you can redistribute it and/or modify
it under the same terms as Perl itself.

