- 2007/6/10 日曜日 20:05:46
- perl
今日書いたばかりの
Encode::JP::Mobileにvodafoneの絵文字相互変換させるパッチ達
に早速不具合発見。
aliasの張り方を間違って(define_aliasが反対だった)shift_jis-softbank-privateが使えてなかったです。
そのパッチがこれ。
diff -ruN Encode-JP-Mobile-0.05.org/lib/Encode/JP/Mobile.pm Encode-JP-Mobile-0.05/lib/Encode/JP/Mobile.pm --- Encode-JP-Mobile-0.05.org/lib/Encode/JP/Mobile.pm 2007-06-10 19:53:57.000000000 +0900 +++ Encode-JP-Mobile-0.05/lib/Encode/JP/Mobile.pm 2007-06-10 19:49:52.000000000 +0900 @@ -9,7 +9,7 @@ define_alias('shift_jis-docomo' => 'shift_jis-imode'); define_alias('shift_jis-ezweb' => 'shift_jis-kddi'); define_alias('shift_jis-airh' => 'shift_jis-airedge'); -define_alias('shift_jis-vodafone-private' => 'shift_jis-softbank-private'); +define_alias('shift_jis-softbank-private' => 'shift_jis-vodafone-private'); use Encode::JP::Mobile::Vodafone;
で、もひとつ。これは自分の修正とは関係ない部分なんですが、Encode::JP::Mobile::Vodafone::_encode_vodafoneのビット演算に
誤りがあって、$highが必ず0xE000になってページ1の絵文字に集約されてしまうというバグが。
というわけで下記が修正パッチです。
diff -ruN Encode-JP-Mobile-0.05.org/lib/Encode/JP/Mobile/Vodafone.pm Encode-JP-Mobile-0.05/lib/Encode/JP/Mobile/Vodafone.pm --- Encode-JP-Mobile-0.05.org/lib/Encode/JP/Mobile/Vodafone.pm 2007-06-10 19:53:57.000000000 +0900 +++ Encode-JP-Mobile-0.05/lib/Encode/JP/Mobile/Vodafone.pm 2007-06-10 19:45:35.000000000 +0900 @@ -47,7 +47,7 @@ my $res = "x1bx24"; my $buf = ''; for my $str (@str) { - my $high = ord($str) & 0xF000; + my $high = ord($str) & 0xEF00; my $low = ord($str) & 0x00FF; if ($buf ne $high) { $res .= $HighBitToChar{$high};
で、それぞれの修正に対応したテストも書いたので(まとまっちゃってますが)それもおいておきます。
diff -ruN Encode-JP-Mobile-0.05.org/t/Mobile.t Encode-JP-Mobile-0.05/t/Mobile.t --- Encode-JP-Mobile-0.05.org/t/Mobile.t 2007-05-16 18:46:16.000000000 +0900 +++ Encode-JP-Mobile-0.05/t/Mobile.t 2007-06-10 19:41:34.000000000 +0900 @@ -1,5 +1,5 @@ use strict; -use Test::More tests => 18; +use Test::More tests => 42; use_ok('Encode'); use_ok('Encode::JP::Mobile'); @@ -13,6 +13,20 @@ test_rt("shift_jis-vodafone", "x82xb1x1bx24x47x21x22x0f", "x{3053}x{e001}x{e002}"); test_rt("shift_jis-softbank", "x82xb1x1bx24x47x21x22x0f", "x{3053}x{e001}x{e002}"); +test_rt("shift_jis-vodafone", "x82xb1x1bx24x45x21x22x0f", "x{3053}x{e101}x{e102}"); +test_rt("shift_jis-softbank", "x82xb1x1bx24x45x21x22x0f", "x{3053}x{e101}x{e102}"); +test_rt("shift_jis-vodafone", "x82xb1x1bx24x46x21x22x0f", "x{3053}x{e201}x{e202}"); +test_rt("shift_jis-softbank", "x82xb1x1bx24x46x21x22x0f", "x{3053}x{e201}x{e202}"); +test_rt("shift_jis-vodafone", "x82xb1x1bx24x4fx21x22x0f", "x{3053}x{e301}x{e302}"); +test_rt("shift_jis-softbank", "x82xb1x1bx24x4fx21x22x0f", "x{3053}x{e301}x{e302}"); +test_rt("shift_jis-vodafone", "x82xb1x1bx24x50x21x22x0f", "x{3053}x{e401}x{e402}"); +test_rt("shift_jis-softbank", "x82xb1x1bx24x50x21x22x0f", "x{3053}x{e401}x{e402}"); +test_rt("shift_jis-vodafone", "x82xb1x1bx24x51x21x22x0f", "x{3053}x{e501}x{e502}"); +test_rt("shift_jis-softbank", "x82xb1x1bx24x51x21x22x0f", "x{3053}x{e501}x{e502}"); + +test_rt("shift_jis-vodafone-private", "x82xb1xf9x41xf9x42", "x{3053}x{e001}x{e002}"); +test_rt("shift_jis-softbank-private", "x82xb1xf9x41xf9x42", "x{3053}x{e001}x{e002}"); + sub test_rt { my ( $enc, $byte, $uni ) = @_; is esc( decode( $enc, $byte ) ), esc($uni), "decode $enc";
一応これはmiyagawaさんにメールしておこうかな。
というかバグ報告なんてわざわざ自分のblogに載せるもんじゃない気がしてきたorz
まぁ今回はvodafone-private追加からの流れなのでいっか…。
CPANのこことかは使われてるもんなのかなぁ。
コメント:0
トラックバック:0
- この記事のトラックバック URL
- https://blog.everqueue.com/chiba/2007/06/10/11/trackback/
- トラックバックの送信元リスト
- Encode::JP::Mobile::Vodafone関連の不具合の修正パッチ - へぼい日記 より