Changeset 5444

Show
Ignore:
Timestamp:
01/25/08 00:19:56 (10 months ago)
Author:
tokuhirom
Message:

added $char->from_number method.

Location:
lang/perl/Encode-JP-Mobile/branches/character
Files:
2 modified

Legend:

Unmodified
Added
Removed
  • lang/perl/Encode-JP-Mobile/branches/character/lib/Encode/JP/Mobile/Character.pm

    r5442 r5444  
    1111    my ($class, $unicode) = @_; 
    1212    bless {unicode => $unicode}, $class; 
     13} 
     14 
     15sub from_number { 
     16    my $class = shift; 
     17    my %args = @_; 
     18    my $carrier = $args{carrier} or croak "missing carrier"; 
     19    my $number = $args{number} or croak "missing number"; 
     20 
     21    my $dat = $class->_load_map; 
     22 
     23    $carrier = +{I => 'docomo', E => 'kddi', V => 'softbank', 'H' => 'docomo'}->{$carrier}; 
     24    $number = encode_utf8($number); 
     25 
     26    my $key = $carrier eq 'kddi' ? 'unicode_auto' : 'unicode'; 
     27    for my $row (@{$dat->{$carrier}}) { 
     28        if ($row->{number} eq $number) { 
     29            return $class->from_unicode(hex $row->{$key}); 
     30        } 
     31    } 
     32    croak "unknown number: $number for $carrier"; 
    1333} 
    1434 
     
    131151unicode からインスタンスをつくります。 
    132152 
     153=item from_name 
     154 
     155    my $char = Encode::JP::Mobile::Character->from_name( 
     156        carrier => 'I', 
     157        number  => "拡76", 
     158    ); 
     159 
     160絵文字番号からインスタンスをつくります。 
     161 
    133162=item name 
    134163 
     
    157186絵文字番号を得ます。 
    158187 
    159 # docomo はどうするか問題 
     188DoCoMo の場合には「拡76」のような文字列が返ってくることに注意してください 
    160189 
    161190=item carrier 
     
    168197=back 
    169198 
    170 =head1 TODO 
    171  
    172 carrier method 
    173  
    174 performance tuning 
    175  
    176199=head1 AUTHOR 
    177200 
  • lang/perl/Encode-JP-Mobile/branches/character/t/character.t

    r5442 r5444  
    33use utf8; 
    44use Encode::JP::Mobile::Character; 
    5 use Test::More tests => 15; 
     5use Test::More tests => 18; 
    66 
    77# docomo 
     
    2222} 
    2323 
     24{ 
     25    is(Encode::JP::Mobile::Character->from_number(carrier => 'I', number => "拡76")->unicode_hex, 'E757'); 
     26} 
     27 
    2428# KDDI 
    2529{ 
     
    3034    is $char->name, "チュー2", "What's name for 0xECA2"; 
    3135    ok Encode::is_utf8($char->name); 
     36    is $char->number, 455, 'number'; 
     37} 
     38 
     39# KDDI from number. 
     40{ 
     41    is(Encode::JP::Mobile::Character->from_number(carrier => 'E', number => 455)->unicode_hex, 'ECA2'); 
    3242} 
    3343