package GOB::Template; use strict; use FileHandle; use Text::ScriptTemplate; =head1 Bee Templates The perl-based templating system for use in Bee apps. This is mostly a pass-through to Text::Template::Simple The intent is to make our perl templates as similar to PHP as possible * Delimiters: [* *code* *] * Extend PHP: [*= $variable *] * PHP echo: * PHP include (TODO: How doe $ENV{GOB_ROOT}.'/lib/reporting_templates/pipeline_documentation.htt', param => [$ph, $pfile], outputfile => $dfile, escmode => 0, }); becomes roughly: # Bee Template Engine GOB::Template::exec( $ENV{GOB_ROOT}.'/lib/reporting_templates/pipeline_documentation.htt', [$ph, $pfile], # could be {ph => $ph, pfile => $pfile}, { OUT_FILE_NAME => $dfile }); =cut sub exec{ my ($tfile, $tdata, $opts) = @_; my $OUTFH = undef; if($OUTFH = $opts->{OUT_FILE_HANDLE}){ }elsif($opts->{OUT_FILE_NAME}){ $OUTFH = FileHandle->new('> '.$opts->{OUT_FILE_NAME}); if(!$OUTFH){ die "Couldn't open output file: [".$opts->{OUT_FILE_NAME}."]"; } } #$Text::ScriptTemplate::DEBUG = 1; #$opts->{DEBUG}; my $tst = Text::ScriptTemplate->new(); $tst->load( $tfile, DELIM => [qw([* *])] ); $tst->setq( tdata => $tdata ); # get our Expanded Template STRing my $et_str = $tst->fill( PACKAGE => new GOB::_TSpace(), OHANDLE => $OUTFH, ); # The `eval` used in the templating system doesn't pass along errors if($@){ my $raw_code = $tst->{buff}; my $numberred_code = ''; my $lno = 0; # Line NOmber foreach my $line (split(/\n/, $raw_code)){ $numberred_code .= $lno++ .$line."\n"; } die "Template error: [$@] in [$tfile], code: [$numberred_code]"; } return $et_str; } 1; ############################################################################# # This seems to be necessary-ish for Text::ScriptTemplate ############################################################################## package GOB::_TSpace; use Data::Dumper; use warnings; use strict; use vars qw($tdata @tdata %tdata $_handle $_OBUFFER $_OHANDLE); sub new { bless {}, shift }