rack-ketai 0.2.3 → 0.2.4

Sign up to get free protection for your applications and to get access to all the features.
data/test/spec_runner.rb DELETED
@@ -1,30 +0,0 @@
1
- require 'test/unit'
2
-
3
- class SpecRunner < Test::Unit::TestCase
4
-
5
- def load_spec
6
- begin
7
- require 'spec'
8
- rescue LoadError
9
- if require "rubygems"
10
- gem 'rspec', '<2.0.0'
11
- retry
12
- end
13
- puts "All tests are skipped.(Please `gem install rspec`)"
14
- return
15
- end
16
- end
17
-
18
- def test_spec
19
- return unless load_spec
20
- require File.expand_path(File.join(File.dirname(__FILE__), '../spec/spec_helper.rb'))
21
-
22
- argv = Dir.glob(File.expand_path File.join(File.dirname(__FILE__), '../spec/**/*_spec.rb'))
23
- argv.unshift '-fs'
24
-
25
- unless Spec::Runner::CommandLine.run(Spec::Runner::OptionParser.parse(argv, STDOUT, STDERR))
26
- fail "failure(s)."
27
- end
28
- end
29
-
30
- end
@@ -1,430 +0,0 @@
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
- class Filter
392
- EMOJI_DATA = {
393
- FILE
394
-
395
- emoji.each do |id, data|
396
- emojiid = id.to_i(16)
397
- output['emojidata'] += format(" 0x%03X => #{data.inspect},\n", emojiid)
398
- end
399
-
400
- output['emojidata'] += <<-EOF
401
- }
402
-
403
- # 1.8系、1.9系 互換性維持のため
404
- if RUBY_VERSION >= '1.9.0'
405
- def EMOJI_DATA.index(val)
406
- key(val)
407
- end
408
- end
409
-
410
- end
411
- end
412
- end
413
-
414
- EOF
415
-
416
-
417
- #puts output['docomo_sjisstr_to_emojiid']
418
- #puts output['au_sjisstr_to_emojiid']
419
- #puts output['softbank_utf8str_to_emojiid']
420
-
421
- require 'fileutils'
422
- output.each do |fname, data|
423
- fname = fname.gsub(/\_/, '')
424
- dic_dir = File.join(SCRIPT_ROOT, '../lib/rack/ketai/carrier/emoji')
425
- FileUtils.mkdir(dic_dir) unless FileTest.directory?(dic_dir)
426
- File.open(File.join(dic_dir, "#{fname}.rb"), 'w') do |f|
427
- f.write data
428
- end
429
- end
430
-