Template::Parser - LALR(1) parser for compiling template documents
use Template::Parser;
$parser = Template::Parser->new(\%config);
$template = $parser->parse($text)
|| die $parser->error(), "\n";
The Template::Parser module implements a LALR(1) parser and associated
methods for parsing template documents into Perl code.
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
the Template::Manual::Config manpage for full details.
my $parser = Template::Parser->new({
START_TAG => quotemeta('<+'),
END_TAG => quotemeta('+>'),
});
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
the Template::Document manpage 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 BLOCK s defined within in the
template, and a METADATA item containing a reference to a hash array
of metadata values defined in META tags.
The Template::Parser module accepts the following configuration
options. Please see the Template::Manual::Config manpage for further details
on each option.
The START_TAG and
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('+>'),
});
The 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', # [* ... *]
});
The PRE_CHOMP and
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,
});
The 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}.
The 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
The 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 the Template::Grammar manpage will be
created and used automatically if a GRAMMAR item isn't specified.
The 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,
});
Andy Wardley <abw@wardley.org> http://wardley.org/
Copyright (C) 1996-2007 Andy Wardley. All Rights Reserved.
This module is free software; you can redistribute it and/or
modify it under the same terms as Perl itself.
The main parsing loop of the Template::Parser module was derived from a
standalone parser generated by version 0.16 of the Parse::Yapp module. The
following copyright notice appears in the Parse::Yapp documentation.
The Parse::Yapp module and its related modules and shell
scripts are copyright (c) 1998 Francois Desarmenien,
France. All rights reserved.
You may use and distribute them under the terms of either
the GNU General Public License or the Artistic License, as
specified in the Perl README file.
Template, the Template::Grammar manpage, the Template::Directive manpage
|