
==== NAME ====

Text::SwiftTemplate - a fast, lightweight template engine.


==== VERSION ====

This describes version ``0.0701'' of Text::SwiftTemplate.


==== DESCRIPTION ====

This module provides a simple, lightweight but fast template engine, for
when you need speed rather than complex features.


==   Markup Format   ==

The markup format is as follows:

{$varname}
A variable; will display the value of the variable, or nothing if that value
is empty.

{$varname:format}
A formatted variable; will apply the formatting directive(s) to the value
before displaying it.

{?varname stuff [$varname] more stuff}
A conditional. If the value of 'varname' is not empty, this will display
"stuff value-of-variable more stuff"; otherwise it displays nothing.

    {?var1 stuff [$var1] thing [$var2]}

This would use both the values of var1 and var2 if var1 is not empty.

{?varname stuff [$varname] more stuff!!other stuff}
A conditional with "else". If the value of 'varname' is not empty, this will
display "stuff value-of-variable more stuff"; otherwise it displays "other
stuff".

This version can likewise use multiple variables in its display parts.

    {?var1 stuff [$var1] thing [$var2]!![$var3]}

{&funcname(arg1,...,argN)}
Call a function with the given args; the return value of the function will
be what is put in its place.

    {&MyPackage::myfunc(stuff,[$var1])}

This would call the function myfunc in the package MyPackage, with the
arguments "stuff", and the value of var1.

Note, of course, that if you have a more complicated function and are
processing much data, this will slow things down.


==   Limitations   ==

To make the parsing simpler (and therefore faster) there are certain
restrictions in what this module can do:

*
One cannot escape '{' '}' '[' or ']' characters. However, the substitution
is clever enough so that you may be able to use them inside conditional
constructs, provided the use does not resemble a variable.

For example, to get a value surrounded by {}, the following will not work:

{{$Var1}}

However, this will:

{?Var1 {[$Var1]}}

*
One cannot have nested variables.

*
Conditionals are limited to testing whether or not the variable has a value.
If you want more elaborate tests, or tests on more than one value, you'll
have to write a function to do it, and use the {&function()} construct.

*
Function arguments (as given with the {&funcname(arg1,arg2...)} format)
cannot have commas in them, since commas are used to separate the arguments.


==   Justification For Existence   ==

When I was writing SQLite::Work, I originally tried using Text::Template (my
favourite template engine) and also tried Text::FillIn. Both of them had
some lovely, powerful features. Unfortunately, they were also relatively
slow. In testing them with a 700-row table, using Text::Template took about
15 seconds to generate the report, and using Text::FillIn took 45 seconds!
Rolling my own very simple template engine cut the time down to about 7
seconds.

The reasons for this aren't that surprising. Because Text::Template is
basically an embedded Perl engine, it has to run the interpreter on each
substitution. And Text::FillIn has a lot to do, what with being very generic
and very recursive.

The trade-off for the speed-gain of Text::SwiftTemplate is that it is quite
simple. There is no nesting or recursion, there are no loops. But I do think
I've managed to grab some of the nicer features of other template engines,
such as limited conditionals, and formatting, and, the most powerful of all,
calling external functions.


==== REQUIRES ====

    Test::More


==== INSTALLATION ====

To install this module, run the following commands:

    perl Build.PL
    ./Build
    ./Build test
    ./Build install

Or, if you're on a platform (like DOS or Windows) that doesn't like the "./"
notation, you can do this:

   perl Build.PL
   perl Build
   perl Build test
   perl Build install

In order to install somewhere other than the default, such as in a directory
under your home directory, like "/home/fred/perl" go

   perl Build.PL --install_base /home/fred/perl

as the first step instead.

This will install the files underneath /home/fred/perl.

You will then need to make sure that you alter the PERL5LIB variable to find
the module.

Therefore you will need to change the PERL5LIB variable to add
/home/fred/perl/lib

        PERL5LIB=/home/fred/perl/lib:${PERL5LIB}


==== AUTHOR ====

    Kathryn Andersen (RUBYKAT)
    perlkat AT katspace dot com
    http://www.katspace.org/tools


==== COPYRIGHT AND LICENCE ====

Copyright (c) 2006 by Kathryn Andersen

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

