perl6 compiled templates
Perl6
Switch branches/tags
Nothing to show
Latest commit 1ad9e7a May 2, 2017 @tony-o committed on GitHub bump version with meta filename modernization

README.md

#Template::Protone

Build Status

Creating synergy throughout the world by bringing harmonious designs and interfaces into a collaborative space that resides between what users want and also giving people what they need.

Also, a templating system that allows you to embed perl6. EVALs your templates into a callable sub and caches them for later use, if you want.

##Stuff still to do or nice to haves

  • Don't match a closer embedded in quotes
  • Make the opener escapable
  • Run template sub in a space where custom functions are available to the template
  • Save template sub to a file so it doesn't need to be rebuilt every time app is restarted

#Usage

use Template::Protone;

my Template::Protone $templ .= new;

$templ.parse(template => [q|
Hello <% print "WORLD!"; %>

Oh, did you want variables too?  I can do <% print $data<what>; %> too.

<% for ^3 { %>
<% print $_ ~ ($_ == 2 ?? '' !! ', '); %>
<% } %>
|], :name<example>);

say $templ.render(:name<example>, :data(what => 'that'));

##Output

Hello WORLD!

Oh, did you want variables too?  I can do that too.

0, 1, 2

#What's that? You don't like <% and %> ?

qw<...>;

use Template::Protone;

my Template::Protone $templ .= new(:open('%%'), :close("%%"));

say $templ.render(template => [q|
Hello %% print "WORLD!"; %%

List: %% for ^3 {  
   print $_ ~ ($_ == 2 ?? '' !! ', '); 
 } %%
|]);

qw<...>;

##Output

Hello WORLD!

List: 0, 1, 2

#Performance

Yea, yea, but how fast does your car go

$ perl6 -Ilib bench.pl6; perl6 -Iblib/lib bench.pl6
Benchmark:
Timing 1000 iterations of parsing, render...
   parsing: 11.5185 wallclock secs @ 86.8168/s (n=1000)
    render: 0.1311 wallclock secs @ 7629.1286/s (n=1000)
Benchmark:
Timing 1000 iterations of parsing, render...
   parsing: 11.4190 wallclock secs @ 87.5737/s (n=1000)
    render: 0.1288 wallclock secs @ 7762.4681/s (n=1000)

#Author

Tony O'Dell

#License

You can use and distribute this module under the terms of the The Artistic License 2.0. See the LICENSE file included in this distribution for complete details.