NAME
   Template::TAL - Process TAL templates with Perl

SYNOPSIS
     # create the TT object, telling it where the templates are
     my $tt = Template::TAL->new( include_path => "./templates" );

     # data to interpolate into the template
     my $data = {
       foo => "bar",
     };

     # process the template from disk (in ./templates/test.tal) with the data
     print $tt->process("test.tal", $data);

DESCRIPTION
   TAL is a templating language used in the Zope CMS. Template::TAL is a
   Perl implementation of TAL based on the published specs on the Zope
   wiki.

   TAL templates are XML documents, and use attributes in the TAL namespace
   to define how elements of the template should be treated/displayed. For
   example:

     my $template = <<'ENDOFXML';
     <html xmlns:tal="http://xml.zope.org/namespaces/tal">
       <head>
         <title tal:content="title"/>
       </head>
       <body>
         <h1>This is the <span tal:replace="title"/> page</h1>
         <ul>
           <li tal:repeat="user users">
             <a href="?" tal:attributes="href user/url"><span tal:replace="user/name"/></a>
           </li>
         </ul>
       </body>
     </html>
     ENDOFXML

   This template can be processed by passing it and the parameters to the
   "process" method:

     my $tt = Template::TAL->new();
     $tt->process(\$template, {
       title => "Bert and Ernie Fansite",
       users => [
         { url => "http://www.henson.com/",         name  => "Henson",       },
         { url => "http://www.sesameworkshop.org/", name  => "Workshop",     },
         { url => "http://www.bertisevil.tv/",      name  => "Bert is Evil", },
       ],
     })

   Alternativly you can store the templates on disk, and pass the filename
   to "process" directly instead of via a reference (as shown in the
   synopsis above.)

   Template::TAL is designed to be extensible, allowing you to load
   templates from different places and produce more than one type of
   output. By default the XML template will be output as cross-browser
   compatible HTML (meaning, for example, that image tags won't be closed.)
   Other output formats, including well-formed XML, can easily be produced
   by changing the output class (detailed below.)

   For more infomation on the TAL spec itself, see
   http://www.zope.org/Wikis/DevSite/Projects/ZPT/TAL%20Specification%201.4

METHODS
   new( include_path => ['/foo/bar'], charset => 'utf-8' )
       Creates and initializes a new Template::TAL object. Options valid
       here are:

       include_path
           If this parameter is set then it is passed to the provider,
           telling it where to load files from disk (if applicable for the
           provider.)

       charset
           If this parameter is set then it is passed to the output,
           telling it what charset to use instead of its default. The
           default output class will use the 'utf-8' charset unless you
           tell it otherwise.

       provider
           Pass a 'provider' option to specify a provider rather than using
           the default provider that reads from disk. This can either be a
           class name of a loaded class, or an object instance.

       output
           Pass a 'output' option to specify a output class rather than
           using the default output class that dumps the DOM tree to as a
           string to create HTML. This can either be a class name of a
           loaded class, or an object instance.

   languages
       a listref of language plugins we will use when parsing. All
       templates get at least the Template::TAL::Language:TAL language
       module.

   add_language( language module, module, module... )
       adds a language to the list of those used by the template renderer.
       'module' here can be a classname or an instance.

   process( $template, $data_hashref )
       Process the template with the passed data and return the resulting
       rendered byte sequence.

       $template can either be a string containing where the provider
       should get the template from (i.e. the filename of the template in
       the include path), a reference to a string containing the literal
       text of the template, or a Template::TAL::Template object.

       $data_hashref should be a reference to a hash containing the values
       that are to be substituted into the template.

   parse_tales( value, context, context,... )
       Parses a TALES string (see
       http://www.zope.org/Wikis/DevSite/Projects/ZPT/TALES), looking in
       each of the passed contexts in order for variable values, and
       returns the value.

ATTRIBUTES
   These are get/set chained accessor methods that can be used to alter the
   object after initilisation (meaning they return their value when called
   without arguments, and set the value and return $self when called with.)

   In both cases you can set these to either class names or actual
   instances and they with do the right thing.

   provider
       The instance of the Template::TAL::Provider subclass that will be
       providing templates to this engine.

   output
       The instance of the Template::TAL::Output subclass that will be used
       to render the produced template output.

RATIONALE
   Petal is another Perl module that can process a templating language
   suspiciously similar to TAL. So why did we implement Yet Another
   Templating Engine? Well, we liked Petal a lot. However, at the time of
   writing our concerns with Petal were:

   *   Petal isn't strictly TAL. We consider this a flaw.

   *   Petal assumes rather strongly that templates are stored on disk. We
       wanted a system with a pluggable template source so that we could
       store templates in other places (such as a database.)

   *   Petal does lots of caching. This is a good thing if you've got a
       small number of templates compared to the number of pages you serve.
       However, if you've got a vast number of templates - more than you
       can hold in memory - then this quickly becomes self defeating. We
       wanted code that doesn't have any caching in it at all.

   In conclusion: You may be better off using Petal. Certainly the caching
   layer could be very useful to you.

   There's more than one way to do it.

COPYRIGHT
   Written by Tom Insam, Copyright 2005 Fotango Ltd. All Rights Reserved.

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

BUGS
   Template::TAL creates superfluous XML namespace attributes in the
   output.

   Please report any bugs you find via the CPAN RT system.
   http://rt.cpan.org/NoAuth/ReportBug.html?Queue=Template::TAL

SEE ALSO
   The TAL specification:
   http://www.zope.org/Wikis/DevSite/Projects/ZPT/TAL%20Specification%201.4

   Petal, another Perl implementation of TAL on CPAN.