Text::Xslate::Syntax::Kolon - The default template syntax
use Text::Xslate; my $tx = Text::Xslate->new( syntax => 'Kolon', # This is the default string => 'Hello, <: $dialect :> world!', ); print $tx->render({ dialect => 'Kolon' });
Kolon is the default syntax, using <: ... :> tags and : ... line code.
<: ... :>
: ...
<: $var :> <: $var.0 :> <: $var.field :> <: $var.accessor :> <: $var["field"] :> <: $var[0] :>
Variables may be HASH references, ARRAY references, or objects.
: for $data ->($item) { [<: $item.field :>] : }
: if $var == nil { $var is nil. : } : else if $var != "foo" { $var is not nil nor "foo". : } : else { $var is "foo". : } : if( $var >= 1 && $var <= 10 ) { $var is 1 .. 10 : } : $var.value == nil ? "nil" : $var.value
Relational operators (== != < <= > >=):
== != < <= > >=
: $var == 10 ? "10" : "not 10" : $var != 10 ? "not 10" : "10"
Arithmetic operators (+ - * / %):
+ - * / %
: $var * 10_000 : ($var % 10) == 0
Logical operators (|| && //)
|| && //
: $var >= 0 && $var <= 10 ? "ok" : "too smaller or too larger" : $var // "foo" # as a default value
String operators (~)
~
: "[" ~ $var ~ "]" # concatination
Operator precedence:
(TODO)
Once you have registered functions, you can call them with () or |.
()
|
: f() # without args : f(1, 2, 3) # with args : 42 | f # the same as f(42)
Dynamic functions/filters:
# code sub mk_indent { my($prefix) = @_; return sub { my($str) = @_; $str =~ s/^/$prefix/xmsg; return $str; } } my $tx = Text::Xslate->new( function => { indent => \&mk_indent, }, ); :# template : $value | indent("> ") : indent("> ")($value)
: include "foo.tx"
Xslate templates may be recursively included, but including depth is limited to 100.
You can extend templates with block modifiers.
Base templates mytmpl/base.tx:
: block title -> { # with default [My Template!] : } : block body -> {;} # without default
Another derived template mytmpl/foo.tx:
: # cascade "mytmpl/base.tx" is also okey : cascade mytmpl::base : # use default title : around body -> { My Template Body! : }
Yet another derived template mytmpl/bar.tx:
: cascade mytmpl::foo : around title -> { -------------- : super -------------- : } : before body -> { Before body! : } : after body -> { After body! : }
Then, Perl code:
my $tx = Text::Xslate->new( file => 'mytmpl/bar.tx' ); $tx->render({});
Output:
-------------- [My Template!] -------------- Before body! My Template Body! After Body!
This is also called as template inheritance.
: macro add ->($x, $y) { : $x + $y; : } : add(10, 20) : macro signeture -> { This is foo version <: $VERSION :> : } : signeture()
Note that return values of macros are values that their routines renders. That is, macros themselves output nothing.
Text::Xslate
To install Text::Xslate, copy and paste the appropriate command in to your terminal.
cpanm
cpanm Text::Xslate
CPAN shell
perl -MCPAN -e shell install Text::Xslate
For more information on module installation, please visit the detailed CPAN module installation guide.