The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#! perl

# Author          : Johan Vromans
# Created On      : Fri Aug  5 20:19:18 2010
# Last Modified By: Johan Vromans
# Last Modified On: Mon Aug 16 07:53:45 2010
# Update Count    : 29
# Status          : Unknown, Use with caution!

=head1 NAME

Template::Plugin::HTML_NonAsc - Slightly less picky html filter.

=head1 SYNOPSIS

This filter behaves like the builtin html filter except that it does
B<not> escape ASCII characters, I<including C<< < >>, C<< > >>, C<< & >>,
and C<< " >>>. This makes it possible to write templates in HTML using
non-ASCII characters. Pass the contents through this filter and all
non-ASCII characters will be escaped using HTML entities.

The best place to apply this filter is in your page/wrapper:

    [%
    USE HTML_NonAsc;		# for html_nonasc filter
    SWITCH page.type;
        ...
        CASE "html";
            content | html_nonasc
                WRAPPER page/html
                        + page/layout;
        ...
        CASE;
            THROW page.type "Invalid page type: $page.type";
    END;
    -%]

=cut

use 5.008003;
use strict;
use warnings;

package Template::Plugin::HTML_NonAsc;

our $VERSION = 0.03;

use base qw( Template::Plugin::Filter );

use HTML::Entities;

sub init {
    my $self = shift;
    my $name = $self->{ _CONFIG }->{name} || 'html_nonasc';
    $self->install_filter($name);
    return $self;
}

sub filter {
    my ( $self, $parameter ) = @_;
    encode_entities( $parameter, '^\n\x20-\x7e' );
    $parameter;
}

=head1 AUTHOR

Johan Vromans, C<< <jv at cpan.org> >>

=head1 BUGS

Please report any bugs or feature requests to
C<bug-template-plugin-html_nonasc at rt.cpan.org>, or through the web
interface at
L<http://rt.cpan.org/NoAuth/ReportBug.html?Queue=Template-Plugin-HTML_NonAsc>.
I will be notified, and then you'll automatically be notified of
progress on your bug as I make changes.

=head1 COPYRIGHT & LICENSE

Copyright 2010 Johan Vromans, all rights reserved.

This program is free software; you can redistribute it and/or modify it
under the same terms as Perl itself.

=cut

1;