# Template::Parser - phpMan

## NAME
    [Template::Parser] - [LALR(1)] parser for compiling template documents

## SYNOPSIS
        use [Template::Parser];

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

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

## PUBLIC METHODS
  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() 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.

## CONFIGURATION OPTIONS
    The "[Template::Parser]" module accepts the following configuration
    options. Please see [Template::Manual::Config] for further details on each
    option.

  START_TAG, END_TAG
    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('+>'),
        });

  TAG_STYLE
    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',     # [* ... *]
        });

  PRE_CHOMP, POST_CHOMP
    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,
        });

  INTERPOLATE
    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}.

  ANYCASE
    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

  GRAMMAR
    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 [Template::Grammar] will be created
    and used automatically if a "GRAMMAR" item isn't specified.

  DEBUG
    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,
        });

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

## COPYRIGHT
    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.

## SEE ALSO
    Template, [Template::Grammar], [Template::Directive]

