package HTML::MobileJp::Filter::PictogramFallback::TypeCast;
use Moose;
with 'HTML::MobileJp::Filter::Role';
has '+config' => (
default => sub {{
emoticon_yaml => '', # /path/to/typecast/conf/emoticon.yaml
template => '', # sprintf format
}},
);
has emoticon_map => (
is => 'rw',
isa => 'Maybe[HashRef]',
default => sub { {} },
);
use Encode;
use Encode::JP::Mobile ':props';
use YAML;
sub init {
my $self = shift;
my $yaml = YAML::LoadFile($self->config->{emoticon_yaml})
or die "can't open file: ". $self->config->{emoticon_yaml};
$self->emoticon_map($yaml->{docomo});
}
sub filter {
my ($self, $html) = @_;
unless ($self->mobile_agent->is_non_mobile) {
return $html;
}
$html = Encode::encode('x-utf8-docomo', $html, sub { encode_utf8 chr shift} );
$html = Encode::decode('utf-8', $html);
$html =~ s{(\p{InMobileJPPictograms})}{
my $char = $1;
my $code = sprintf '%X', ord $char;
if (my $name = $self->emoticon_map->{$code}) {
sprintf $self->config->{template}, $name, $char;
} else {
$char;
}
}ge;
$html;
}
1;
__END__
=encoding utf-8
=head1 NAME
HTML::MobileJp::Filter::PictogramFallback::TypeCast - PC の場合絵文字を TypeCast の絵文字画像に
=head1 SYNOPSIS
- module: PictogramFallback::TypeCast
config:
emoticon_yaml: /path/to/emoticon.yaml
template:
=head1 CONFIG AND DEFAULT VALUES
emoticon_yaml => '', # /path/to/typecast/conf/emoticon.yaml
template => '', # sprintf format
=head1 DESCRIPTION
TypeCast の絵文字画像(DoCoMo 相当)にない絵文字はそのままです。
TypeCast にない絵文字について文字で表現するようにしたい場合は
L と
組み合わせて以下のようにする方法があります。
- module: PictogramFallback::TypeCast
config:
emoticon_yaml: /path/to/emoticon.yaml
template:
- module: PictogramFallback
config:
template: %s
params:
- fallback_name_htmlescape
=head1 SEE ALSO
L
=head1 AUTHOR
Naoki Tomita Etomita@cpan.orgE
=cut