rack-ketai 0.2.3 → 0.2.4

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/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
-