
package Trexy::Template;

###############################################################################
# Nigel Hamilton
#
# Copyright Nigel Hamilton 2005
# All Rights Reserved
#
# Author:       Nigel Hamilton
# Filename:     Trexy::Template.pm
# Description:  Do simple, fast, "no code in the template" processing
#
#                               Based on Uri Guttman's sublime
#                                TinyTemplate module - released
#                               at YAPC::NA, 2006.
#
#                               This template module features:
#
#                               * implicit loops
#                               * template includes
#                               * template caching
#                               * no coding in the template
#
# Date          Change
# -----------------------------------------------------------------------------
# 24/09/2006    Took Uri's module and extended it slightly
#
###############################################################################

use strict;
use warnings ;

use base qw(Template::Simple);

# escape Regex meta characters
my $start_delimiter = qr/\[\-/;
my $end_delimiter   = qr/\-\]/;


###############################################################################
#
# new - construct a template
#
###############################################################################

sub new {

     my ($class) = @_;

     return $class->SUPER::new( pre_delim  => $start_delimiter,
                                post_delim => $end_delimiter    );

}


###############################################################################
#
# render - fully render the template into a string
#
###############################################################################

sub render {

     my ($this, $string, $tokens) = @_;

     # return a string from render
     return ${ $this->SUPER::render($string, $tokens) };

}


###############################################################################
#
# render_as_ref - render as a string reference
#
###############################################################################

sub render_as_ref {

     my ($this, $string, $tokens) = @_;

     # return a string from render
     return $this->SUPER::render($string, $tokens);

}


###############################################################################
#
# get_tokens - grab the tokens values out of a template
#
###############################################################################

sub get_tokens {

     my ($string) = @_;

     my @found_tokens = $string =~ m/$start_delimiter(\w+)$end_delimiter/g;

     my %unique_tokens = map { $_ => 1 } @found_tokens;

     return keys %unique_tokens;

}


1;
