| Text-MicroMason-SafeServerPages documentation | Contained in the Text-MicroMason-SafeServerPages distribution. |
Text::MicroMason::SafeServerPages - Safety ServerPages syntax
use Text::MicroMason;
use Text::MicroMason::SafeServerPages;
my $m = Text::MicroMason->new(qw/ -SafeServerPages /);
my $template = <<'EOF';
<% my $s = \%ARGS; %>
<html>
<title><%= $s->{title} %></title>
<%raw= $s->{body} %>
</html>
EOF
my $cr = $m->compile( text => $template );
print $cr->(
title => "Foo<bar>",
body => qq{<div class="section">aaaa</div>},
);
Text::MicroMason::SafeServerPages is same as Text::MicroMason::ServerPages but HTML-escaped by default.
Same as Text::MicroMason::ServerPages but =.
Include evaluated value with HTML-escape.
Include evaluated value without HTML-escape.
cho45 <cho45@lowreal.net>
Original is Text::MicroMason::ServerPages.
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
| Text-MicroMason-SafeServerPages documentation | Contained in the Text-MicroMason-SafeServerPages distribution. |
package Text::MicroMason::SafeServerPages; use strict; our $VERSION = '0.03'; my %block_types = ( '' => 'perl', # <% perl statements %> '=' => 'expr', # <%= perl expression (HTML escaped) %> 'raw=' => 'expr', # <%= perl expression (raw) %> '--' => 'doc', # <%-- this text will not appear in the output --%> '&' => 'file', # <%& filename argument %> ); my $re_eol = "(?:\\r?\\n|\\r|\\z)"; my $re_tag = "args|cleanup|doc|expr|file|init|once|perl|text"; sub lex_token { # Blocks in <%word> ... </%word> tags. /\G <% ($re_tag) \s*> (.*?) <\/% \1 \s*> $re_eol? /xcogs ? ( $1 => $2 ) : # Blocks in <% ... %> tags. /\G <% ((?:(?:raw)?=|&)?) (.*?) %> /gcxs ? ( $block_types{$1} => ($1 eq '=') ? "encode_entities(do { $2 }, '<>&\"\\'')" : $2 ) : # Blocks in <%-- ... --%> tags. /\G <% -- (.*?) -- %> /gcxs ? ( 'doc' => $1 ) : # Things that don't match the above. /\G ( (?: [^<] | <(?!\/?%) )+ ) /gcxs ? ( 'text' => $1 ) : # Lexer error. () } sub assemble { my ($self, @tokens) = @_; my $perl_code = $self->NEXT('assemble', @tokens); return "do { use HTML::Entities; $perl_code };"; } 1; __END__