1=encoding utf-8 2 3=head1 NAME 4 5Encode::JP::Emoji::FB_EMOJI_TEXT - Emoji fallback functions 6 7=head1 SYNOPSIS 8 9 use Encode; 10 use Encode::JP::Emoji; 11 use Encode::JP::Emoji::FB_EMOJI_TEXT; 12 13 # DoCoMo Shift_JIS <SJIS+F95B> octets fallback to "[SOON]" 14 my $soon = "\xF9\x5B"; 15 Encode::from_to($soon, 'x-sjis-e4u-docomo', 'x-sjis-e4u-kddiweb', FB_EMOJI_TEXT()); 16 17 # KDDI Shift_JIS <SJIS+F7B5> octets fallback to "[霧]" 18 my $fog = "\xF7\xB5"; 19 Encode::from_to($fog, 'x-sjis-e4u-kddiweb', 'x-sjis-e4u-softbank3g', FB_EMOJI_TEXT()); 20 21 # SoftBank UTF-8 <U+E524> string fallback to "[ハムスター]" 22 my $hamster = "\x{E524}"; 23 my $softbank = Encode::encode('x-sjis-e4u-none', $hamster, FB_EMOJI_TEXT()); 24 25 # Google UTF-8 <U+FE1C1> octets fallback to "[クマ]" 26 my $bear = "\xF3\xBE\x87\x81"; 27 my $google = Encode::decode('x-utf8-e4u-none', $bear, FB_EMOJI_TEXT()); 28 29=head1 DESCRIPTION 30 31This module exports the following fallback function. 32 33=head2 FB_EMOJI_TEXT() 34 35This returns emoji character name. 36Having conflicts with SoftBank encoding, KDDI(app) encoding is B<NOT> recommended. 37 38=head1 BUGS 39 40C<Encode.pm> 2.22 or less would face a problem with fallback function. 41Use latest version of C<Encode.pm>, or use with C<EncodeUpdate.pm> 42in C<t> test directory of the package. 43 44=head1 AUTHOR 45 46Yusuke Kawasaki, L<http://www.kawa.net/> 47 48=head1 SEE ALSO 49 50L<Encode::JP::Emoji> 51 52=head1 COPYRIGHT 53 54Copyright 2009-2010 Yusuke Kawasaki, all rights reserved. 55 56=cut 57 58package Encode::JP::Emoji::FB_EMOJI_TEXT; 59use strict; 60use warnings; 61use base 'Exporter'; 62use Encode (); 63use Encode::JP::Emoji::Mapping; 64use Encode::JP::Emoji::Property; 65 66our $VERSION = '0.60'; 67 68our @EXPORT = qw( 69 FB_EMOJI_TEXT 70); 71 72our $TEXT_FORMAT = '[%s]'; 73 74my $ascii = Encode::find_encoding('us-ascii'); 75my $utf8 = Encode::find_encoding('utf8'); 76my $stand = Encode::find_encoding('x-utf8-e4u-unicode'); 77my $mixed = Encode::find_encoding('x-utf8-e4u-mixed'); 78my $check = Encode::FB_XMLCREF(); 79 80sub FB_EMOJI_TEXT { 81 my $fb = shift || $check; 82 sub { 83 my $code = shift; 84 my $chr = chr $code; 85 my $gcode; 86 if ($chr =~ /\p{InEmojiGoogle}/) { 87 # google emoji 88 $gcode = $code; 89 } elsif ($chr =~ /\p{InEmojiUnicode}/) { 90 # unicode emoji 91 my $moct = $utf8->encode(chr $code, $fb); # Mixed UTF-8 octets 92 my $gstr = $stand->decode($moct, $fb); # Standard UTF-8 string 93 $gcode = ord $gstr if (1 == length $gstr); 94 } elsif ($chr =~ /\p{InEmojiMixed}/) { 95 # others emoji 96 my $moct = $utf8->encode(chr $code, $fb); # Mixed UTF-8 octets 97 my $gstr = $mixed->decode($moct, $fb); # Google UTF-8 string 98 $gcode = ord $gstr if (1 == length $gstr); 99 } 100 my $hex = sprintf '%04X' => $gcode; 101 unless (exists $Encode::JP::Emoji::Mapping::CharnamesEmojiGoogle{$hex}) { 102 my $aoct = $ascii->encode(chr $code, $fb); # force fallback 103 return $utf8->decode($aoct, $fb); # UTF-8 string 104 } 105 my $name = $Encode::JP::Emoji::Mapping::CharnamesEmojiGoogle{$hex}; 106 sprintf $TEXT_FORMAT => $name; 107 }; 108} 109 110# This file was written in UTF-8 111 1121; 113