Provided by: libtemplate-alloy-perl_1.020-1_all bug

NAME

       Template::Alloy::Velocity - Velocity (VTL) role

DESCRIPTION

       The Template::Alloy::Velocity role provides the syntax and the interface for the Velocity
       Templating Language (VTL).  It also brings many of the features from the various
       templating systems.

       See the Template::Alloy documentation for configuration and other parameters.

       The following documents have more information about the velocity language.

           http://velocity.apache.org/engine/devel/vtl-reference-guide.html
           http://www.javaworld.com/javaworld/jw-12-2001/jw-1228-velocity.html?page=4

TODO

       Add language usage and samples.

ROLE METHODS

       "parse_tree_velocity"
           Used bh the parse_tree method when SYNTAX is set to 'velocity'.

       "merge"
           Similar to process_simple, but with syntax set to velocity.

UNSUPPORTED VELOCITY SPEC

       •   The magic Java Velocity property lookups don't exist.  You must use the actual method
           name, Alloy will not try to guess it for you.  Java Velocity allows you to type
           $object.Attribute and Java Velocity will look for the Attribute, getAttribute,
           getattribute, isAttribute methods.  In Perl Alloy, you can call
           $object.can('Attribute') to introspect the object.

       •   Escaping of variables is consistent.  The Java Velocity spec is not.  The velocity
           spec says that "\\$email" will return "\\$email" if email is not defined and it will
           return "\foo" if email is equal to "foo".  The slash behavior magically changes
           according to the spec.  In Alloy the "\\$email" would be "\$email" if email is not
           defined.

       •   You can set items to null (undefined) in Alloy.  According to the Java Velocity
           reference-guide you have to configure Velocity to do this.  To get the other behavior,
           you would need to do "#if($questionable)#set($foo=$questionable)#end".  The default
           Velocity spec way provides no way for checking null return values.

       •   There currently isn't a "literal" directive.  The VTL reference-guide doesn't mention
           #literal, but the user-guide does.  In Alloy you can use the following:

               #get('#foreach($a in [1..3]) $a #end')

           We will probably add the literal support - but it will still have to parse the
           document, so unless you are using compile_perl, you will parse literal sections
           multiple times.

       •   There is no "$velocityCount" .  Use "$loop.count" .

       •   In Alloy, excess whitespace outside of the directive matters.  In the VTL user-guide
           it mentions that all excess whitespace is gobbled up.  Alloy supports the TT chomp
           operators.  These operators are placed just inside the open and close parenthesis of
           directives as in the following:

                #set(~ $a = 1 ~)

       •   In Alloy, division using "/" is always floating point.  If you want integer division,
           use "div".  In Java Velocity, "/" division is integer only if both numbers are
           integers.

       •   Perl doesn't support negative ranges.  However, arrays do have the reverse method.

                #foreach( $bar in [-2 .. 2].reverse ) $bar #end

       •   In Alloy arguments to macros are passed by value, not by name.  This is easy to
           achieve with alloy - simply encase your arguments in single quotes and then eval the
           argument inside the macro.  The velocity people claim this feature as a jealously
           guarded feature.  My first template system "WrapEx" had the same feature.  It happened
           as an accident.  It represents lazy software architecture and is difficult to
           optimize.

AUTHOR

       Paul Seamons <paul@seamons.com>

LICENSE

       This module may be distributed under the same terms as Perl itself.