Text::Xslate::Syntax::FiltersAsTags - easily add more template tags which are mapped onto filters
version 0.1
package My::Own::Syntax; use Mouse; extends 'Text::Xslate::Syntax::TTerse'; # or ::Kolon with 'Text::Xslate::Syntax::FiltersAsTags'; # this module! my @more_symbols = qw(TL R_table R_vtable R_svg R_collect_tables); # additional tags sub more_symbols { @more_symbols } # you must provide this method no Mouse; __PACKAGE__->meta->make_immutable; 1
in your controller:
my $tx = Text::Xslate->new( syntax => 'My::Own::Syntax', function => +{ tl => html_builder(\&translate_switch), r_table => html_builder { &fixup_filter_parser; make_R_table($_[0]) }, r_svg => html_builder { &fixup_filter_parser; make_R_svg($_[0]); }, r_collect_tables => html_builder { &fixup_filter_parser; eval_R_lines('r=list()'); eval_R_lines($_[0]); R_merge_tables() }, }, ); sub fixup_filter_parser { for (@_) { s/^\s*<!\[CDATA\[(.*)\]\]>\s*$/$1/s; s/(\n\s*)*$//; s/^(\s*\n)*//; } }
in your template:
[% TL %][_en] observation period [_de] Beobachtungszeitraum[% END %] [% R_table %] summary(md_real$region) [% END %] [% R_svg %] boxplot(md_real$[% data %], log="y", main="[% data %]") [% END %] [% R_collect_tables %]<![CDATA[ r$`[% TL %] at beginning [% END %]` <- table(md_real[md_real$appeared.on$mday<4,]$appeared.on$hour) r$`[% TL %] not at beginning [% END %]` <- table(md_real[md_real$appeared.on$mday>=4,]$appeared.on$hour) ]]>[% END %]
this role helps you to quickly add more template tags to your Xslate template, which are then mapped to filters in your parse run.
You only need to provide a single method in your own syntax class, more_symbols. It must return a list of additional tags allowed in the template. You connect to those tags, which are a simple convenience for a filter call, from your controller.
more_symbols
Note that you do need to make an own class for every domain specific template, and it does need to use Mouse because that's what Text::Xslate uses. You will get weird errors when trying to use Moo.
Ailin Nemui <ailin at devio dot us>
This software is copyright (c) 2013 by Ailin Nemui.
This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.
To install Text::Xslate::Syntax::FiltersAsTags, copy and paste the appropriate command in to your terminal.
cpanm
cpanm Text::Xslate::Syntax::FiltersAsTags
CPAN shell
perl -MCPAN -e shell install Text::Xslate::Syntax::FiltersAsTags
For more information on module installation, please visit the detailed CPAN module installation guide.