Provided by: libmojolicious-perl_4.63+dfsg-1_all bug

NAME

       Mojo::Template - Perl-ish templates!

SYNOPSIS

         use Mojo::Template;

         # Simple
         my $mt = Mojo::Template->new;
         my $output = $mt->render(<<'EOF');
         % use Time::Piece;
         <!DOCTYPE html>
         <html>
           <head><title>Simple</title></head>
           % my $now = localtime;
           <body>Time: <%= $now->hms %></body>
         </html>
         EOF
         say $output;

         # More advanced
         my $output = $mt->render(<<'EOF', 23, 'foo bar');
         % my ($num, $text) = @_;
         %= 5 * 5
         <!DOCTYPE html>
         <html>
           <head><title>More advanced</title></head>
           <body>
             test 123
             foo <% my $i = $num + 2; %>
             % for (1 .. 23) {
             * some text <%= $i++ %>
             % }
           </body>
         </html>
         EOF
         say $output;

DESCRIPTION

       Mojo::Template is a minimalistic and very Perl-ish template engine, designed specifically
       for all those small tasks that come up during big projects. Like preprocessing a
       configuration file, generating text from heredocs and stuff like that.

       See Mojolicious::Guides::Rendering for information on how to generate content with the
       Mojolicious renderer.

SYNTAX

       For all templates strict, warnings, utf8 and Perl 5.10 features are automatically enabled.

         <% Perl code %>
         <%= Perl expression, replaced with result %>
         <%== Perl expression, replaced with XML escaped result %>
         <%# Comment, useful for debugging %>
         <%% Replaced with "<%", useful for generating templates %>
         % Perl code line, treated as "<% line =%>"
         %= Perl expression line, treated as "<%= line %>"
         %== Perl expression line, treated as "<%== line %>"
         %# Comment line, useful for debugging
         %% Replaced with "%", useful for generating templates

       Escaping behavior can be reversed with the "auto_escape" attribute, this is the default in
       Mojolicious ".ep" templates for example.

         <%= Perl expression, replaced with XML escaped result %>
         <%== Perl expression, replaced with result %>

       Mojo::ByteStream objects are always excluded from automatic escaping.

         % use Mojo::ByteStream 'b';
         <%= b('<div>excluded!</div>') %>

       Newline characters can be escaped with a backslash.

         This is <%= 1 + 1 %> a\
         single line

       And a backslash in front of a newline character can be escaped with another backslash.

         This will <%= 1 + 1 %> result\\
         in multiple\\
         lines

       Whitespace characters around tags can be trimmed with a special tag ending.

         <%= All whitespace characters around this expression will be trimmed =%>

       You can capture whole template blocks for reuse later with the "begin" and "end" keywords.

         <% my $block = begin %>
           <% my $name = shift; =%>
           Hello <%= $name %>.
         <% end %>
         <%= $block->('Baerbel') %>
         <%= $block->('Wolfgang') %>

       Perl lines can also be indented freely.

         % my $block = begin
           % my $name = shift;
           Hello <%= $name %>.
         % end
         %= $block->('Baerbel')
         %= $block->('Wolfgang')

       Mojo::Template templates get compiled to a Perl subroutine, that means you can access
       arguments simply via @_.

         % my ($foo, $bar) = @_;
         % my $x = shift;
         test 123 <%= $foo %>

       The compilation of templates to Perl code can make debugging a bit tricky, but
       Mojo::Template will return Mojo::Exception objects that stringify to error messages with
       context.

         Bareword "xx" not allowed while "strict subs" in use at template line 4.
         2: </head>
         3: <body>
         4: % my $i = 2; xx
         5: %= $i * 2
         6: </body>

ATTRIBUTES

       Mojo::Template implements the following attributes.

   auto_escape
         my $bool = $mt->auto_escape;
         $mt      = $mt->auto_escape($bool);

       Activate automatic escaping.

   append
         my $code = $mt->append;
         $mt      = $mt->append('warn "Processed template"');

       Append Perl code to compiled template. Note that this code should not contain newline
       characters, or line numbers in error messages might end up being wrong.

   capture_end
         my $end = $mt->capture_end;
         $mt     = $mt->capture_end('end');

       Keyword indicating the end of a capture block, defaults to "end".

         <% my $block = begin %>
           Some data!
         <% end %>

   capture_start
         my $start = $mt->capture_start;
         $mt       = $mt->capture_start('begin');

       Keyword indicating the start of a capture block, defaults to "begin".

         <% my $block = begin %>
           Some data!
         <% end %>

   code
         my $code = $mt->code;
         $mt      = $mt->code($code);

       Perl code for template.

   comment_mark
         my $mark = $mt->comment_mark;
         $mt      = $mt->comment_mark('#');

       Character indicating the start of a comment, defaults to "#".

         <%# This is a comment %>

   compiled
         my $compiled = $mt->compiled;
         $mt          = $mt->compiled($compiled);

       Compiled template code.

   encoding
         my $encoding = $mt->encoding;
         $mt          = $mt->encoding('UTF-8');

       Encoding used for template files.

   escape
         my $cb = $mt->escape;
         $mt    = $mt->escape(sub { reverse $_[0] });

       A callback used to escape the results of escaped expressions, defaults to "xml_escape" in
       Mojo::Util.

   escape_mark
         my $mark = $mt->escape_mark;
         $mt      = $mt->escape_mark('=');

       Character indicating the start of an escaped expression, defaults to "=".

         <%== $foo %>

   expression_mark
         my $mark = $mt->expression_mark;
         $mt      = $mt->expression_mark('=');

       Character indicating the start of an expression, defaults to "=".

         <%= $foo %>

   line_start
         my $start = $mt->line_start;
         $mt       = $mt->line_start('%');

       Character indicating the start of a code line, defaults to "%".

         % $foo = 23;

   name
         my $name = $mt->name;
         $mt      = $mt->name('foo.mt');

       Name of template currently being processed, defaults to "template". Note that this value
       should not contain quotes or newline characters, or error messages might end up being
       wrong.

   namespace
         my $namespace = $mt->namespace;
         $mt           = $mt->namespace('main');

       Namespace used to compile templates, defaults to "Mojo::Template::SandBox".  Note that
       namespaces should only be shared very carefully between templates, since functions and
       global variables will not be cleared automatically.

   prepend
         my $code = $mt->prepend;
         $mt      = $mt->prepend('my $self = shift;');

       Prepend Perl code to compiled template. Note that this code should not contain newline
       characters, or line numbers in error messages might end up being wrong.

   replace_mark
         my $mark = $mt->replace_mark;
         $mt      = $mt->replace_mark('%');

       Character used for escaping the start of a tag or line, defaults to "%".

         <%% my $foo = 23; %>

   tag_start
         my $start = $mt->tag_start;
         $mt       = $mt->tag_start('<%');

       Characters indicating the start of a tag, defaults to "<%".

         <% $foo = 23; %>

   tag_end
         my $end = $mt->tag_end;
         $mt     = $mt->tag_end('%>');

       Characters indicating the end of a tag, defaults to "%>".

         <%= $foo %>

   template
         my $template = $mt->template;
         $mt          = $mt->template($template);

       Raw unparsed template.

   tree
         my $tree = $mt->tree;
         $mt      = $mt->tree([['text', 'foo']]);

       Template in parsed form. Note that this structure should only be used very carefully since
       it is very dynamic.

   trim_mark
         my $mark = $mt->trim_mark;
         $mt      = $mt->trim_mark('-');

       Character activating automatic whitespace trimming, defaults to "=".

         <%= $foo =%>

METHODS

       Mojo::Template inherits all methods from Mojo::Base and implements the following new ones.

   build
         $mt = $mt->build;

       Build Perl "code" from "tree".

   compile
         my $exception = $mt->compile;

       Compile Perl "code" for template.

   interpret
         my $output = $mt->interpret;
         my $output = $mt->interpret(@args);

       Interpret "compiled" template code.

         # Reuse template
         say $mt->render('Hello <%= $_[0] %>!', 'Bender');
         say $mt->interpret('Fry');
         say $mt->interpret('Leela');

   parse
         $mt = $mt->parse($template);

       Parse template into "tree".

   render
         my $output = $mt->render($template);
         my $output = $mt->render($template, @args);

       Render template.

         say $mt->render('Hello <%= $_[0] %>!', 'Bender');

   render_file
         my $output = $mt->render_file('/tmp/foo.mt');
         my $output = $mt->render_file('/tmp/foo.mt', @args);

       Render template file.

DEBUGGING

       You can set the MOJO_TEMPLATE_DEBUG environment variable to get some advanced diagnostics
       information printed to "STDERR".

         MOJO_TEMPLATE_DEBUG=1

SEE ALSO

       Mojolicious, Mojolicious::Guides, <http://mojolicio.us>.