diff options
Diffstat (limited to 'lib/Template/Manual/Syntax.pod')
| -rw-r--r-- | lib/Template/Manual/Syntax.pod | 306 |
1 files changed, 306 insertions, 0 deletions
diff --git a/lib/Template/Manual/Syntax.pod b/lib/Template/Manual/Syntax.pod new file mode 100644 index 0000000..cc1b6c8 --- /dev/null +++ b/lib/Template/Manual/Syntax.pod @@ -0,0 +1,306 @@ +#============================================================= -*-perl-*- +# +# Template::Manual::Syntax +# +# DESCRIPTION +# This section describes the syntax, structure and semantics of the +# Template Toolkit directives and general presentation language. +# +# AUTHOR +# Andy Wardley <abw@andywardley.com> +# +# COPYRIGHT +# Copyright (C) 1996-2001 Andy Wardley. All Rights Reserved. +# Copyright (C) 1998-2001 Canon Research Centre Europe Ltd. +# +# This module is free software; you can redistribute it and/or +# modify it under the same terms as Perl itself. +# +# REVISION +# +# +#======================================================================== + + +#------------------------------------------------------------------------ +# IMPORTANT NOTE +# This documentation is generated automatically from source +# templates. Any changes you make here may be lost. +# +# The 'docsrc' documentation source bundle is available for download +# from http://www.template-toolkit.org/docs.html and contains all +# the source templates, XML files, scripts, etc., from which the +# documentation for the Template Toolkit is built. +#------------------------------------------------------------------------ + +=head1 NAME + +Template::Manual::Syntax - Directive syntax, structure and semantics + +=head1 DESCRIPTION + +This section describes the syntax, structure and semantics of the +Template Toolkit directives and general presentation language. + +=head2 Tag Styles + +By default, template directives are embedded within the character sequences +'[%' and '%]'. e.g. + + [% PROCESS header %] + + <h1>Hello World!</h1> + <a href="[% page.next %]"><img src="[% icon.next %].gif"></a> + + [% PROCESS footer %] + +You can change the tag characters using the START_TAG, END_TAG and +TAG_STYLE configuration options. You can also use the TAGS directive +to define a new tag style for the current template file. + +You can also set the INTERPOLATE option to allow simple variable +references to be embedded directly in templates, prefixed by a '$'. + + # INTERPOLATE => 0 + <td>[% name %]</td> <td>[% email %]</td> + + # INTERPOLATE => 1 + <td>$name</td> <td>$email</td> + +Directives may be embedded anywhere in a line of text and can be split +across several lines. Insignificant whitespace is generally ignored +within the directive. + + [% INCLUDE header + title = 'Hello World' + bgcol = '#ffffff' + %] + + [%INCLUDE menu align='right'%] + + Name: [% name %] ([%id%]) + +=head2 Comments + +The '#' character is used to indicate comments within a directive. +When placed immediately inside the opening directive tag, it causes +the entire directive to be ignored. + + [%# this entire directive is ignored no + matter how many lines it wraps onto + %] + +In any other position, it causes the remainder of the current line to +be treated as a comment. + + [% # this is a comment + theta = 20 # so is this + rho = 30 # <aol>me too!</aol> + %] + +=head2 Chomping Whitespace + +You can add '-' or '+' to the immediate start or end of a directive +tag to control the whitespace chomping options. See the PRE_CHOMP and +POST_CHOMP options for further details. + + [% BLOCK foo -%] # remove trailing newline + This is block foo + [%- END %] # remove leading newline + +=head2 Implicit Directives: GET and SET + +The simplest directives are GET and SET which retrieve and update +variable values respectively. The GET and SET keywords are actually +optional as the parser is smart enough to see them for what they +really are (but note the caveat below on using side-effect notation). +Thus, you'll generally see: + + [% SET foo = 10 %] + [% GET foo %] + +written as: + + [% foo = 10 %] + [% foo %] + +You can also express simple logical statements as implicit GET directives: + + [% title or template.title or 'Default Title' %] + + [% mode == 'graphics' ? "Graphics Mode Enabled" : "Text Mode" %] + +All other directives should start with a keyword specified in UPPER +CASE (but see the ANYCASE option). All directives keywords are in +UPPER CASE to make them visually distinctive and to distinguish them +from variables of the same name but different case. It is perfectly +valid, for example, to define a variable called 'stop' which is +entirely separate from the STOP directive. + + [% stop = 'Clackett Lane Bus Depot' %] + + The bus will next stop at [% stop %] # variable + + [% STOP %] # directive + +=head2 Block Directives + +Directives such as FOREACH, WHILE, BLOCK, FILTER, etc., mark the start +of a block which may contain text or other directives up to the +matching END directive. Blocks may be nested indefinitely. The +IF, UNLESS, ELSIF and ELSE directives also define blocks and may be +grouped together in the usual manner. + + [% FOREACH item = [ 'foo' 'bar' 'baz' ] %] + * Item: [% item %] + [% END %] + + [% BLOCK footer %] + Copyright 2000 [% me %] + [% INCLUDE company/logo %] + [% END %] + + [% IF foo %] + [% FOREACH thing = foo.things %] + [% thing %] + [% END %] + [% ELSIF bar %] + [% INCLUDE barinfo %] + [% ELSE %] + do nothing... + [% END %] + +Block directives can also be used in a convenient side-effect notation. + + [% INCLUDE userinfo FOREACH user = userlist %] + + [% INCLUDE debugtxt msg="file: $error.info" + IF debugging %] + + [% "Danger Will Robinson" IF atrisk %] + +versus: + + [% FOREACH user = userlist %] + [% INCLUDE userinfo %] + [% END %] + + [% IF debugging %] + [% INCLUDE debugtxt msg="file: $error.info" %] + [% END %] + + [% IF atrisk %] + Danger Will Robinson + [% END %] + +=head2 Capturing Block Output + +The output of a directive can be captured by simply assigning the directive +to a variable. + + [% headtext = PROCESS header title="Hello World" %] + + [% people = PROCESS userinfo FOREACH user = userlist %] + +This can be used in conjunction with the BLOCK directive for defining large +blocks of text or other content. + + [% poem = BLOCK %] + The boy stood on the burning deck, + His fleece was white as snow. + A rolling stone gathers no moss, + And Keith is sure to follow. + [% END %] + +Note one important caveat of using this syntax in conjunction with side-effect +notation. The following directive does not behave as might be expected: + + [% var = 'value' IF some_condition %] + +In this case, the directive is interpreted as (spacing added for clarity) + + [% var = IF some_condition %] + value + [% END %] + +rather than + + [% IF some_condition %] + [% var = 'value' %] + [% END %] + +The variable is assigned the output of the IF block which returns +'value' if true, but nothing if false. In other words, the following +directive will always cause 'var' to be cleared. + + [% var = 'value' IF 0 %] + +To achieve the expected behaviour, the directive should be written as: + + [% SET var = 'value' IF some_condition %] + +=head2 Chaining Filters + +Multiple FILTER directives can be chained together in sequence. They +are called in the order defined, piping the output of one into the +input of the next. + + [% PROCESS somefile FILTER truncate(100) FILTER html %] + +The pipe character, '|', can also be used as an alias for FILTER. + + [% PROCESS somefile | truncate(100) | html %] + +=head2 Multiple Directive Blocks + +Multiple directives can be included within a single tag when delimited +by semi-colons, ';'. Note however that the TAGS directive must always +be specified in a tag by itself. + + [% IF title; + INCLUDE header; + ELSE; + INCLUDE other/header title="Some Other Title"; + END + %] + +versus + + [% IF title %] + [% INCLUDE header %] + [% ELSE %] + [% INCLUDE other/header title="Some Other Title" %] + [% END %] + +=head1 AUTHOR + +Andy Wardley E<lt>abw@andywardley.comE<gt> + +L<http://www.andywardley.com/|http://www.andywardley.com/> + + + + +=head1 VERSION + +Template Toolkit version 2.13, released on 30 January 2004. + +=head1 COPYRIGHT + + Copyright (C) 1996-2004 Andy Wardley. All Rights Reserved. + Copyright (C) 1998-2002 Canon Research Centre Europe Ltd. + +This module is free software; you can redistribute it and/or +modify it under the same terms as Perl itself. + + + +=cut + +# Local Variables: +# mode: perl +# perl-indent-level: 4 +# indent-tabs-mode: nil +# End: +# +# vim: expandtab shiftwidth=4: |
