#!/usr/local/bin/perl

use strict ;
use warnings ;

use Template::Simple ;
use Data::Dumper ;

my $data = generate_data( 3, 6 ) ;
#print Dumper $data ;

my $tmpl = Template::Simple->new() ;

$tmpl->add_templates( { bench => <<TMPL } ) ;
Header
Val 1: [%val_1%]
Val 2: [%val_2%]
Footer
TMPL

my $x = <<XXX ;
[%START nest%]
	Level: [%level%]
[%END nest%]
[%START opt%]
	Optional Level: [%level%]
[%END opt%]
XXX



my $rendered = $tmpl->render( 'bench', $data ) ;

$tmpl->compile( 'bench', $data ) ;
print $tmpl->get_source( 'bench' ) ;

my $comp_rendered = $tmpl->render( 'bench', $data ) ;

my $ok = $$rendered eq $$comp_rendered ;

print "OK [$ok]\n" ;

print $$rendered ;
print $$comp_rendered ;

exit ;




no warnings ;


sub rendered {

}

sub map_join {

}

sub append {

}


sub concat {

	my( $data ) = @_ ;

	my $out = do {
		my $out ;
		foreach my $data ( ref $data eq 'ARRAY' ? @{$data} : $data ) {

			$out .= ref $data ne 'HASH' ? $data :
			"text1\n"
			.
			do {
				my $data = $data->{nest} ;

				my $out ;
				foreach my $data ( ref $data eq 'ARRAY' ? @{$data} : $data ) {

					$out .= ref $data ne 'HASH' ? $data :
					"\n\tBAR is "
					.
					$data->{bar}
					.
					"\n" ;
				}


				$out ;
			}
			.
			"\n" ;
		}
		$out ;
	} ;

	return \$out ;
}


sub generate_data {

	my( $outer_size, $inner_size ) = @_ ;

	my @outer_data ;

	for my $outer ( 1 .. $outer_size ) {

		my @inner_data ;

		for my $inner ( 1 .. $inner_size ) {

			push @inner_data, {

				val_1	=> ($outer x 2),
				val_2	=> ($inner x 3),
				nest	=> {
					level => "$outer-$inner",
				},
				$inner % 2 ? () : (
			
					opt	=> {
						level => "$outer-$inner",
					},
				),
			} ;
		}

		push @outer_data, [@inner_data] ;
	}

	return \@outer_data ;
}
