Changeset 2294 for lang/ruby/ssb

Show
Ignore:
Timestamp:
12/02/07 19:39:24 (13 months ago)
Author:
tokuhirom
Message:

lang/ruby/ssb: added utf8 binary pictogram support.

Location:
lang/ruby/ssb/trunk
Files:
1 added
3 modified

Legend:

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

    r2260 r2294  
    146146      end 
    147147 
    148       page = SSB::Application.filter_html(page, request_uri, term, ssb) 
     148      page = SSB::Application.filter_html(page, request_uri, term, ssb, response) 
    149149 
    150150      page = NKF::nkf('-w', page) 
     
    175175    end 
    176176 
    177     def self.filter_html(page, request_uri, term, ssb) 
     177    def self.filter_html(page, request_uri, term, ssb, response) 
    178178      # <?xml をけす。IEのバグ対応 
    179179      page.gsub!(/<\?([^\?]+)\?>/) { |s| 
     
    211211 
    212212      # 絵文字を <img> に変換 
    213       page = Emoji::emoji_conv(term, page) 
     213      is_utf8 = response.respond_to?(:header) && (response.header['Content-Type'] =~ /utf-?8/i) 
     214      page = Emoji::emoji_conv(term, page, is_utf8) 
    214215 
    215216      page 
  • lang/ruby/ssb/trunk/libs/ssb/emoji.rb

    r2289 r2294  
    2626    end 
    2727 
    28     def self.emoji_conv(term, str) 
     28    def self.docomo_uni2sjis(uni) 
     29      table = YAML.load_file(File.join(SSB::CONFIG[:dat_dir], 'docomo-table.yaml')) 
     30      table.each {|x| 
     31        if x['unicode'] == uni 
     32          return x['sjis'] 
     33        end 
     34      } 
     35      nil 
     36    end 
     37 
     38    def self.emoji_conv(term, str, is_utf8=false) 
    2939      ret = str 
    30       # SJIS HEX Binary 
     40 
     41      # SJIS Binary 
    3142      ret.gsub!(RE_IMODE_SJIS) do |s| 
    3243        orig_match = $1 
     
    3546        else 
    3647          orig_match 
     48        end 
     49      end 
     50 
     51      # UTF8 BINARY 
     52      if term.get_carrier == KtaiSpec::CARRIER_DOCOMO and is_utf8 
     53        ret.gsub!(/./) do |c| 
     54          sjis = SSB::Emoji.docomo_uni2sjis(sprintf "%X", c.unpack("U")[0]) 
     55          sjis ? sprintf('<img class="emoji" src="emoji/docomo/%s.gif" />', sjis) : c 
    3756        end 
    3857      end 
  • lang/ruby/ssb/trunk/test/emoji_test.rb

    r2289 r2294  
    1313 
    1414unit_tests do 
    15   def conv(carrier, str) 
    16     SSB::Emoji.emoji_conv(Term.new(carrier), str) 
     15  def conv(carrier, str, is_utf8=false) 
     16    SSB::Emoji.emoji_conv(Term.new(carrier), str, is_utf8) 
    1717  end 
    1818   
     
    2828  test 'docomo cref hex extension' do 
    2929    assert_equal(conv(SSB::KtaiSpec::CARRIER_DOCOMO, "&#xE70C;"), "<img class=\"emoji\" src=\"emoji/docomo/F9B1.gif\" />") 
     30  end 
     31 
     32  test 'docomo utf8 binary' do 
     33    assert_equal(conv(SSB::KtaiSpec::CARRIER_DOCOMO, "\xEE\x98\xBE", true), "<img class=\"emoji\" src=\"emoji/docomo/F89F.gif\" />") 
    3034  end 
    3135