Encode::JP::Mobile::Fallback - custom callback for pictogram convert


Encode-JP-Mobile documentation Contained in the Encode-JP-Mobile distribution.

Index


Code Index:

NAME

Top

Encode::JP::Mobile::Fallback - custom callback for pictogram convert

SYNOPSIS

Top

  use Encode;
  use Encode::JP::Mobile;

  encode('x-utf8-docomo', "\x{ECA2}", Encode::JP::Mobile::FB_CHARACTER); # => (>3<)

FALLBACK

Top

Encode::JP::Mobile::FB_CHARACTER

キャリアがメール送信時に行なっている絵文字の相互変換をエミュレートするためのコールバックです。

Encode::JP::Mobile で定義されたエンコーディングはキャリア間の 絵文字 => 絵文字(場合によっては複数の絵文字)相互変換をサポートしていますが、絵文字 => 文字 と変換されるものは含まれていません。Encode::JP::Mobile::FB_CHARACTEREncode::encode の引数として渡すことでキャリアが行なう相互変換と同じことを行ないます。

  my $char = "\x{EFC5}\x{ED8B}"; # au の宇宙人とバンザイ
  encode('x-utf8-docomo', $char, Encode::JP::Mobile::FB_CHARACTER); # => [宇宙人]\(^o^)/

絵文字以外についての fallback の扱いについては、Encode::JP::Mobile::FB_CHARACTER に引数として渡すことができます。

  my $char = "\x{2668}\x{ED8B}"; # 温泉マーク(x-utf8-docomoに含まれない)とバンザイ
  encode('x-utf8-docomo', $char, Encode::JP::Mobile::FB_CHARACTER); # => ? \(^o^)/ 

  encode('x-utf8-docomo', $char, Encode::JP::Mobile::FB_CHARACTER(Encode::FB_XMLCREF)); # => &#x2668;\(^o^)/

  my $fb_callback = Encode::JP::Mobile::FB_CHARACTER(sub {"[x]"});
  encode('x-utf8-docomo', $char, $fb_callback); # [x]\(^o^)/

Encode::JP::Mobile::FB_CHARACTERuse Encode::JP::Mobile; で利用できます。use Encode::JP::Mobile::Fallback; する必要はありません。

AUTHOR

Top

Naoki Tomita <tomita@cpan.org>

SEE ALSO

Top

Encode::JP::Mobile


Encode-JP-Mobile documentation Contained in the Encode-JP-Mobile distribution.

package Encode::JP::Mobile::Fallback;
use strict;
use warnings;
use Encode;
use Encode::JP::Mobile ':props';

sub Encode::JP::Mobile::FB_CHARACTER { 
    my $check = @_ ? shift : Encode::FB_DEFAULT;

    return sub {
        my $code = shift;
        my $char = chr $code;
        my $fallback_name;
        if ($char =~ /^\p{InMobileJPPictograms}$/) {
            my $obj = Encode::JP::Mobile::Character->from_unicode($code);
            for (qw( I V E )) {
                my $f = $obj->fallback_name($_);
                $fallback_name = $f if defined $f;
            }
        }
        return defined $fallback_name 
            ? encode('utf-8', $fallback_name)
            : encode('x-utf8-docomo', $char, $check);
            # using x-utf8-docomo for "utf8 but that has cp932 chars only"
    }; 
}

1;
__END__