App-Dapper
view release on metacpan or search on metacpan
lib/App/Dapper/Filters.pm view on Meta::CPAN
=head1 DESCRIPTION
Filters contained here can be called from Liquid template files using
the filter/pipe mechanism built in to Liquid. Example:
{{ site.time | date_to_xmlschema }}
=cut
use utf8;
use open ':std', ':encoding(UTF-8)';
use 5.8.0;
use strict;
use warnings FATAL => 'all';
use Data::Dumper;
use CGI qw(:standard escapeHTML);
=head2 import
Called when this module is 'used' from somewhere else. This subroutine
registers Liquid filters contained in this file.
=cut
#sub import {
# $filters = Template::Filters->new({
# FILTERS => {
# 'xml_escape' => \&xml_escape,
# 'date_to_xmlschema' => \&date_to_xmlschema,
# 'replace_last' => \&replace_last,
# 'smart' => \&smart,
# 'json' => \&json,
# },
# });
#}
=head2 xml_escape
Liquid filter to escape strings into formats that can be included
in XML files.
=cut
sub xml_escape {
my $str = shift;
my $q = new CGI;
return $q->escapeHTML( $str );
}
=head2 date_to_xmlschema
Convert a date to an XML-formattted version of the date that also includes
the timezone.
=cut
sub date_to_xmlschema {
my $str = shift;
use DateTime;
use DateTime::Format::XSD;
return DateTime::Format::XSD->format_datetime($str);
}
=head2 replace_last
Liquid filter to replace the last occurrance of a string with another string.
=cut
sub replace_last {
my ($input, $string, $replacement) = @_;
$replacement = defined $replacement ? $replacement : '';
$input =~ s/^(.*)$string(.*)$/$1$replacement$2/s;
return $input;
}
=head2 smart
Replace dashes with mdashes and ndashes.
=cut
sub smart {
my $input = shift;
$input =~ s/([^-])--([^-])/$1\–$2/g;
$input =~ s/([^-])---([^-])/$1\—$2/g;
return $input;
}
=head2 json
Turn string into json-formatted string.
=cut
use JSON;
sub json {
my $input = shift;
my $flags = {
allow_blessed => 1,
allow_barekey => 1,
allow_nonref => 1,
utf8 => 1,
pretty => 1
};
return to_json($input, $flags);
}
1;
( run in 0.651 second using v1.01-cache-2.11-cpan-39bf76dae61 )