package Spreadsheet::Template::Processor::Xslate; use Moose; # ABSTRACT: preprocess templates with Xslate use Text::Xslate; with 'Spreadsheet::Template::Processor'; =head1 SYNOPSIS my $template = Spreadsheet::Template->new( processor_class => 'Spreadsheet::Template::Processor::Xslate', processor_options => { syntax => 'TTerse' }, ); =head1 DESCRIPTION This class implements L to run the template data through L. In addition to allowing you to use the provided variables, it also provides some convenience macros to use when writing your templates: =over 4 =item format($name, $options) Declares a named format, which can be used with the C helper. C<$name> is the name to use for the format, and C<$options> is a hashref to use as the value for the C entry in the cell. =item c($contents, $format, $type, %args) Returns the representation of a cell. C<$contents> is the cell contents, C<$format> is either the name of a format declared with the C helper, or a hashref of format options, C<$type> is either C<"string">, C<"number">, or C<"date_time">, and C<%args> contains any other parameters (such as C, for instance) to declare for the cell. C<$type> is optional, and if not passed, defaults to C<"string">. =item merge($content, $format, $type, $first_row, $first_col, $last_row, $last_col, %args) Returns representation of a range of cells to be merged. C<$content> is the content to be placed in the merged cell.C<$format> is the name of a format declared with the C helper or a hashref of format options. C<$type> is either C<"string">, C<"number">, or C<"date_time">. C<$first_row>, C<$first_col>, C<$last_row>, C<$last_col> are zero-indexed Excel row, column numbers. C<%args> contains any other parameters (such as C, for instance) to declare for the cell. =item true Returns C. =item false Returns C. =back =cut =attr syntax Which Xslate syntax engine to use. Defaults to C. =cut has syntax => ( is => 'ro', isa => 'Str', default => 'Metakolon', ); has xslate => ( is => 'ro', isa => 'Text::Xslate', lazy => 1, default => sub { my $self = shift; return Text::Xslate->new( type => 'text', syntax => $self->syntax, module => ['Spreadsheet::Template::Helpers::Xslate'], ); }, ); sub process { my $self = shift; my ($contents, $vars) = @_; return $self->xslate->render_string($contents, $vars); } __PACKAGE__->meta->make_immutable; no Moose; =begin Pod::Coverage process =end Pod::Coverage =cut 1;