HTML::MobileJp::Filter::PictogramFallback - PC の場合の絵文字の代替表現


HTML-MobileJp-Filter documentation Contained in the HTML-MobileJp-Filter distribution.

Index


Code Index:

NAME

Top

HTML::MobileJp::Filter::PictogramFallback - PC の場合の絵文字の代替表現

SYNOPSIS

Top

  - module: PictogramFallback
    config:
      template: <img src="/img/pictogram/%s.gif" />
      params:
        - unicode_hex

CONFIG AND DEFAULT VALUES

Top

  template => '', # sprintf format
  params   => [], # Encode::JP::Mobile::Charnames method names

params で Encode::JP::Mobile::Charnames のメソッドとは別に特別に 使えるものは以下のとおりです。

fallback_name
  - module: PictogramFallback
    config:
      template: %s
      params:
        - fallback_name

fallback_name('I')fallback_name('E')fallback_name('V') を 返します。(>3<) のように出ます。

fallback_name_htmlescape
  - module: PictogramFallback
    config:
      template: <img src="/img/pictogram/%s.gif" alt="%s" />
      params:
        - unicode_hex
        - fallback_name_htmlescape

<img src="/img/pictogram/ECA2.gif" alt="(&amp;gt;3&amp;lt;)" /> のように出ます。

SEE ALSO

Top

Encode::JP::Mobile, Encode::JP::Mobile::Charnames

AUTHOR

Top

Naoki Tomita <tomita@cpan.org>


HTML-MobileJp-Filter documentation Contained in the HTML-MobileJp-Filter distribution.

package HTML::MobileJp::Filter::PictogramFallback;
use Any::Moose;

with 'HTML::MobileJp::Filter::Role';

has '+config' => (
    default => sub {{
        template => '', # sprintf format
        params   => [], # Encode::JP::Mobile::Charnames method names
    }},
);

use Encode::JP::Mobile ':props';
use Encode::JP::Mobile::Charnames;

sub filter {
    my ($self, $content) = @_;
    
    unless ($self->mobile_agent->is_non_mobile) {
        return;
    }
    
    $content =~ s{(\p{InMobileJPPictograms})}{
                my $char = Encode::JP::Mobile::Character->from_unicode(ord $1);
                my @param;
                for my $param (@{ $self->config->{params} }) {
                        if ($self->can($param)) {
                                push @param, $self->$param($char);
                        } else {
                                push @param, $char->$param();
                        }
                }
                sprintf $self->config->{template}, @param;
        }ge;
    
    $content;
}

my %htmlspecialchars = ( '&' => '&amp;', '<' => '&lt;', '>' => '&gt;', '"' => '&quot;' );
my $htmlspecialchars = join '', keys %htmlspecialchars;

sub fallback_name {
    my ($self, $char) = @_;
    my $fallback;
    $fallback ||= $char->fallback_name($_) for qw( I V E );
    $fallback || "";
}

sub fallback_name_htmlescape {
    my ($self, $char) = @_;
    my $fallback = $self->fallback_name($char);
    $fallback =~ s/([$htmlspecialchars])/$htmlspecialchars{$1}/ego;
    $fallback;
}

__PACKAGE__->meta->make_immutable;

1;
__END__