rack-ketai 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +1 -0
 - data/MIT-LICENSE +21 -0
 - data/README.rdoc +122 -0
 - data/VERSION +1 -0
 - data/lib/rack/ketai/carrier/abstract.rb +263 -0
 - data/lib/rack/ketai/carrier/au.rb +153 -0
 - data/lib/rack/ketai/carrier/cidrs/au.rb +32 -0
 - data/lib/rack/ketai/carrier/cidrs/docomo.rb +14 -0
 - data/lib/rack/ketai/carrier/cidrs/softbank.rb +10 -0
 - data/lib/rack/ketai/carrier/docomo.rb +157 -0
 - data/lib/rack/ketai/carrier/emoji/ausjisstrtoemojiid.rb +1391 -0
 - data/lib/rack/ketai/carrier/emoji/docomosjisstrtoemojiid.rb +759 -0
 - data/lib/rack/ketai/carrier/emoji/emojidata.rb +836 -0
 - data/lib/rack/ketai/carrier/emoji/emojiidtotypecast.rb +432 -0
 - data/lib/rack/ketai/carrier/emoji/softbankutf8strtoemojiid.rb +1119 -0
 - data/lib/rack/ketai/carrier/emoji/softbankwebcodetoutf8str.rb +499 -0
 - data/lib/rack/ketai/carrier/general.rb +75 -0
 - data/lib/rack/ketai/carrier/iphone.rb +16 -0
 - data/lib/rack/ketai/carrier/softbank.rb +144 -0
 - data/lib/rack/ketai/carrier/specs/au.rb +1 -0
 - data/lib/rack/ketai/carrier/specs/docomo.rb +1 -0
 - data/lib/rack/ketai/carrier/specs/softbank.rb +1 -0
 - data/lib/rack/ketai/carrier.rb +18 -0
 - data/lib/rack/ketai/display.rb +16 -0
 - data/lib/rack/ketai/middleware.rb +36 -0
 - data/lib/rack/ketai.rb +12 -0
 - data/spec/spec_helper.rb +11 -0
 - data/spec/unit/au_filter_spec.rb +96 -0
 - data/spec/unit/au_spec.rb +240 -0
 - data/spec/unit/carrier_spec.rb +30 -0
 - data/spec/unit/display_spec.rb +25 -0
 - data/spec/unit/docomo_filter_spec.rb +106 -0
 - data/spec/unit/docomo_spec.rb +344 -0
 - data/spec/unit/emoticon_filter_spec.rb +91 -0
 - data/spec/unit/filter_spec.rb +38 -0
 - data/spec/unit/iphone_spec.rb +16 -0
 - data/spec/unit/middleware_spec.rb +38 -0
 - data/spec/unit/softbank_filter_spec.rb +133 -0
 - data/spec/unit/softbank_spec.rb +200 -0
 - data/spec/unit/valid_addr_spec.rb +86 -0
 - data/test/spec_runner.rb +29 -0
 - data/tools/generate_emoji_dic.rb +434 -0
 - data/tools/update_speclist.rb +87 -0
 - metadata +138 -0
 
| 
         @@ -0,0 +1,434 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            #!/usr/bin/env ruby
         
     | 
| 
      
 2 
     | 
    
         
            +
            # -*- coding: utf-8 -*-
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
            SCRIPT_ROOT = File.dirname(__FILE__)
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
            # データソース取得
         
     | 
| 
      
 7 
     | 
    
         
            +
            emoji4unicode_dir = File.join(SCRIPT_ROOT, 'tmp/emoji4unicode')
         
     | 
| 
      
 8 
     | 
    
         
            +
            typecast_dir = File.join(SCRIPT_ROOT, 'tmp/typecast')
         
     | 
| 
      
 9 
     | 
    
         
            +
            jpmobile_dir = File.join(SCRIPT_ROOT, 'tmp/jpmobile')
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
            `svn export http://emoji4unicode.googlecode.com/svn/trunk/data/ #{emoji4unicode_dir}` unless File.directory?(emoji4unicode_dir)
         
     | 
| 
      
 12 
     | 
    
         
            +
            `svn export http://typecastmobile.googlecode.com/svn/trunk/ #{typecast_dir}` unless File.directory?(typecast_dir)
         
     | 
| 
      
 13 
     | 
    
         
            +
            `git clone git://github.com/darashi/jpmobile.git #{jpmobile_dir}` unless File.directory?(jpmobile_dir)
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
            $LOAD_PATH.unshift File.join(jpmobile_dir, 'lib')
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
            require 'yaml'
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
            emoticons = YAML.load(File.read(File.join(typecast_dir, 'conf/emoticon.yaml')))
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
            # {"docomo" => {"XXXX" => "name"}}
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
            require 'rexml/document'
         
     | 
| 
      
 24 
     | 
    
         
            +
            emoji4unicode = File.read(File.join(emoji4unicode_dir, 'emoji4unicode.xml'))
         
     | 
| 
      
 25 
     | 
    
         
            +
            #docomo = File.read(File.join(emoji4unicode_dir, 'docomo/carrier_data.xml'))
         
     | 
| 
      
 26 
     | 
    
         
            +
            #kddi = File.read(File.join(emoji4unicode, 'kddi/carrier_data.xml'))
         
     | 
| 
      
 27 
     | 
    
         
            +
            #softbank = File.read(File.join(emoji4unicode, 'softbank/carrier_data.xml'))
         
     | 
| 
      
 28 
     | 
    
         
            +
             
     | 
| 
      
 29 
     | 
    
         
            +
            doc = REXML::Document.new(emoji4unicode)
         
     | 
| 
      
 30 
     | 
    
         
            +
             
     | 
| 
      
 31 
     | 
    
         
            +
            conv_table = {
         
     | 
| 
      
 32 
     | 
    
         
            +
              :docomo => { },
         
     | 
| 
      
 33 
     | 
    
         
            +
              :kddi => { },
         
     | 
| 
      
 34 
     | 
    
         
            +
              :softbank => { }
         
     | 
| 
      
 35 
     | 
    
         
            +
            }
         
     | 
| 
      
 36 
     | 
    
         
            +
             
     | 
| 
      
 37 
     | 
    
         
            +
            # UTF-8コードから各キャリアの文字コード
         
     | 
| 
      
 38 
     | 
    
         
            +
            carrier = {
         
     | 
| 
      
 39 
     | 
    
         
            +
              :docomo => { },
         
     | 
| 
      
 40 
     | 
    
         
            +
              :kddi => { },
         
     | 
| 
      
 41 
     | 
    
         
            +
              :softbank => { }
         
     | 
| 
      
 42 
     | 
    
         
            +
            }
         
     | 
| 
      
 43 
     | 
    
         
            +
             
     | 
| 
      
 44 
     | 
    
         
            +
            emoji = {}
         
     | 
| 
      
 45 
     | 
    
         
            +
             
     | 
| 
      
 46 
     | 
    
         
            +
            doc.each_element('//e') do |elem|
         
     | 
| 
      
 47 
     | 
    
         
            +
              id = elem.attributes['id']
         
     | 
| 
      
 48 
     | 
    
         
            +
              unicode = elem.attributes['unicode']
         
     | 
| 
      
 49 
     | 
    
         
            +
              docomo_code = elem.attributes['docomo']
         
     | 
| 
      
 50 
     | 
    
         
            +
              kddi_code = elem.attributes['kddi']
         
     | 
| 
      
 51 
     | 
    
         
            +
              softbank_code = elem.attributes['softbank']
         
     | 
| 
      
 52 
     | 
    
         
            +
              google_code = elem.attributes['google']
         
     | 
| 
      
 53 
     | 
    
         
            +
              name = elem.attributes['name']
         
     | 
| 
      
 54 
     | 
    
         
            +
              fallback = elem.attributes['text_fallback']
         
     | 
| 
      
 55 
     | 
    
         
            +
             
     | 
| 
      
 56 
     | 
    
         
            +
              emoji[id] = {
         
     | 
| 
      
 57 
     | 
    
         
            +
                :google_code => google_code,
         
     | 
| 
      
 58 
     | 
    
         
            +
                :name => name,
         
     | 
| 
      
 59 
     | 
    
         
            +
                :fallback => fallback,
         
     | 
| 
      
 60 
     | 
    
         
            +
                :unicode => unicode
         
     | 
| 
      
 61 
     | 
    
         
            +
              }
         
     | 
| 
      
 62 
     | 
    
         
            +
             
     | 
| 
      
 63 
     | 
    
         
            +
              if docomo_code
         
     | 
| 
      
 64 
     | 
    
         
            +
                codes = docomo_code.split(/\+/).collect{ |code| code =~ /([0-9A-F]+)/ ? $1 : nil }.compact
         
     | 
| 
      
 65 
     | 
    
         
            +
                conv_table[:docomo][id] = codes
         
     | 
| 
      
 66 
     | 
    
         
            +
              end
         
     | 
| 
      
 67 
     | 
    
         
            +
             
     | 
| 
      
 68 
     | 
    
         
            +
              if kddi_code
         
     | 
| 
      
 69 
     | 
    
         
            +
                codes = kddi_code.split(/\+/).collect{ |code| code =~ /([0-9A-F]+)/ ? $1 : nil }.compact
         
     | 
| 
      
 70 
     | 
    
         
            +
                conv_table[:kddi][id] = codes
         
     | 
| 
      
 71 
     | 
    
         
            +
              end
         
     | 
| 
      
 72 
     | 
    
         
            +
             
     | 
| 
      
 73 
     | 
    
         
            +
              if softbank_code
         
     | 
| 
      
 74 
     | 
    
         
            +
                codes = softbank_code.split(/\+/).collect{ |code| code =~ /([0-9A-F]+)/ ? $1 : nil }.compact
         
     | 
| 
      
 75 
     | 
    
         
            +
                conv_table[:softbank][id] = codes
         
     | 
| 
      
 76 
     | 
    
         
            +
              end
         
     | 
| 
      
 77 
     | 
    
         
            +
              
         
     | 
| 
      
 78 
     | 
    
         
            +
            end
         
     | 
| 
      
 79 
     | 
    
         
            +
             
     | 
| 
      
 80 
     | 
    
         
            +
            conv_table[:docomo].each do |k, v|
         
     | 
| 
      
 81 
     | 
    
         
            +
              next unless emoji[v]
         
     | 
| 
      
 82 
     | 
    
         
            +
              name = emoji[v][:fallback] || emoji[v][:name]
         
     | 
| 
      
 83 
     | 
    
         
            +
              google_code = emoji[v][:google_code]
         
     | 
| 
      
 84 
     | 
    
         
            +
            end
         
     | 
| 
      
 85 
     | 
    
         
            +
             
     | 
| 
      
 86 
     | 
    
         
            +
            # データを元に辞書作成
         
     | 
| 
      
 87 
     | 
    
         
            +
            module Jpmobile
         
     | 
| 
      
 88 
     | 
    
         
            +
              module Emoticon
         
     | 
| 
      
 89 
     | 
    
         
            +
              end
         
     | 
| 
      
 90 
     | 
    
         
            +
            end
         
     | 
| 
      
 91 
     | 
    
         
            +
            require 'jpmobile/emoticon/docomo'
         
     | 
| 
      
 92 
     | 
    
         
            +
            require 'jpmobile/emoticon/au'
         
     | 
| 
      
 93 
     | 
    
         
            +
            require 'jpmobile/emoticon/softbank'
         
     | 
| 
      
 94 
     | 
    
         
            +
            # EMOJI COMPATIBILITY SYMBOL
         
     | 
| 
      
 95 
     | 
    
         
            +
            DOCOMO_SJIS_TO_UNICODE = Jpmobile::Emoticon::DOCOMO_SJIS_TO_UNICODE.dup
         
     | 
| 
      
 96 
     | 
    
         
            +
            DOCOMO_SJIS_TO_UNICODE.merge!({
         
     | 
| 
      
 97 
     | 
    
         
            +
                                            0xE6A6 => 0xF94A, # ぴ
         
     | 
| 
      
 98 
     | 
    
         
            +
                                            0xE6A7 => 0xF94B, # あ
         
     | 
| 
      
 99 
     | 
    
         
            +
                                            0xE6A8 => 0xF94C, # チケぴ
         
     | 
| 
      
 100 
     | 
    
         
            +
                                            0xE6A9 => 0xF94D, # チケぴ
         
     | 
| 
      
 101 
     | 
    
         
            +
                                            0xE6AA => 0xF94E, # 先行tel
         
     | 
| 
      
 102 
     | 
    
         
            +
                                            0xE6AB => 0xF94F, # pコード
         
     | 
| 
      
 103 
     | 
    
         
            +
                                            0xE6AF => 0xF953, # 映画
         
     | 
| 
      
 104 
     | 
    
         
            +
                                            0xE6B0 => 0xF954, # ぴ
         
     | 
| 
      
 105 
     | 
    
         
            +
                                            0xE6B4 => 0xF958, # まるぴ
         
     | 
| 
      
 106 
     | 
    
         
            +
                                            0xE6B5 => 0xF959, # 四角ぴ
         
     | 
| 
      
 107 
     | 
    
         
            +
                                            0xE6B6 => 0xF95a, # チェック
         
     | 
| 
      
 108 
     | 
    
         
            +
                                            0xE6BB => 0xF95F, # f
         
     | 
| 
      
 109 
     | 
    
         
            +
                                            0xE6BC => 0xF960, # d
         
     | 
| 
      
 110 
     | 
    
         
            +
                                            0xE6BD => 0xF961, # s
         
     | 
| 
      
 111 
     | 
    
         
            +
                                            0xE6BE => 0xF962, # c
         
     | 
| 
      
 112 
     | 
    
         
            +
                                            0xE6BF => 0xF963, # r
         
     | 
| 
      
 113 
     | 
    
         
            +
                                            0xE6C0 => 0xF964, # 白黒四角
         
     | 
| 
      
 114 
     | 
    
         
            +
                                            0xE6C1 => 0xF965, # 黒四角
         
     | 
| 
      
 115 
     | 
    
         
            +
                                            0xE6C2 => 0xF966, # 逆三角
         
     | 
| 
      
 116 
     | 
    
         
            +
                                            0xE6C3 => 0xF967, # 4十字
         
     | 
| 
      
 117 
     | 
    
         
            +
                                            0xE6C4 => 0xF968, # 3十字
         
     | 
| 
      
 118 
     | 
    
         
            +
                                            0xE6C5 => 0xF969, # 2十字
         
     | 
| 
      
 119 
     | 
    
         
            +
                                            0xE6C6 => 0xF96A, # 1十字
         
     | 
| 
      
 120 
     | 
    
         
            +
                                            0xE6C7 => 0xF96B, # i
         
     | 
| 
      
 121 
     | 
    
         
            +
                                            0xE6C8 => 0xF96C, # m
         
     | 
| 
      
 122 
     | 
    
         
            +
                                            0xE6C9 => 0xF96D, # e
         
     | 
| 
      
 123 
     | 
    
         
            +
                                            0xE6CA => 0xF96E, # ve
         
     | 
| 
      
 124 
     | 
    
         
            +
                                            0xE6CB => 0xF96F, # 球
         
     | 
| 
      
 125 
     | 
    
         
            +
                                            0xE6CC => 0xF970, # カード使用不可
         
     | 
| 
      
 126 
     | 
    
         
            +
                                            0xE6CD => 0xF971  # チェックボックス
         
     | 
| 
      
 127 
     | 
    
         
            +
                                          }.invert)
         
     | 
| 
      
 128 
     | 
    
         
            +
            DOCOMO_UNICODE_TO_SJIS = DOCOMO_SJIS_TO_UNICODE.invert
         
     | 
| 
      
 129 
     | 
    
         
            +
             
     | 
| 
      
 130 
     | 
    
         
            +
            AU_SJIS_TO_UNICODE = Jpmobile::Emoticon::AU_SJIS_TO_UNICODE.dup
         
     | 
| 
      
 131 
     | 
    
         
            +
            AU_SJIS_TO_UNICODE.merge!(0xF48E => 0xEB89, # EZアプリJ
         
     | 
| 
      
 132 
     | 
    
         
            +
                                      0xF48F => 0xEB8A, # EXアプリB
         
     | 
| 
      
 133 
     | 
    
         
            +
                                      0xF490 => 0xEB8B, # EZ着うた
         
     | 
| 
      
 134 
     | 
    
         
            +
                                      0xF491 => 0xEB8C, # EZナビMS
         
     | 
| 
      
 135 
     | 
    
         
            +
                                      0xF492 => 0xEB8D, # WIN
         
     | 
| 
      
 136 
     | 
    
         
            +
                                      0xF493 => 0xEB8E  # プレミアム
         
     | 
| 
      
 137 
     | 
    
         
            +
                                      )
         
     | 
| 
      
 138 
     | 
    
         
            +
            AU_UNICODE_TO_SJIS = AU_SJIS_TO_UNICODE.invert
         
     | 
| 
      
 139 
     | 
    
         
            +
             
     | 
| 
      
 140 
     | 
    
         
            +
            SOFTBANK_UNICODE_TO_WEBCODE = Jpmobile::Emoticon::SOFTBANK_UNICODE_TO_WEBCODE.dup
         
     | 
| 
      
 141 
     | 
    
         
            +
            SOFTBANK_WEBCODE_TO_UNICODE = SOFTBANK_UNICODE_TO_WEBCODE.invert
         
     | 
| 
      
 142 
     | 
    
         
            +
             
     | 
| 
      
 143 
     | 
    
         
            +
            output = { }
         
     | 
| 
      
 144 
     | 
    
         
            +
             
     | 
| 
      
 145 
     | 
    
         
            +
            # ******************************
         
     | 
| 
      
 146 
     | 
    
         
            +
            # 各キャリア 絵文字コード -> eid
         
     | 
| 
      
 147 
     | 
    
         
            +
            # 絵文字の組み合わせも対応
         
     | 
| 
      
 148 
     | 
    
         
            +
            # ******************************
         
     | 
| 
      
 149 
     | 
    
         
            +
            # Docomo/au SJIS
         
     | 
| 
      
 150 
     | 
    
         
            +
            # Softbank UTF-8
         
     | 
| 
      
 151 
     | 
    
         
            +
            output['docomo_sjisstr_to_emojiid'] = (<<-FILE)
         
     | 
| 
      
 152 
     | 
    
         
            +
            # -*- coding: utf-8 -*-
         
     | 
| 
      
 153 
     | 
    
         
            +
             
     | 
| 
      
 154 
     | 
    
         
            +
            # DoCoMo-SJISバイナリとemoji4unicodeのIDとのマッピング
         
     | 
| 
      
 155 
     | 
    
         
            +
             
     | 
| 
      
 156 
     | 
    
         
            +
            # format("0x%03X", Rack::Ketai::Carrier::Docomo::Filter::EMOJI_TO_EMOJIID[[0xF995].pack('n*').force_encoding('SHIFT_JIS')])
         
     | 
| 
      
 157 
     | 
    
         
            +
            #   => "0x19B" (わーい(嬉しい顔) : SJIS-F995)
         
     | 
| 
      
 158 
     | 
    
         
            +
            # format("0x%03X", Rack::Ketai::Carrier::Docomo::Filter::EMOJI_TO_EMOJIID[[0xF8CA, 0xF994].pack('n*').force_encoding('SHIFT_JIS')])
         
     | 
| 
      
 159 
     | 
    
         
            +
            #   => "0x4B8" (ラブホテル = ホテル+ハートたち(複数ハート) : SJIS-F8CA+SJIS-F994)
         
     | 
| 
      
 160 
     | 
    
         
            +
             
     | 
| 
      
 161 
     | 
    
         
            +
            module Rack
         
     | 
| 
      
 162 
     | 
    
         
            +
              module Ketai
         
     | 
| 
      
 163 
     | 
    
         
            +
                module Carrier
         
     | 
| 
      
 164 
     | 
    
         
            +
                  class Docomo
         
     | 
| 
      
 165 
     | 
    
         
            +
                    class Filter
         
     | 
| 
      
 166 
     | 
    
         
            +
                      EMOJI_TO_EMOJIID = {
         
     | 
| 
      
 167 
     | 
    
         
            +
            FILE
         
     | 
| 
      
 168 
     | 
    
         
            +
             
     | 
| 
      
 169 
     | 
    
         
            +
            unknown = false
         
     | 
| 
      
 170 
     | 
    
         
            +
            emoji_table = { }
         
     | 
| 
      
 171 
     | 
    
         
            +
            emojiid_table = { }
         
     | 
| 
      
 172 
     | 
    
         
            +
            emoji.each do |id, data|
         
     | 
| 
      
 173 
     | 
    
         
            +
              next unless (codes = conv_table[:docomo][id]) && !codes.empty?
         
     | 
| 
      
 174 
     | 
    
         
            +
              docomo_unicodes = codes.collect{ |code| eval("0x#{code}") }
         
     | 
| 
      
 175 
     | 
    
         
            +
             
     | 
| 
      
 176 
     | 
    
         
            +
              docomo_sjiscodes = docomo_unicodes.collect do |docomo_unicode|
         
     | 
| 
      
 177 
     | 
    
         
            +
                docomo_sjiscode = DOCOMO_UNICODE_TO_SJIS[docomo_unicode]
         
     | 
| 
      
 178 
     | 
    
         
            +
                unless docomo_sjiscode
         
     | 
| 
      
 179 
     | 
    
         
            +
                  puts format("%04X", docomo_unicode)
         
     | 
| 
      
 180 
     | 
    
         
            +
                  unknown = true
         
     | 
| 
      
 181 
     | 
    
         
            +
                end
         
     | 
| 
      
 182 
     | 
    
         
            +
                docomo_sjiscode
         
     | 
| 
      
 183 
     | 
    
         
            +
              end
         
     | 
| 
      
 184 
     | 
    
         
            +
             
     | 
| 
      
 185 
     | 
    
         
            +
              if unknown
         
     | 
| 
      
 186 
     | 
    
         
            +
                puts docomo_unicodes.collect{ |docomo_unicode| format("0x%04X", docomo_unicode) }.join('+')
         
     | 
| 
      
 187 
     | 
    
         
            +
              else
         
     | 
| 
      
 188 
     | 
    
         
            +
                emojiid = id.to_i(16)
         
     | 
| 
      
 189 
     | 
    
         
            +
                emoji_table[docomo_sjiscodes] ||= emojiid
         
     | 
| 
      
 190 
     | 
    
         
            +
                emojiid_table[emojiid] = docomo_sjiscodes
         
     | 
| 
      
 191 
     | 
    
         
            +
              end
         
     | 
| 
      
 192 
     | 
    
         
            +
            end
         
     | 
| 
      
 193 
     | 
    
         
            +
            emoji_table.each do |codes, emojiid|
         
     | 
| 
      
 194 
     | 
    
         
            +
              output['docomo_sjisstr_to_emojiid'] += format(%Q{            ((sjisstr = #{ codes.inspect }.pack('n*')) && RUBY_VERSION >= '1.9.1' ? sjisstr.force_encoding('Shift_JIS') : sjisstr) => 0x%03X,\n}, emojiid)
         
     | 
| 
      
 195 
     | 
    
         
            +
            end
         
     | 
| 
      
 196 
     | 
    
         
            +
            output['docomo_sjisstr_to_emojiid'] += <<-EOF
         
     | 
| 
      
 197 
     | 
    
         
            +
                      }
         
     | 
| 
      
 198 
     | 
    
         
            +
             
     | 
| 
      
 199 
     | 
    
         
            +
                      # 単にEMOJI_TO_EMOJIID#index を使うと、
         
     | 
| 
      
 200 
     | 
    
         
            +
                      # 1つの絵文字が複数のIDに割り当てられている(DoCoMo SJIS-F97A など)場合
         
     | 
| 
      
 201 
     | 
    
         
            +
                      # 見つからなくなる
         
     | 
| 
      
 202 
     | 
    
         
            +
                      # 逆にEMOJIID_TO_EMOJIだけだと複数絵文字の組み合わせによるものがめんどくさい(たぶん)
         
     | 
| 
      
 203 
     | 
    
         
            +
                      EMOJIID_TO_EMOJI = {
         
     | 
| 
      
 204 
     | 
    
         
            +
            EOF
         
     | 
| 
      
 205 
     | 
    
         
            +
            emojiid_table.each do |emojiid, codes|
         
     | 
| 
      
 206 
     | 
    
         
            +
              output['docomo_sjisstr_to_emojiid'] += format(%Q{            0x%03X => ((sjisstr = #{ codes.inspect }.pack('n*')) && RUBY_VERSION >= '1.9.1' ? sjisstr.force_encoding('Shift_JIS') : sjisstr),\n}, emojiid)
         
     | 
| 
      
 207 
     | 
    
         
            +
            end
         
     | 
| 
      
 208 
     | 
    
         
            +
            output['docomo_sjisstr_to_emojiid'] += <<-EOF
         
     | 
| 
      
 209 
     | 
    
         
            +
                      }
         
     | 
| 
      
 210 
     | 
    
         
            +
             
     | 
| 
      
 211 
     | 
    
         
            +
                      # 1.8系、1.9系 互換性維持のため
         
     | 
| 
      
 212 
     | 
    
         
            +
                      if RUBY_VERSION >= '1.9.0'
         
     | 
| 
      
 213 
     | 
    
         
            +
                        def EMOJI_TO_EMOJIID.index(val)
         
     | 
| 
      
 214 
     | 
    
         
            +
                          key(val)
         
     | 
| 
      
 215 
     | 
    
         
            +
                        end
         
     | 
| 
      
 216 
     | 
    
         
            +
                      end
         
     | 
| 
      
 217 
     | 
    
         
            +
                    end
         
     | 
| 
      
 218 
     | 
    
         
            +
                  end
         
     | 
| 
      
 219 
     | 
    
         
            +
                end
         
     | 
| 
      
 220 
     | 
    
         
            +
              end
         
     | 
| 
      
 221 
     | 
    
         
            +
            end
         
     | 
| 
      
 222 
     | 
    
         
            +
             
     | 
| 
      
 223 
     | 
    
         
            +
            EOF
         
     | 
| 
      
 224 
     | 
    
         
            +
             
     | 
| 
      
 225 
     | 
    
         
            +
            if unknown
         
     | 
| 
      
 226 
     | 
    
         
            +
              puts "不明なコードがあります"
         
     | 
| 
      
 227 
     | 
    
         
            +
              exit 1
         
     | 
| 
      
 228 
     | 
    
         
            +
            end
         
     | 
| 
      
 229 
     | 
    
         
            +
             
     | 
| 
      
 230 
     | 
    
         
            +
            # au
         
     | 
| 
      
 231 
     | 
    
         
            +
            output['au_sjisstr_to_emojiid'] = (<<-FILE)
         
     | 
| 
      
 232 
     | 
    
         
            +
            # -*- coding: utf-8 -*-
         
     | 
| 
      
 233 
     | 
    
         
            +
             
     | 
| 
      
 234 
     | 
    
         
            +
            # Au-SJISバイナリとemoji4unicodeのIDとのマッピング
         
     | 
| 
      
 235 
     | 
    
         
            +
             
     | 
| 
      
 236 
     | 
    
         
            +
            # format("0x%03X", Rack::Ketai::Carrier::Au::Filter::EMOJI_TO_EMOJIID[[0xF6D5].pack('n*').force_encoding('SHIFT_JIS')])
         
     | 
| 
      
 237 
     | 
    
         
            +
            #   => "0x19B" (顔1: SJIS-F6D5)
         
     | 
| 
      
 238 
     | 
    
         
            +
             
     | 
| 
      
 239 
     | 
    
         
            +
            module Rack
         
     | 
| 
      
 240 
     | 
    
         
            +
              module Ketai
         
     | 
| 
      
 241 
     | 
    
         
            +
                module Carrier
         
     | 
| 
      
 242 
     | 
    
         
            +
                  class Au
         
     | 
| 
      
 243 
     | 
    
         
            +
                    class Filter
         
     | 
| 
      
 244 
     | 
    
         
            +
                      EMOJI_TO_EMOJIID = {
         
     | 
| 
      
 245 
     | 
    
         
            +
            FILE
         
     | 
| 
      
 246 
     | 
    
         
            +
             
     | 
| 
      
 247 
     | 
    
         
            +
            unknown = false
         
     | 
| 
      
 248 
     | 
    
         
            +
            emoji_table = { }
         
     | 
| 
      
 249 
     | 
    
         
            +
            emojiid_table = { }
         
     | 
| 
      
 250 
     | 
    
         
            +
            emoji.each do |id, data|
         
     | 
| 
      
 251 
     | 
    
         
            +
              next unless (codes = conv_table[:kddi][id]) && !codes.empty?
         
     | 
| 
      
 252 
     | 
    
         
            +
              au_unicodes = codes.collect{ |code| eval("0x#{code}") }
         
     | 
| 
      
 253 
     | 
    
         
            +
             
     | 
| 
      
 254 
     | 
    
         
            +
              au_sjiscodes = au_unicodes.collect do |au_unicode|
         
     | 
| 
      
 255 
     | 
    
         
            +
                au_sjiscode = AU_UNICODE_TO_SJIS[au_unicode]
         
     | 
| 
      
 256 
     | 
    
         
            +
                unless au_sjiscode
         
     | 
| 
      
 257 
     | 
    
         
            +
                  puts format("%04X", au_unicode)
         
     | 
| 
      
 258 
     | 
    
         
            +
                  unknown = true
         
     | 
| 
      
 259 
     | 
    
         
            +
                end
         
     | 
| 
      
 260 
     | 
    
         
            +
                au_sjiscode
         
     | 
| 
      
 261 
     | 
    
         
            +
              end
         
     | 
| 
      
 262 
     | 
    
         
            +
             
     | 
| 
      
 263 
     | 
    
         
            +
              if unknown
         
     | 
| 
      
 264 
     | 
    
         
            +
                puts au_unicodes.collect{ |au_unicode| format("0x%04X", au_unicode) }.join('+')
         
     | 
| 
      
 265 
     | 
    
         
            +
              else
         
     | 
| 
      
 266 
     | 
    
         
            +
                emojiid = id.to_i(16)
         
     | 
| 
      
 267 
     | 
    
         
            +
                emoji_table[au_sjiscodes] ||= emojiid
         
     | 
| 
      
 268 
     | 
    
         
            +
                emojiid_table[emojiid] = au_sjiscodes
         
     | 
| 
      
 269 
     | 
    
         
            +
              end
         
     | 
| 
      
 270 
     | 
    
         
            +
            end
         
     | 
| 
      
 271 
     | 
    
         
            +
            emoji_table.each do |codes, emojiid|
         
     | 
| 
      
 272 
     | 
    
         
            +
              output['au_sjisstr_to_emojiid'] += format(%Q{            ((sjisstr = #{ codes.inspect }.pack('n*')) && RUBY_VERSION >= '1.9.1' ? sjisstr.force_encoding('Shift_JIS') : sjisstr) => 0x%03X,\n}, emojiid)
         
     | 
| 
      
 273 
     | 
    
         
            +
            end
         
     | 
| 
      
 274 
     | 
    
         
            +
            output['au_sjisstr_to_emojiid'] += <<-EOF
         
     | 
| 
      
 275 
     | 
    
         
            +
                      }
         
     | 
| 
      
 276 
     | 
    
         
            +
             
     | 
| 
      
 277 
     | 
    
         
            +
                      # 単にEMOJI_TO_EMOJIID#index を使うと、
         
     | 
| 
      
 278 
     | 
    
         
            +
                      # 1つの絵文字が複数のIDに割り当てられている(DoCoMo SJIS-F97A など)場合
         
     | 
| 
      
 279 
     | 
    
         
            +
                      # 見つからなくなる
         
     | 
| 
      
 280 
     | 
    
         
            +
                      # 逆にEMOJIID_TO_EMOJIだけだと複数絵文字の組み合わせによるものがめんどくさい(たぶん)
         
     | 
| 
      
 281 
     | 
    
         
            +
                      EMOJIID_TO_EMOJI = {
         
     | 
| 
      
 282 
     | 
    
         
            +
            EOF
         
     | 
| 
      
 283 
     | 
    
         
            +
            emojiid_table.each do |emojiid, codes|
         
     | 
| 
      
 284 
     | 
    
         
            +
              output['au_sjisstr_to_emojiid'] += format(%Q{            0x%03X => ((sjisstr = #{ codes.inspect }.pack('n*')) && RUBY_VERSION >= '1.9.1' ? sjisstr.force_encoding('Shift_JIS') : sjisstr),\n}, emojiid)
         
     | 
| 
      
 285 
     | 
    
         
            +
            end
         
     | 
| 
      
 286 
     | 
    
         
            +
            output['au_sjisstr_to_emojiid'] += <<-EOF
         
     | 
| 
      
 287 
     | 
    
         
            +
                      }
         
     | 
| 
      
 288 
     | 
    
         
            +
             
     | 
| 
      
 289 
     | 
    
         
            +
                      # 1.8系、1.9系 互換性維持のため
         
     | 
| 
      
 290 
     | 
    
         
            +
                      if RUBY_VERSION >= '1.9.0'
         
     | 
| 
      
 291 
     | 
    
         
            +
                        def EMOJI_TO_EMOJIID.index(val)
         
     | 
| 
      
 292 
     | 
    
         
            +
                          key(val)
         
     | 
| 
      
 293 
     | 
    
         
            +
                        end
         
     | 
| 
      
 294 
     | 
    
         
            +
                      end
         
     | 
| 
      
 295 
     | 
    
         
            +
             
     | 
| 
      
 296 
     | 
    
         
            +
                    end
         
     | 
| 
      
 297 
     | 
    
         
            +
                  end
         
     | 
| 
      
 298 
     | 
    
         
            +
                end
         
     | 
| 
      
 299 
     | 
    
         
            +
              end
         
     | 
| 
      
 300 
     | 
    
         
            +
            end
         
     | 
| 
      
 301 
     | 
    
         
            +
             
     | 
| 
      
 302 
     | 
    
         
            +
            EOF
         
     | 
| 
      
 303 
     | 
    
         
            +
             
     | 
| 
      
 304 
     | 
    
         
            +
            if unknown
         
     | 
| 
      
 305 
     | 
    
         
            +
              puts "不明なコードがあります"
         
     | 
| 
      
 306 
     | 
    
         
            +
              exit 1
         
     | 
| 
      
 307 
     | 
    
         
            +
            end
         
     | 
| 
      
 308 
     | 
    
         
            +
             
     | 
| 
      
 309 
     | 
    
         
            +
             
     | 
| 
      
 310 
     | 
    
         
            +
            # softbank
         
     | 
| 
      
 311 
     | 
    
         
            +
            output['softbank_utf8str_to_emojiid'] = (<<-FILE)
         
     | 
| 
      
 312 
     | 
    
         
            +
            # -*- coding: utf-8 -*-
         
     | 
| 
      
 313 
     | 
    
         
            +
             
     | 
| 
      
 314 
     | 
    
         
            +
            # Softbank-UTF8バイナリとemoji4unicodeのIDとのマッピング
         
     | 
| 
      
 315 
     | 
    
         
            +
             
     | 
| 
      
 316 
     | 
    
         
            +
            # format("0x%03X", Rack::Ketai::Carrier::Softbank::Filter::EMOJI_TO_EMOJIID[[0xE001].pack('U*')])
         
     | 
| 
      
 317 
     | 
    
         
            +
            #   => "0x19B" (男の子: Unicode E001)
         
     | 
| 
      
 318 
     | 
    
         
            +
            # format("0x%03X", Rack::Ketai::Carrier::Softbank::Filter::EMOJI_TO_EMOJIID[[0xE04A, 0xE049].pack('U*')])
         
     | 
| 
      
 319 
     | 
    
         
            +
            #   => "0x00F" (晴れときどきくもり = 晴れ+くもり : U+E04A+U+E049)
         
     | 
| 
      
 320 
     | 
    
         
            +
             
     | 
| 
      
 321 
     | 
    
         
            +
            module Rack
         
     | 
| 
      
 322 
     | 
    
         
            +
              module Ketai
         
     | 
| 
      
 323 
     | 
    
         
            +
                module Carrier
         
     | 
| 
      
 324 
     | 
    
         
            +
                  class Softbank
         
     | 
| 
      
 325 
     | 
    
         
            +
                    class Filter
         
     | 
| 
      
 326 
     | 
    
         
            +
                      EMOJI_TO_EMOJIID = {
         
     | 
| 
      
 327 
     | 
    
         
            +
            FILE
         
     | 
| 
      
 328 
     | 
    
         
            +
             
     | 
| 
      
 329 
     | 
    
         
            +
            unknown = false
         
     | 
| 
      
 330 
     | 
    
         
            +
            emoji_table = { }
         
     | 
| 
      
 331 
     | 
    
         
            +
            emojiid_table = { }
         
     | 
| 
      
 332 
     | 
    
         
            +
            emoji.each do |id, data|
         
     | 
| 
      
 333 
     | 
    
         
            +
              next unless (codes = conv_table[:softbank][id]) && !codes.empty?
         
     | 
| 
      
 334 
     | 
    
         
            +
              softbank_unicodes = codes.collect{ |code| eval("0x#{code}") }
         
     | 
| 
      
 335 
     | 
    
         
            +
             
     | 
| 
      
 336 
     | 
    
         
            +
              emojiid = id.to_i(16)
         
     | 
| 
      
 337 
     | 
    
         
            +
              emoji_table[softbank_unicodes] ||= emojiid
         
     | 
| 
      
 338 
     | 
    
         
            +
              emojiid_table[emojiid] = softbank_unicodes
         
     | 
| 
      
 339 
     | 
    
         
            +
            end
         
     | 
| 
      
 340 
     | 
    
         
            +
            emoji_table.each do |codes, emojiid|
         
     | 
| 
      
 341 
     | 
    
         
            +
              output['softbank_utf8str_to_emojiid'] += format(%Q{            "%s" => 0x%03X,\n}, codes.pack('U*'), emojiid)
         
     | 
| 
      
 342 
     | 
    
         
            +
            end
         
     | 
| 
      
 343 
     | 
    
         
            +
            output['softbank_utf8str_to_emojiid'] += <<-EOF
         
     | 
| 
      
 344 
     | 
    
         
            +
                      }
         
     | 
| 
      
 345 
     | 
    
         
            +
             
     | 
| 
      
 346 
     | 
    
         
            +
                      # 単にEMOJI_TO_EMOJIID#index を使うと、
         
     | 
| 
      
 347 
     | 
    
         
            +
                      # 1つの絵文字が複数のIDに割り当てられている(DoCoMo SJIS-F97A など)場合
         
     | 
| 
      
 348 
     | 
    
         
            +
                      # 見つからなくなる
         
     | 
| 
      
 349 
     | 
    
         
            +
                      # 逆にEMOJIID_TO_EMOJIだけだと複数絵文字の組み合わせによるものがめんどくさい(たぶん)
         
     | 
| 
      
 350 
     | 
    
         
            +
                      EMOJIID_TO_EMOJI = {
         
     | 
| 
      
 351 
     | 
    
         
            +
            EOF
         
     | 
| 
      
 352 
     | 
    
         
            +
            emojiid_table.each do |emojiid, codes|
         
     | 
| 
      
 353 
     | 
    
         
            +
              output['softbank_utf8str_to_emojiid'] += format(%Q{            0x%03X => "%s",\n}, emojiid, codes.pack('U*'))
         
     | 
| 
      
 354 
     | 
    
         
            +
            end
         
     | 
| 
      
 355 
     | 
    
         
            +
            output['softbank_utf8str_to_emojiid'] += <<-EOF
         
     | 
| 
      
 356 
     | 
    
         
            +
                      }
         
     | 
| 
      
 357 
     | 
    
         
            +
             
     | 
| 
      
 358 
     | 
    
         
            +
                      # 1.8系、1.9系 互換性維持のため
         
     | 
| 
      
 359 
     | 
    
         
            +
                      if RUBY_VERSION >= '1.9.0'
         
     | 
| 
      
 360 
     | 
    
         
            +
                        def EMOJI_TO_EMOJIID.index(val)
         
     | 
| 
      
 361 
     | 
    
         
            +
                          key(val)
         
     | 
| 
      
 362 
     | 
    
         
            +
                        end
         
     | 
| 
      
 363 
     | 
    
         
            +
                      end
         
     | 
| 
      
 364 
     | 
    
         
            +
                      
         
     | 
| 
      
 365 
     | 
    
         
            +
                    end
         
     | 
| 
      
 366 
     | 
    
         
            +
                  end
         
     | 
| 
      
 367 
     | 
    
         
            +
                end
         
     | 
| 
      
 368 
     | 
    
         
            +
              end
         
     | 
| 
      
 369 
     | 
    
         
            +
            end
         
     | 
| 
      
 370 
     | 
    
         
            +
             
     | 
| 
      
 371 
     | 
    
         
            +
            EOF
         
     | 
| 
      
 372 
     | 
    
         
            +
             
     | 
| 
      
 373 
     | 
    
         
            +
            if unknown
         
     | 
| 
      
 374 
     | 
    
         
            +
              puts "不明なコードがあります"
         
     | 
| 
      
 375 
     | 
    
         
            +
              exit 1
         
     | 
| 
      
 376 
     | 
    
         
            +
            end
         
     | 
| 
      
 377 
     | 
    
         
            +
             
     | 
| 
      
 378 
     | 
    
         
            +
            # 絵文字の代替テキストマップ
         
     | 
| 
      
 379 
     | 
    
         
            +
            output['emojidata'] = (<<-FILE)
         
     | 
| 
      
 380 
     | 
    
         
            +
            # -*- coding: utf-8 -*-
         
     | 
| 
      
 381 
     | 
    
         
            +
             
     | 
| 
      
 382 
     | 
    
         
            +
            # Softbank-UTF8バイナリとemoji4unicodeのIDとのマッピング
         
     | 
| 
      
 383 
     | 
    
         
            +
             
     | 
| 
      
 384 
     | 
    
         
            +
            # format("0x%03X", Rack::Ketai::Carrier::Softbank::Filter::EMOJI_TO_EMOJIID[[0xE001].pack('U*')])
         
     | 
| 
      
 385 
     | 
    
         
            +
            #   => "0x19B" (男の子: Unicode E001)
         
     | 
| 
      
 386 
     | 
    
         
            +
            # format("0x%03X", Rack::Ketai::Carrier::Softbank::Filter::EMOJI_TO_EMOJIID[[0xE04A, 0xE049].pack('U*')])
         
     | 
| 
      
 387 
     | 
    
         
            +
            #   => "0x00F" (晴れときどきくもり = 晴れ+くもり : U+E04A+U+E049)
         
     | 
| 
      
 388 
     | 
    
         
            +
             
     | 
| 
      
 389 
     | 
    
         
            +
            module Rack
         
     | 
| 
      
 390 
     | 
    
         
            +
              module Ketai
         
     | 
| 
      
 391 
     | 
    
         
            +
                module Carrier
         
     | 
| 
      
 392 
     | 
    
         
            +
                  class Abstract
         
     | 
| 
      
 393 
     | 
    
         
            +
                    class Filter
         
     | 
| 
      
 394 
     | 
    
         
            +
                      EMOJI_DATA = {
         
     | 
| 
      
 395 
     | 
    
         
            +
            FILE
         
     | 
| 
      
 396 
     | 
    
         
            +
             
     | 
| 
      
 397 
     | 
    
         
            +
            emoji.each do |id, data|
         
     | 
| 
      
 398 
     | 
    
         
            +
              emojiid = id.to_i(16)
         
     | 
| 
      
 399 
     | 
    
         
            +
              output['emojidata'] += format("            0x%03X => #{data.inspect},\n", emojiid)
         
     | 
| 
      
 400 
     | 
    
         
            +
            end
         
     | 
| 
      
 401 
     | 
    
         
            +
             
     | 
| 
      
 402 
     | 
    
         
            +
            output['emojidata'] += <<-EOF
         
     | 
| 
      
 403 
     | 
    
         
            +
                      }
         
     | 
| 
      
 404 
     | 
    
         
            +
             
     | 
| 
      
 405 
     | 
    
         
            +
                      # 1.8系、1.9系 互換性維持のため
         
     | 
| 
      
 406 
     | 
    
         
            +
                      if RUBY_VERSION >= '1.9.0'
         
     | 
| 
      
 407 
     | 
    
         
            +
                        def EMOJI_TO_EMOJIID.index(val)
         
     | 
| 
      
 408 
     | 
    
         
            +
                          key(val)
         
     | 
| 
      
 409 
     | 
    
         
            +
                        end
         
     | 
| 
      
 410 
     | 
    
         
            +
                      end
         
     | 
| 
      
 411 
     | 
    
         
            +
                      
         
     | 
| 
      
 412 
     | 
    
         
            +
                    end
         
     | 
| 
      
 413 
     | 
    
         
            +
                  end
         
     | 
| 
      
 414 
     | 
    
         
            +
                end
         
     | 
| 
      
 415 
     | 
    
         
            +
              end
         
     | 
| 
      
 416 
     | 
    
         
            +
            end
         
     | 
| 
      
 417 
     | 
    
         
            +
             
     | 
| 
      
 418 
     | 
    
         
            +
            EOF
         
     | 
| 
      
 419 
     | 
    
         
            +
             
     | 
| 
      
 420 
     | 
    
         
            +
             
     | 
| 
      
 421 
     | 
    
         
            +
            #puts output['docomo_sjisstr_to_emojiid']
         
     | 
| 
      
 422 
     | 
    
         
            +
            #puts output['au_sjisstr_to_emojiid']
         
     | 
| 
      
 423 
     | 
    
         
            +
            #puts output['softbank_utf8str_to_emojiid']
         
     | 
| 
      
 424 
     | 
    
         
            +
             
     | 
| 
      
 425 
     | 
    
         
            +
            require 'fileutils'
         
     | 
| 
      
 426 
     | 
    
         
            +
            output.each do |fname, data|
         
     | 
| 
      
 427 
     | 
    
         
            +
              fname = fname.gsub(/\_/, '')
         
     | 
| 
      
 428 
     | 
    
         
            +
              dic_dir = File.join(SCRIPT_ROOT, '../lib/rack/ketai/carrier/emoji')
         
     | 
| 
      
 429 
     | 
    
         
            +
              FileUtils.mkdir(dic_dir) unless FileTest.directory?(dic_dir)
         
     | 
| 
      
 430 
     | 
    
         
            +
              File.open(File.join(dic_dir, "#{fname}.rb"), 'w') do |f|
         
     | 
| 
      
 431 
     | 
    
         
            +
                f.write data
         
     | 
| 
      
 432 
     | 
    
         
            +
              end
         
     | 
| 
      
 433 
     | 
    
         
            +
            end
         
     | 
| 
      
 434 
     | 
    
         
            +
             
     | 
| 
         @@ -0,0 +1,87 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            #!/usr/bin/env ruby
         
     | 
| 
      
 2 
     | 
    
         
            +
            # -*- coding: utf-8 -*-
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
            # ke-tai.org の携帯端末スペック一覧をダウンロードして加工
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
            require 'open-uri'
         
     | 
| 
      
 7 
     | 
    
         
            +
            require 'nkf'
         
     | 
| 
      
 8 
     | 
    
         
            +
            require 'csv'
         
     | 
| 
      
 9 
     | 
    
         
            +
            require 'tempfile'
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
            csvdata = NKF.nkf('-Sw', open('http://ke-tai.org/moblist/csv_down.php').read)
         
     | 
| 
      
 12 
     | 
    
         
            +
            lines = csvdata.gsub(/\r?\n/, "\n").split(/\n/).collect{ |str| str.gsub(/([^,])"([^,])/u, '\1"\2') }
         
     | 
| 
      
 13 
     | 
    
         
            +
            lines.slice!(0, 2)
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
            table = {}
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
            # CSV
         
     | 
| 
      
 18 
     | 
    
         
            +
            # [ 0] 連番
         
     | 
| 
      
 19 
     | 
    
         
            +
            # [ 1] メーカ名
         
     | 
| 
      
 20 
     | 
    
         
            +
            # [ 2] 機種名
         
     | 
| 
      
 21 
     | 
    
         
            +
            # [ 3] 機種略名
         
     | 
| 
      
 22 
     | 
    
         
            +
            # [ 4] ユーザエージェント
         
     | 
| 
      
 23 
     | 
    
         
            +
            # [ 5] タイプ1
         
     | 
| 
      
 24 
     | 
    
         
            +
            # [ 6] タイプ2
         
     | 
| 
      
 25 
     | 
    
         
            +
            # [ 7] ブラウザ幅(x)
         
     | 
| 
      
 26 
     | 
    
         
            +
            # [ 8] ブラウザ高さ(y)
         
     | 
| 
      
 27 
     | 
    
         
            +
            # [ 9] 表示カラー数
         
     | 
| 
      
 28 
     | 
    
         
            +
            # [10] ブラウザキャッシュ
         
     | 
| 
      
 29 
     | 
    
         
            +
            # [11] GIF
         
     | 
| 
      
 30 
     | 
    
         
            +
            # [12] JPG
         
     | 
| 
      
 31 
     | 
    
         
            +
            # [13] PNG
         
     | 
| 
      
 32 
     | 
    
         
            +
            # [14] Flash
         
     | 
| 
      
 33 
     | 
    
         
            +
            # [15] Flashバージョン
         
     | 
| 
      
 34 
     | 
    
         
            +
            # [16] Flashワークメモリ
         
     | 
| 
      
 35 
     | 
    
         
            +
            # [17] Javaアプリ
         
     | 
| 
      
 36 
     | 
    
         
            +
            # [18] BREW
         
     | 
| 
      
 37 
     | 
    
         
            +
            # [19] HTML
         
     | 
| 
      
 38 
     | 
    
         
            +
            # [20] SSL
         
     | 
| 
      
 39 
     | 
    
         
            +
            # [21] ログイン
         
     | 
| 
      
 40 
     | 
    
         
            +
            # [22] クッキー
         
     | 
| 
      
 41 
     | 
    
         
            +
            # [23] CSS
         
     | 
| 
      
 42 
     | 
    
         
            +
            # [24] GPS
         
     | 
| 
      
 43 
     | 
    
         
            +
            # [25] 発売日
         
     | 
| 
      
 44 
     | 
    
         
            +
             
     | 
| 
      
 45 
     | 
    
         
            +
            enable_row_indexes = [1,2,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25]
         
     | 
| 
      
 46 
     | 
    
         
            +
            # [ 0] メーカ名
         
     | 
| 
      
 47 
     | 
    
         
            +
            # [ 1] 機種名
         
     | 
| 
      
 48 
     | 
    
         
            +
            # [ 2] ユーザエージェント
         
     | 
| 
      
 49 
     | 
    
         
            +
            # [ 3] タイプ1
         
     | 
| 
      
 50 
     | 
    
         
            +
            # [ 4] タイプ2
         
     | 
| 
      
 51 
     | 
    
         
            +
            # [ 5] ブラウザ幅(x)
         
     | 
| 
      
 52 
     | 
    
         
            +
            # [ 6] ブラウザ高さ(y)
         
     | 
| 
      
 53 
     | 
    
         
            +
            # [ 7] 表示カラー数
         
     | 
| 
      
 54 
     | 
    
         
            +
            # [ 8] ブラウザキャッシュ
         
     | 
| 
      
 55 
     | 
    
         
            +
            # [ 9] GIF
         
     | 
| 
      
 56 
     | 
    
         
            +
            # [10] JPG
         
     | 
| 
      
 57 
     | 
    
         
            +
            # [11] PNG
         
     | 
| 
      
 58 
     | 
    
         
            +
            # [12] Flash
         
     | 
| 
      
 59 
     | 
    
         
            +
            # [13] Flashバージョン
         
     | 
| 
      
 60 
     | 
    
         
            +
            # [14] Flashワークメモリ
         
     | 
| 
      
 61 
     | 
    
         
            +
            # [15] Javaアプリ
         
     | 
| 
      
 62 
     | 
    
         
            +
            # [16] BREW
         
     | 
| 
      
 63 
     | 
    
         
            +
            # [17] HTML
         
     | 
| 
      
 64 
     | 
    
         
            +
            # [18] SSL
         
     | 
| 
      
 65 
     | 
    
         
            +
            # [19] ログイン
         
     | 
| 
      
 66 
     | 
    
         
            +
            # [20] クッキー
         
     | 
| 
      
 67 
     | 
    
         
            +
            # [21] CSS
         
     | 
| 
      
 68 
     | 
    
         
            +
            # [22] GPS
         
     | 
| 
      
 69 
     | 
    
         
            +
            # [23] 発売日
         
     | 
| 
      
 70 
     | 
    
         
            +
             
     | 
| 
      
 71 
     | 
    
         
            +
            CSV::Reader.parse(lines.join("\n")).each do |row|
         
     | 
| 
      
 72 
     | 
    
         
            +
              row.slice!(26)
         
     | 
| 
      
 73 
     | 
    
         
            +
              
         
     | 
| 
      
 74 
     | 
    
         
            +
             
     | 
| 
      
 75 
     | 
    
         
            +
              table[row[1]] ||= { }
         
     | 
| 
      
 76 
     | 
    
         
            +
              table[row[1]][row[3]] ||= row.values_at(*enable_row_indexes)
         
     | 
| 
      
 77 
     | 
    
         
            +
            end
         
     | 
| 
      
 78 
     | 
    
         
            +
             
     | 
| 
      
 79 
     | 
    
         
            +
            [
         
     | 
| 
      
 80 
     | 
    
         
            +
             %w(DoCoMo Docomo docomo.rb),
         
     | 
| 
      
 81 
     | 
    
         
            +
             %w(au Au au.rb),
         
     | 
| 
      
 82 
     | 
    
         
            +
             %w(SoftBank Softbank softbank.rb)
         
     | 
| 
      
 83 
     | 
    
         
            +
            ].each do |carrier, classname, filename|
         
     | 
| 
      
 84 
     | 
    
         
            +
              File.open(File.join(File.dirname(__FILE__), '../lib/rack/ketai/carrier/specs', filename), 'w') do |f|
         
     | 
| 
      
 85 
     | 
    
         
            +
                f.write "Rack::Ketai::Carrier::#{classname}::SPECS = #{ table[carrier].inspect }"
         
     | 
| 
      
 86 
     | 
    
         
            +
              end
         
     | 
| 
      
 87 
     | 
    
         
            +
            end
         
     | 
    
        metadata
    ADDED
    
    | 
         @@ -0,0 +1,138 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            --- !ruby/object:Gem::Specification 
         
     | 
| 
      
 2 
     | 
    
         
            +
            name: rack-ketai
         
     | 
| 
      
 3 
     | 
    
         
            +
            version: !ruby/object:Gem::Version 
         
     | 
| 
      
 4 
     | 
    
         
            +
              hash: 27
         
     | 
| 
      
 5 
     | 
    
         
            +
              prerelease: false
         
     | 
| 
      
 6 
     | 
    
         
            +
              segments: 
         
     | 
| 
      
 7 
     | 
    
         
            +
              - 0
         
     | 
| 
      
 8 
     | 
    
         
            +
              - 1
         
     | 
| 
      
 9 
     | 
    
         
            +
              - 0
         
     | 
| 
      
 10 
     | 
    
         
            +
              version: 0.1.0
         
     | 
| 
      
 11 
     | 
    
         
            +
            platform: ruby
         
     | 
| 
      
 12 
     | 
    
         
            +
            authors: 
         
     | 
| 
      
 13 
     | 
    
         
            +
            - Yuichi Takeuchi
         
     | 
| 
      
 14 
     | 
    
         
            +
            autorequire: 
         
     | 
| 
      
 15 
     | 
    
         
            +
            bindir: bin
         
     | 
| 
      
 16 
     | 
    
         
            +
            cert_chain: []
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
            date: 2010-07-22 00:00:00 +09:00
         
     | 
| 
      
 19 
     | 
    
         
            +
            default_executable: 
         
     | 
| 
      
 20 
     | 
    
         
            +
            dependencies: 
         
     | 
| 
      
 21 
     | 
    
         
            +
            - !ruby/object:Gem::Dependency 
         
     | 
| 
      
 22 
     | 
    
         
            +
              name: rack
         
     | 
| 
      
 23 
     | 
    
         
            +
              prerelease: false
         
     | 
| 
      
 24 
     | 
    
         
            +
              requirement: &id001 !ruby/object:Gem::Requirement 
         
     | 
| 
      
 25 
     | 
    
         
            +
                none: false
         
     | 
| 
      
 26 
     | 
    
         
            +
                requirements: 
         
     | 
| 
      
 27 
     | 
    
         
            +
                - - ">="
         
     | 
| 
      
 28 
     | 
    
         
            +
                  - !ruby/object:Gem::Version 
         
     | 
| 
      
 29 
     | 
    
         
            +
                    hash: 23
         
     | 
| 
      
 30 
     | 
    
         
            +
                    segments: 
         
     | 
| 
      
 31 
     | 
    
         
            +
                    - 1
         
     | 
| 
      
 32 
     | 
    
         
            +
                    - 0
         
     | 
| 
      
 33 
     | 
    
         
            +
                    - 0
         
     | 
| 
      
 34 
     | 
    
         
            +
                    version: 1.0.0
         
     | 
| 
      
 35 
     | 
    
         
            +
              type: :runtime
         
     | 
| 
      
 36 
     | 
    
         
            +
              version_requirements: *id001
         
     | 
| 
      
 37 
     | 
    
         
            +
            description: 
         
     | 
| 
      
 38 
     | 
    
         
            +
            email: info@takeyu-web.com
         
     | 
| 
      
 39 
     | 
    
         
            +
            executables: []
         
     | 
| 
      
 40 
     | 
    
         
            +
             
     | 
| 
      
 41 
     | 
    
         
            +
            extensions: []
         
     | 
| 
      
 42 
     | 
    
         
            +
             
     | 
| 
      
 43 
     | 
    
         
            +
            extra_rdoc_files: 
         
     | 
| 
      
 44 
     | 
    
         
            +
            - README.rdoc
         
     | 
| 
      
 45 
     | 
    
         
            +
            files: 
         
     | 
| 
      
 46 
     | 
    
         
            +
            - .gitignore
         
     | 
| 
      
 47 
     | 
    
         
            +
            - MIT-LICENSE
         
     | 
| 
      
 48 
     | 
    
         
            +
            - README.rdoc
         
     | 
| 
      
 49 
     | 
    
         
            +
            - VERSION
         
     | 
| 
      
 50 
     | 
    
         
            +
            - lib/rack/ketai.rb
         
     | 
| 
      
 51 
     | 
    
         
            +
            - lib/rack/ketai/carrier.rb
         
     | 
| 
      
 52 
     | 
    
         
            +
            - lib/rack/ketai/carrier/abstract.rb
         
     | 
| 
      
 53 
     | 
    
         
            +
            - lib/rack/ketai/carrier/au.rb
         
     | 
| 
      
 54 
     | 
    
         
            +
            - lib/rack/ketai/carrier/cidrs/au.rb
         
     | 
| 
      
 55 
     | 
    
         
            +
            - lib/rack/ketai/carrier/cidrs/docomo.rb
         
     | 
| 
      
 56 
     | 
    
         
            +
            - lib/rack/ketai/carrier/cidrs/softbank.rb
         
     | 
| 
      
 57 
     | 
    
         
            +
            - lib/rack/ketai/carrier/docomo.rb
         
     | 
| 
      
 58 
     | 
    
         
            +
            - lib/rack/ketai/carrier/emoji/ausjisstrtoemojiid.rb
         
     | 
| 
      
 59 
     | 
    
         
            +
            - lib/rack/ketai/carrier/emoji/docomosjisstrtoemojiid.rb
         
     | 
| 
      
 60 
     | 
    
         
            +
            - lib/rack/ketai/carrier/emoji/emojidata.rb
         
     | 
| 
      
 61 
     | 
    
         
            +
            - lib/rack/ketai/carrier/emoji/emojiidtotypecast.rb
         
     | 
| 
      
 62 
     | 
    
         
            +
            - lib/rack/ketai/carrier/emoji/softbankutf8strtoemojiid.rb
         
     | 
| 
      
 63 
     | 
    
         
            +
            - lib/rack/ketai/carrier/emoji/softbankwebcodetoutf8str.rb
         
     | 
| 
      
 64 
     | 
    
         
            +
            - lib/rack/ketai/carrier/general.rb
         
     | 
| 
      
 65 
     | 
    
         
            +
            - lib/rack/ketai/carrier/iphone.rb
         
     | 
| 
      
 66 
     | 
    
         
            +
            - lib/rack/ketai/carrier/softbank.rb
         
     | 
| 
      
 67 
     | 
    
         
            +
            - lib/rack/ketai/carrier/specs/au.rb
         
     | 
| 
      
 68 
     | 
    
         
            +
            - lib/rack/ketai/carrier/specs/docomo.rb
         
     | 
| 
      
 69 
     | 
    
         
            +
            - lib/rack/ketai/carrier/specs/softbank.rb
         
     | 
| 
      
 70 
     | 
    
         
            +
            - lib/rack/ketai/display.rb
         
     | 
| 
      
 71 
     | 
    
         
            +
            - lib/rack/ketai/middleware.rb
         
     | 
| 
      
 72 
     | 
    
         
            +
            - spec/spec_helper.rb
         
     | 
| 
      
 73 
     | 
    
         
            +
            - spec/unit/au_filter_spec.rb
         
     | 
| 
      
 74 
     | 
    
         
            +
            - spec/unit/au_spec.rb
         
     | 
| 
      
 75 
     | 
    
         
            +
            - spec/unit/carrier_spec.rb
         
     | 
| 
      
 76 
     | 
    
         
            +
            - spec/unit/display_spec.rb
         
     | 
| 
      
 77 
     | 
    
         
            +
            - spec/unit/docomo_filter_spec.rb
         
     | 
| 
      
 78 
     | 
    
         
            +
            - spec/unit/docomo_spec.rb
         
     | 
| 
      
 79 
     | 
    
         
            +
            - spec/unit/emoticon_filter_spec.rb
         
     | 
| 
      
 80 
     | 
    
         
            +
            - spec/unit/filter_spec.rb
         
     | 
| 
      
 81 
     | 
    
         
            +
            - spec/unit/iphone_spec.rb
         
     | 
| 
      
 82 
     | 
    
         
            +
            - spec/unit/middleware_spec.rb
         
     | 
| 
      
 83 
     | 
    
         
            +
            - spec/unit/softbank_filter_spec.rb
         
     | 
| 
      
 84 
     | 
    
         
            +
            - spec/unit/softbank_spec.rb
         
     | 
| 
      
 85 
     | 
    
         
            +
            - spec/unit/valid_addr_spec.rb
         
     | 
| 
      
 86 
     | 
    
         
            +
            - test/spec_runner.rb
         
     | 
| 
      
 87 
     | 
    
         
            +
            - tools/generate_emoji_dic.rb
         
     | 
| 
      
 88 
     | 
    
         
            +
            - tools/update_speclist.rb
         
     | 
| 
      
 89 
     | 
    
         
            +
            has_rdoc: true
         
     | 
| 
      
 90 
     | 
    
         
            +
            homepage: http://github.com/take-yu/rack-ketai
         
     | 
| 
      
 91 
     | 
    
         
            +
            licenses: []
         
     | 
| 
      
 92 
     | 
    
         
            +
             
     | 
| 
      
 93 
     | 
    
         
            +
            post_install_message: 
         
     | 
| 
      
 94 
     | 
    
         
            +
            rdoc_options: 
         
     | 
| 
      
 95 
     | 
    
         
            +
            - --charset=UTF-8
         
     | 
| 
      
 96 
     | 
    
         
            +
            require_paths: 
         
     | 
| 
      
 97 
     | 
    
         
            +
            - lib
         
     | 
| 
      
 98 
     | 
    
         
            +
            required_ruby_version: !ruby/object:Gem::Requirement 
         
     | 
| 
      
 99 
     | 
    
         
            +
              none: false
         
     | 
| 
      
 100 
     | 
    
         
            +
              requirements: 
         
     | 
| 
      
 101 
     | 
    
         
            +
              - - ">="
         
     | 
| 
      
 102 
     | 
    
         
            +
                - !ruby/object:Gem::Version 
         
     | 
| 
      
 103 
     | 
    
         
            +
                  hash: 3
         
     | 
| 
      
 104 
     | 
    
         
            +
                  segments: 
         
     | 
| 
      
 105 
     | 
    
         
            +
                  - 0
         
     | 
| 
      
 106 
     | 
    
         
            +
                  version: "0"
         
     | 
| 
      
 107 
     | 
    
         
            +
            required_rubygems_version: !ruby/object:Gem::Requirement 
         
     | 
| 
      
 108 
     | 
    
         
            +
              none: false
         
     | 
| 
      
 109 
     | 
    
         
            +
              requirements: 
         
     | 
| 
      
 110 
     | 
    
         
            +
              - - ">="
         
     | 
| 
      
 111 
     | 
    
         
            +
                - !ruby/object:Gem::Version 
         
     | 
| 
      
 112 
     | 
    
         
            +
                  hash: 3
         
     | 
| 
      
 113 
     | 
    
         
            +
                  segments: 
         
     | 
| 
      
 114 
     | 
    
         
            +
                  - 0
         
     | 
| 
      
 115 
     | 
    
         
            +
                  version: "0"
         
     | 
| 
      
 116 
     | 
    
         
            +
            requirements: []
         
     | 
| 
      
 117 
     | 
    
         
            +
             
     | 
| 
      
 118 
     | 
    
         
            +
            rubyforge_project: 
         
     | 
| 
      
 119 
     | 
    
         
            +
            rubygems_version: 1.3.7
         
     | 
| 
      
 120 
     | 
    
         
            +
            signing_key: 
         
     | 
| 
      
 121 
     | 
    
         
            +
            specification_version: 3
         
     | 
| 
      
 122 
     | 
    
         
            +
            summary: A Rack Middleware for Japanese mobile-phones
         
     | 
| 
      
 123 
     | 
    
         
            +
            test_files: 
         
     | 
| 
      
 124 
     | 
    
         
            +
            - spec/unit/au_spec.rb
         
     | 
| 
      
 125 
     | 
    
         
            +
            - spec/unit/middleware_spec.rb
         
     | 
| 
      
 126 
     | 
    
         
            +
            - spec/unit/filter_spec.rb
         
     | 
| 
      
 127 
     | 
    
         
            +
            - spec/unit/au_filter_spec.rb
         
     | 
| 
      
 128 
     | 
    
         
            +
            - spec/unit/softbank_filter_spec.rb
         
     | 
| 
      
 129 
     | 
    
         
            +
            - spec/unit/valid_addr_spec.rb
         
     | 
| 
      
 130 
     | 
    
         
            +
            - spec/unit/docomo_spec.rb
         
     | 
| 
      
 131 
     | 
    
         
            +
            - spec/unit/display_spec.rb
         
     | 
| 
      
 132 
     | 
    
         
            +
            - spec/unit/docomo_filter_spec.rb
         
     | 
| 
      
 133 
     | 
    
         
            +
            - spec/unit/iphone_spec.rb
         
     | 
| 
      
 134 
     | 
    
         
            +
            - spec/unit/softbank_spec.rb
         
     | 
| 
      
 135 
     | 
    
         
            +
            - spec/unit/carrier_spec.rb
         
     | 
| 
      
 136 
     | 
    
         
            +
            - spec/unit/emoticon_filter_spec.rb
         
     | 
| 
      
 137 
     | 
    
         
            +
            - spec/spec_helper.rb
         
     | 
| 
      
 138 
     | 
    
         
            +
            - test/spec_runner.rb
         
     |