Template::Parser - LALR(1) parser for compiling template documents


Template-Toolkit documentation  | view source Contained in the Template-Toolkit distribution.

Index


NAME

Top

Template::Parser - LALR(1) parser for compiling template documents

SYNOPSIS

Top

    use Template::Parser;

    $parser   = Template::Parser->new(\%config);
    $template = $parser->parse($text)
        || die $parser->error(), "\n";

DESCRIPTION

Top

The Template::Parser module implements a LALR(1) parser and associated methods for parsing template documents into Perl code.

PUBLIC METHODS

Top

new(\%params)

The new() constructor creates and returns a reference to a new Template::Parser object.

A reference to a hash may be supplied as a parameter to provide configuration values. See CONFIGURATION OPTIONS below for a summary of these options and Template::Manual::Config for full details.

    my $parser = Template::Parser->new({
        START_TAG => quotemeta('<+'),
        END_TAG   => quotemeta('+>'),
    });

parse($text)

The parse() method parses the text passed in the first parameter and returns a reference to a hash array of data defining the compiled representation of the template text, suitable for passing to the Template::Document new()|Template::Document#new() constructor method. On error, undef is returned.

    $data = $parser->parse($text)
        || die $parser->error();

The $data hash reference returned contains a BLOCK item containing the compiled Perl code for the template, a DEFBLOCKS item containing a reference to a hash array of sub-template BLOCKs defined within in the template, and a METADATA item containing a reference to a hash array of metadata values defined in META tags.

CONFIGURATION OPTIONS

Top

The Template::Parser module accepts the following configuration options. Please see Template::Manual::Config for futher details on each option.

START_TAG, END_TAG

The START_TAG|Template::Manual::Config#START_TAG_END_TAG and END_TAG|Template::Manual::Config#START_TAG_END_TAG options are used to specify character sequences or regular expressions that mark the start and end of a template directive.

    my $parser = Template::Parser->new({ 
        START_TAG => quotemeta('<+'),
        END_TAG   => quotemeta('+>'),
    });

TAG_STYLE

The TAG_STYLE|Template::Manual::Config#TAG_STYLE option can be used to set both START_TAG and END_TAG according to pre-defined tag styles.

    my $parser = Template::Parser->new({ 
        TAG_STYLE => 'star',     # [* ... *]
    });

PRE_CHOMP, POST_CHOMP

The PRE_CHOMP|Template::Manual::Config#PRE_CHOMP_POST_CHOMP and POST_CHOMP|Template::Manual::Config#PRE_CHOMP_POST_CHOMP can be set to remove any whitespace before or after a directive tag, respectively.

    my $parser = Template::Parser-E<gt>new({
        PRE_CHOMP  => 1,
        POST_CHOMP => 1,
    });

INTERPOLATE

The INTERPOLATE|Template::Manual::Config#INTERPOLATE flag can be set to allow variables to be embedded in plain text blocks.

    my $parser = Template::Parser->new({ 
        INTERPOLATE => 1,
    });

Variables should be prefixed by a $ to identify them, using curly braces to explicitly scope the variable name where necessary.

    Hello ${name},

    The day today is ${day.today}.

ANYCASE

The ANYCASE|Template::Manual::Config#ANYCASE option can be set to allow directive keywords to be specified in any case.

    # with ANYCASE set to 1
    [% INCLUDE foobar %]    # OK
    [% include foobar %]    # OK
    [% include = 10   %]    # ERROR, 'include' is a reserved word

GRAMMAR

The GRAMMAR|Template::Manual::Config#GRAMMAR configuration item can be used to specify an alternate grammar for the parser. This allows a modified or entirely new template language to be constructed and used by the Template Toolkit.

    use MyOrg::Template::Grammar;

    my $parser = Template::Parser->new({ 
        GRAMMAR = MyOrg::Template::Grammar->new();
    });

By default, an instance of the default Template::Grammar will be created and used automatically if a GRAMMAR item isn't specified.

DEBUG

The DEBUG|Template::Manual::Config#DEBUG option can be used to enable various debugging features of the Template::Parser module.

    use Template::Constants qw( :debug );

    my $template = Template->new({
        DEBUG => DEBUG_PARSER | DEBUG_DIRS,
    });

AUTHOR

Top

Andy Wardley <abw@wardley.org> http://wardley.org/

COPYRIGHT

Top

SEE ALSO

Top

Template, Template::Grammar, Template::Directive


Template-Toolkit documentation  | view source Contained in the Template-Toolkit distribution.