Changeset 2277

Show
Ignore:
Timestamp:
12/02/07 10:49:23 (5 years ago)
Author:
tokuhirom
Message:

lang/ruby/ssb: don't depend to $KCODE.

Location:
lang/ruby/ssb/trunk
Files:
2 modified

Legend:

Unmodified
Added
Removed
  • lang/ruby/ssb/trunk/libs/ssb/emoji.rb

    r1996 r2277  
    66# $Id$ 
    77# 
    8 require 'jcode' 
    98 
    109module SSB 
    1110  module Emoji 
    12     PATTERN_EMOJI = '[\xF8-\xF9][\x00-\xFF]' 
    13     RE_EMOJI = Regexp.new(PATTERN_EMOJI, 0, 'n') 
     11    SJIS_ONE_BYTE  = '[\x00-\x7F\xA1-\xDF]' 
     12    SJIS_TWO_BYTES = '[\x81-\x9F\xE0-\xFC][\x40-\x7E\x80-\xFC]' 
     13    SJIS_IMODE_PICTOGRAM = '\xF8[\x9F-\xFC]|\xF9[\x40-\x7E\x80-\xB0]|\xF9[\xB1-\xFC]' 
     14    RE_IMODE_SJIS = Regexp.new("((#{SJIS_IMODE_PICTOGRAM})|(#{SJIS_ONE_BYTE}|#{SJIS_TWO_BYTES}))") 
    1415 
    1516    def self.emoji_conv(term, str) 
    16       ret = '' 
    17       # 16進数直接 
    18       str.each_char do |moji| 
    19         moji.gsub!(RE_EMOJI) do |s| 
    20           ch = 0 
    21           s.each_byte do |c| 
    22             if ch == 0 
    23               ch += c << 8 
    24             else 
    25               ch += c 
    26             end 
    27           end 
    28           '<img class="emoji" src="emoji/docomo/' + ch.to_s(16).upcase + '.gif" />' 
     17      ret = str 
     18      # SJIS HEX Binary 
     19      ret.gsub!(RE_IMODE_SJIS) do |s| 
     20        orig_match = $1 
     21        if not $2.nil? 
     22          sprintf '<img class="emoji" src="emoji/docomo/%X.gif" />', orig_match.unpack('n')[0] 
     23        else 
     24          orig_match 
    2925        end 
    30         ret.concat moji 
    3126      end 
    3227 
     
    5550      end 
    5651 
     52      # KDDI localsrc 
    5753      if term.get_carrier == KtaiSpec::CARRIER_KDDI 
    5854        ret.gsub!(/ (localsrc)=\"?([^>\" ]+)\"?/im) { |s| 
     
    6157      end 
    6258 
     59      # Thirdforce 
    6360      re_sb_emoji = Regexp.new('\x1B\$(..)\x0F', 0, 'n') 
    6461      if term.get_carrier == KtaiSpec::CARRIER_SOFTBANK 
  • lang/ruby/ssb/trunk/test/emoji_test.rb

    r2254 r2277  
    2323 
    2424  test 'docomo direct binary' do 
    25     $KCODE='sjis' 
    2625    assert_equal(conv(SSB::KtaiSpec::CARRIER_DOCOMO, "\xF9\x7B"), "<img class=\"emoji\" src=\"emoji/docomo/F97B.gif\" />") 
    27     $KCODE='utf-8' 
    2826  end 
    2927