File: QuickTemplate.pm

package info (click to toggle)
libtext-micromason-perl 2.13-3
  • links: PTS, VCS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 624 kB
  • ctags: 180
  • sloc: perl: 3,222; makefile: 23
file content (119 lines) | stat: -rw-r--r-- 3,170 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
package Text::MicroMason::QuickTemplate;

require Text::MicroMason::Base;
require Text::MicroMason::StoreOne;
require Text::MicroMason::HasParams;
push @ISA, map "Text::MicroMason::$_", qw( StoreOne HasParams );

require Exporter;
$DONTSET = \"";
sub import { @EXPORT = '$DONTSET'; goto &Exporter::import }

######################################################################

sub defaults {
  (shift)->NEXT('defaults'), delimiters => [ '{{', '}}' ],
}

######################################################################

sub lex_token {
  my $self = shift;
  
  my ($l_delim, $r_delim) = @{ $self->{'delimiters'} };
  /\G \Q$l_delim\E (.*?) \Q$r_delim\E/gcxs ? ( expr => 
      'my @param = $m->param(' . "'\Q$1\E'" . ');
      scalar @param or die "could not resolve the following symbol: ' . $1 . '"; 
      ( $param[0] eq "' . $DONTSET . '" ) ? "{{' . $1 . '}}" : $param[0]' ) :
  
  # Things that don't match the above
  /\G ( (?: [^\{] | \{(?!\{) )+ ) /gcxs ? ( 'text' => $1 ) : 
  
  ()
}

######################################################################

sub fill { (shift)->execute_again( @_ ) }

sub pre_fill { unshift @{ (shift)->{params} }, { @_ } }

sub clear_values { @{ (shift)->{params} } = () }

######################################################################

1;

__END__

######################################################################

=head1 NAME

Text::MicroMason::QuickTemplate - Alternate Syntax like Text::QuickTemplate


=head1 SYNOPSIS

Instead of using this class directly, pass its name to be mixed in:

  use Text::MicroMason;
  my $mason = Text::MicroMason::Base->new( -QuickTemplate );

Use the standard compile and execute methods to parse and evalute templates:

  print $mason->compile( text=>$template )->( @%args );
  print $mason->execute( text=>$template, @args );

Or use Text::QuickTemplate's calling conventions:

    $template = Text::MicroMason->new( -HTMLTemplate, text=>'simple.tmpl' );
    print $template->fill( %arguments );

Text::QuickTemplate provides a syntax to embed values into a text template:

    Good {{timeofday}}, {{name}}!


=head1 DESCRIPTION

This mixin class overrides several methods to allow MicroMason to emulate
the template syntax and some of the other features of Text::QuickTemplate.

This class automatically includes the following other mixins: TemplateDir, HasParams, and StoreOne.

=head2 Compatibility with Text::QuickTemplate

This is not a drop-in replacement for Text::QuickTemplate, as the implementation is quite different, but it should be able to process most existing templates without major changes.

The following features of EmbPerl syntax are supported:

=over 4

=item *

Curly bracketed tags with parameter names.

=item *

Array of parameters hashes.

=item *

Special $DONTSET variable.

=back


=head1 SEE ALSO

The interface being emulated is described in L<Text::QuickTemplate>.

For an overview of this templating framework, see L<Text::MicroMason>.

This is a mixin class intended for use with L<Text::MicroMason::Base>.

For distribution, installation, support, copyright and license 
information, see L<Text::MicroMason::Docs::ReadMe>.

=cut