jpmobile 0.1.6 → 1.0.0.pre

Sign up to get free protection for your applications and to get access to all the features.
Files changed (73) hide show
  1. data/README +0 -0
  2. data/README.rdoc +58 -29
  3. data/Rakefile +1 -1
  4. data/VERSION.yml +4 -4
  5. data/lib/jpmobile.rb +3 -0
  6. data/lib/jpmobile/email.rb +17 -2
  7. data/lib/jpmobile/emoticon.rb +87 -23
  8. data/lib/jpmobile/emoticon/au.rb +644 -0
  9. data/lib/jpmobile/emoticon/softbank.rb +488 -0
  10. data/lib/jpmobile/emoticon/z_combine.rb +16 -13
  11. data/lib/jpmobile/hook_action_controller.rb +1 -13
  12. data/lib/jpmobile/hook_action_view.rb +3 -62
  13. data/lib/jpmobile/mail.rb +316 -0
  14. data/lib/jpmobile/mailer.rb +31 -0
  15. data/lib/jpmobile/mobile/abstract_mobile.rb +66 -0
  16. data/lib/jpmobile/mobile/au.rb +25 -2
  17. data/lib/jpmobile/mobile/docomo.rb +23 -1
  18. data/lib/jpmobile/mobile/emobile.rb +1 -1
  19. data/lib/jpmobile/mobile/softbank.rb +33 -1
  20. data/lib/jpmobile/mobile/vodafone.rb +1 -1
  21. data/lib/jpmobile/mobile/willcom.rb +1 -1
  22. data/lib/jpmobile/path_set.rb +40 -0
  23. data/lib/jpmobile/rails.rb +24 -0
  24. data/lib/jpmobile/resolver.rb +38 -0
  25. data/lib/jpmobile/util.rb +223 -14
  26. data/lib/tasks/jpmobile_tasks.rake +41 -48
  27. data/spec/rack/jpmobile/emoticon_spec.rb +3 -8
  28. data/spec/rack/jpmobile/filter_spec.rb +1 -1
  29. data/spec/rack/jpmobile/params_filter_spec.rb +4 -4
  30. data/spec/rack_helper.rb +5 -9
  31. data/spec/unit/detect_by_email_spec.rb +29 -0
  32. data/spec/unit/emoticon_spec.rb +90 -0
  33. data/spec/unit/encoding_spec.rb +102 -0
  34. data/spec/unit/mail_spec.rb +117 -0
  35. data/spec/unit/receive_mail_spec.rb +289 -0
  36. data/spec/unit/spec_helper.rb +8 -0
  37. data/spec/unit/util_spec.rb +5 -0
  38. data/test/rails/overrides/app/controllers/application_controller.rb +3 -2
  39. data/test/rails/overrides/app/controllers/template_path_controller.rb +8 -0
  40. data/test/rails/overrides/app/models/mobile_mailer.rb +19 -0
  41. data/test/rails/overrides/app/models/normal_mailer.rb +9 -0
  42. data/test/rails/overrides/spec/models/mobile_mailer_spec.rb +737 -0
  43. data/test/rails/overrides/spec/models/normal_mailer_spec.rb +34 -0
  44. data/test/rails/overrides/spec/requests/template_path_spec.rb +13 -7
  45. data/test/rails/overrides/spec/spec_helper.rb +6 -0
  46. data/test/rails/rails_root/app/controllers/application_controller.rb +3 -2
  47. data/test/rails/rails_root/app/controllers/template_path_controller.rb +8 -0
  48. data/test/rails/rails_root/app/models/mobile_mailer.rb +2 -1
  49. data/test/rails/rails_root/app/models/normal_mailer.rb +9 -0
  50. data/test/rails/rails_root/config/initializers/secret_token.rb +1 -1
  51. data/test/rails/rails_root/spec/models/mobile_mailer_spec.rb +73 -80
  52. data/test/rails/rails_root/spec/models/normal_mailer_spec.rb +34 -0
  53. data/test/rails/rails_root/spec/requests/template_path_spec.rb +13 -7
  54. data/test/rails/rails_root/spec/spec_helper.rb +1 -1
  55. data/test/rails/rails_root/vendor/plugins/jpmobile/lib/jpmobile.rb +2 -1
  56. data/test/rails/rails_root/vendor/plugins/jpmobile/lib/jpmobile/emoticon.rb +7 -5
  57. data/test/rails/rails_root/vendor/plugins/jpmobile/lib/jpmobile/hook_action_controller.rb +1 -13
  58. data/test/rails/rails_root/vendor/plugins/jpmobile/lib/jpmobile/hook_action_view.rb +3 -62
  59. data/test/rails/rails_root/vendor/plugins/jpmobile/lib/jpmobile/mail.rb +162 -111
  60. data/test/rails/rails_root/vendor/plugins/jpmobile/lib/jpmobile/mailer.rb +31 -0
  61. data/test/rails/rails_root/vendor/plugins/jpmobile/lib/jpmobile/mobile/abstract_mobile.rb +34 -3
  62. data/test/rails/rails_root/vendor/plugins/jpmobile/lib/jpmobile/mobile/au.rb +2 -5
  63. data/test/rails/rails_root/vendor/plugins/jpmobile/lib/jpmobile/mobile/docomo.rb +4 -5
  64. data/test/rails/rails_root/vendor/plugins/jpmobile/lib/jpmobile/mobile/softbank.rb +7 -8
  65. data/test/rails/rails_root/vendor/plugins/jpmobile/lib/jpmobile/path_set.rb +40 -0
  66. data/test/rails/rails_root/vendor/plugins/jpmobile/lib/jpmobile/rack/params_filter.rb +1 -1
  67. data/test/rails/rails_root/vendor/plugins/jpmobile/lib/jpmobile/rails.rb +24 -0
  68. data/test/rails/rails_root/vendor/plugins/jpmobile/lib/jpmobile/resolver.rb +38 -0
  69. data/test/rails/rails_root/vendor/plugins/jpmobile/lib/jpmobile/util.rb +33 -23
  70. metadata +43 -14
  71. data/test/legacy/emoticon_test.rb +0 -63
  72. data/test/legacy/helper.rb +0 -8
  73. data/test/rails/rails_root/vendor/plugins/jpmobile/lib/jpmobile/hook_action_mailer.rb +0 -22
data/README ADDED
File without changes
data/README.rdoc CHANGED
@@ -13,6 +13,10 @@
13
13
  * ディスプレイ情報(画面サイズ、ブラウザ画面サイズ、カラー・白黒、色数)の取得
14
14
  * ディスプレイ情報の取得には {jpmobile-terminfo}[http://github.com/jpmobile/jpmobile-terminfo] が必要です。
15
15
  * 文字コード変換機能/絵文字のキャリア間相互変換
16
+ * メールの送信
17
+ * 絵文字と漢字コードの変換
18
+ * メールの受信(experimental)
19
+ * 絵文字と漢字コードの変換
16
20
 
17
21
  また Rails 3.0 に以下の機能を追加する
18
22
  * ビューへの自動振分け
@@ -144,42 +148,37 @@ request.mobile.display で Jpmobile::Display クラスのインスタンスが
144
148
  jpmobileを読み込むとDoCoMo、Au、SoftBankの絵文字を透過的に扱うことができる。
145
149
 
146
150
  * Rails の場合は vendor/plugins に配置し、下記の設定を追加することで有効になる。
151
+ # Rack middleware を追加するメソッド
152
+ Rails.application.config.jpmobile.mobile_filter
147
153
 
148
- # Rack middleware を追加するメソッド
149
- Rails.application.config.jpmobile.mobile_filter
150
-
151
- ** 下記の設定を追加することで、<form> タグの accept-charset が変更される。
152
-
153
- # <form accept-charset="Shift_JIS" ...> などに変更する
154
- Rails.application.config.jpmobile.form_accept_charset_conversion = true
154
+ * 下記の設定を追加することで、<form> タグの accept-charset が変更される。
155
+ # <form accept-charset="Shift_JIS" ...> などに変更する
156
+ Rails.application.config.jpmobile.form_accept_charset_conversion = true
155
157
 
156
158
  携帯電話上では特に問題とならない。PCブラウザでテストする際に問題となるためのオプション。
157
159
 
158
160
  * Sinatra の場合は下記のように指定する。
161
+ $LOAD_PATH << './lib/jpmobile/lib'
162
+ require 'jpmobile'
163
+ require 'jpmobile/rack'
159
164
 
160
- $LOAD_PATH << './lib/jpmobile/lib'
161
- require 'jpmobile'
162
- require 'jpmobile/rack'
165
+ use Jpmobile::Rack::MobileCarrier
166
+ use Jpmobile::Rack::ParamsFilter
167
+ use Jpmobile::Rack::Filter
163
168
 
164
- use Jpmobile::Rack::MobileCarrier
165
- use Jpmobile::Rack::ParamsFilter
166
- use Jpmobile::Rack::Filter
167
-
168
- get '/' do
169
- erb :index
170
- end
169
+ get '/' do
170
+ erb :index
171
+ end
171
172
 
172
173
  Rails のみ半角・全角の自動変換フィルターが用意されている。用いるには
173
-
174
- class MyController
175
- hankaku_filter
176
- end
174
+ class MyController
175
+ hankaku_filter
176
+ end
177
177
 
178
178
  と指定する。またtextareaやhidden/text/passwordのinputタグで半角に変換したくない場合は :input => true を指定する。
179
-
180
- class MyController
181
- hankaku_filter :input => true
182
- end
179
+ class MyController
180
+ hankaku_filter :input => true
181
+ end
183
182
 
184
183
  Jpmobile内では、各キャリアの絵文字はUnicode私的領域上にマッピングされ、管理される。
185
184
  このとき、DoCoMo、Auは公式サイト記載のマッピングが使用される。
@@ -194,7 +193,13 @@ Jpmobile内では、各キャリアの絵文字はUnicode私的領域上にマ
194
193
  * 絵文字はキャリアにあわせて変換されて送出される。
195
194
  * 携帯電話からの絵文字はUnicode私的領域にマップされ、UTF-8でparamsに格納される。
196
195
 
197
- === ビューの自動振分け
196
+ === ビューの自動振り分け
197
+ ビューの自動振り分けを行うには、以下の設定が必要です。
198
+
199
+ class ApplicationController < ActionController::Base
200
+ include Jpmobile::ViewSelector
201
+ end
202
+
198
203
  DoCoMo携帯電話からアクセスすると、
199
204
  * index_mobile_docomo.html.erb
200
205
  * index_mobile.html.erb
@@ -209,7 +214,11 @@ Auの場合は、index_mobile_au.html.erb、Softbankの場合はindex_mobile_sof
209
214
  の順でテンプレートを検索する。
210
215
  Androidの場合はindex_smart_phone_android.html.erb、Windows Phoneの場合はindex_smart_phone_windows_phone.html.erbが最初に検索される。
211
216
 
212
- 携帯専用サイトであれば、index.html.erbがなくとも問題ない。
217
+ 自動振り分けを無効化するには、アクションにおいて以下のように設定する
218
+
219
+ def index
220
+ self.lookup_context.mobile = nil
221
+ end
213
222
 
214
223
  === 位置情報の取得用リンクの生成
215
224
 
@@ -230,10 +239,8 @@ Androidの場合はindex_smart_phone_android.html.erb、Windows Phoneの場合
230
239
  trans_sid 機能を使う場合には cookie session store を使用することができません。
231
240
  また Rails 3.0 では Cookie が使える場合にはそちらが優先されてしまうため、:always を指定した場合に問題になる場合があります。
232
241
  trans_sid を使用する際には、例えば config/initializers/session_store.rb で
233
-
234
242
  Rails.application.config.session_store :active_record_store
235
243
  Rails.application.config.session_options = {:cookie_only => false}
236
-
237
244
  として active_record_store を使用するように設定し、:cookie_only => false として Cookie を優先しないように設定します。
238
245
  このとき ApplicationController において protect_from_forgery の :secret を指定するか、
239
246
  あるいは protect_from_forgery を解除する必要があるでしょう。
@@ -244,6 +251,28 @@ trans_sid を使用する際には、例えば config/initializers/session_store
244
251
  link_to "hoge", :controller => "controller", :action => "action", :id => "id"
245
252
  のように指定する必要があります。
246
253
 
254
+ === メールの送受信
255
+ メールにて絵文字や漢字コードの変換、ビューの自動振り分けを行なうには Jpmobile::Mailer::Base を使う。
256
+
257
+ class MobileMailer < Jpmobile::Mailer::Base
258
+ default :from => "info@jpmobile-rails.org"
259
+
260
+ def registration(to)
261
+ mail(:to => to)
262
+ end
263
+
264
+ def receive(email)
265
+ email
266
+ end
267
+ end
268
+
269
+ * デフォルトで ISO-2022-JP エンコードで送信
270
+ * docomo/SoftBank には Shift_JIS で送信
271
+ * au は ISO-2022-JP エンコードで送信
272
+ * ビューやレイアウトの自動振り分け
273
+ * docomo であれば app/views/mobile_mailer/registration_mobile_docomo.html.erb など
274
+ * 受信に関しては、docomo/SoftBank でテストできないため、実験版とします。
275
+
247
276
  == テストに必要なgemパッケージ
248
277
  テストを実行するためには以下のgemパッケージが必要です。
249
278
  * rails (include rack)
data/Rakefile CHANGED
@@ -77,5 +77,5 @@ namespace :test do
77
77
  end
78
78
  end
79
79
 
80
- task :test => ['test:prepare', 'test:legacy', 'spec:unit', 'spec:rack', 'test:rails']
80
+ task :test => ['test:prepare', 'spec:unit', 'spec:rack', 'test:rails']
81
81
  load 'lib/tasks/jpmobile_tasks.rake'
data/VERSION.yml CHANGED
@@ -1,5 +1,5 @@
1
1
  ---
2
- :major: 0
3
- :minor: 1
4
- :patch: 6
5
- :build:
2
+ :major: 1
3
+ :minor: 0
4
+ :patch: 0
5
+ :build: pre
data/lib/jpmobile.rb CHANGED
@@ -49,6 +49,9 @@ module Jpmobile
49
49
  autoload :Config, 'jpmobile/rack/config'
50
50
  end
51
51
  autoload :Configuration, 'jpmobile/rack'
52
+
53
+ autoload :Mailer, 'jpmobile/mailer'
54
+ autoload :Resolver, 'jpmobile/resolver'
52
55
  end
53
56
 
54
57
  if defined?(Rails)
@@ -4,13 +4,28 @@
4
4
  module Jpmobile
5
5
  # email関連の処理
6
6
  module Email
7
+ module_function
8
+
7
9
  # メールアドレスよりキャリア情報を取得する
8
10
  # _param1_:: email メールアドレス
9
11
  # return :: Jpmobile::Mobileで定義されている携帯キャリアクラス
10
- def self.detect(email)
12
+ def detect(email)
11
13
  Mobile.carriers.each do |const|
12
14
  c = Mobile.const_get(const)
13
- return c if c::MAIL_ADDRESS_REGEXP && email =~ c::MAIL_ADDRESS_REGEXP
15
+ return c if c::MAIL_ADDRESS_REGEXP && email.match(/^#{c::MAIL_ADDRESS_REGEXP}$/)
16
+ end
17
+ nil
18
+ end
19
+
20
+ # 含まれているメールアドレスからキャリア情報を取得する
21
+ def detect_from_mail_header(str)
22
+ Mobile.carriers.each do |const|
23
+ c = Mobile.const_get(const)
24
+ if c::MAIL_ADDRESS_REGEXP &&
25
+ str.match(/(\S+@[A-Za-z0-9\-\.\_]+)/) &&
26
+ $1.match(/^#{c::MAIL_ADDRESS_REGEXP}$/)
27
+ return c
28
+ end
14
29
  end
15
30
  nil
16
31
  end
@@ -9,8 +9,13 @@ module Jpmobile
9
9
  %w( DOCOMO_SJIS_TO_UNICODE DOCOMO_UNICODE_TO_SJIS ).each do |const|
10
10
  autoload const, 'jpmobile/emoticon/docomo'
11
11
  end
12
- autoload :AU_SJIS_TO_UNICODE, 'jpmobile/emoticon/au'
13
- %w( SOFTBANK_UNICODE_TO_WEBCODE SOFTBANK_WEBCODE_TO_UNICODE ).each do |const|
12
+ %w( AU_SJIS_TO_UNICODE AU_UNICODE_TO_EMAILJIS AU_SJIS_TO_EMAIL_JIS AU_EMAILJIS_TO_UNICODE ).each do |const|
13
+ autoload const, 'jpmobile/emoticon/au'
14
+ end
15
+ %w(
16
+ SOFTBANK_UNICODE_TO_WEBCODE SOFTBANK_WEBCODE_TO_UNICODE
17
+ SOFTBANK_UNICODE_TO_SJIS SOFTBANK_SJIS_TO_UNICODE
18
+ ).each do |const|
14
19
  autoload const, 'jpmobile/emoticon/softbank'
15
20
  end
16
21
  %w( CONVERSION_TABLE_TO_DOCOMO CONVERSION_TABLE_TO_AU CONVERSION_TABLE_TO_SOFTBANK ).each do |const|
@@ -20,6 +25,7 @@ module Jpmobile
20
25
  SJIS_TO_UNICODE UNICODE_TO_SJIS
21
26
  SJIS_REGEXP SOFTBANK_WEBCODE_REGEXP DOCOMO_SJIS_REGEXP AU_SJIS_REGEXP SOFTBANK_UNICODE_REGEXP
22
27
  EMOTICON_UNICODES UTF8_REGEXP
28
+ CONVERSION_TABLE_TO_PC_EMAIL SOFTBANK_SJIS_REGEXP AU_EMAILJIS_REGEXP
23
29
  ).each do |const|
24
30
  autoload const, 'jpmobile/emoticon/z_combine'
25
31
  end
@@ -33,7 +39,7 @@ module Jpmobile
33
39
  end
34
40
  end
35
41
 
36
- # +str+ のなかでDoCoMo絵文字をUnicode数値文字参照に置換した文字列を返す。
42
+ # +str+ のなかでau絵文字をUnicode数値文字参照に置換した文字列を返す。
37
43
  def self.external_to_unicodecr_au(str)
38
44
  str.gsub(AU_SJIS_REGEXP) do |match|
39
45
  sjis = match.unpack('n').first
@@ -42,6 +48,18 @@ module Jpmobile
42
48
  end
43
49
  end
44
50
 
51
+ # +str+ のなかでau絵文字をUnicode数値文字参照に置換した文字列を返す。(メール専用)
52
+ def self.external_to_unicodecr_au_mail(in_str)
53
+ str = Jpmobile::Util.ascii_8bit(in_str)
54
+ str.gsub(Jpmobile::Util.jis_string_regexp) do |jis_string|
55
+ jis_string.gsub(/[\x21-\x7e]{2}/) do |match|
56
+ jis = match.unpack('n').first
57
+ unicode = AU_EMAILJIS_TO_UNICODE[jis]
58
+ unicode ? Jpmobile::Util.ascii_8bit("\x1b\x28\x42&#x%04x;\x1b\x24\x42"%unicode) : match
59
+ end
60
+ end
61
+ end
62
+
45
63
  # +str+のなかでUTF8のSoftBank絵文字を(+0x1000だけシフトして)Unicode数値文字参照に変換した文字列を返す。
46
64
  def self.external_to_unicodecr_softbank(str)
47
65
  # SoftBank Unicode
@@ -50,24 +68,17 @@ module Jpmobile
50
68
  "&#x%04x;" % (unicode+0x1000)
51
69
  end
52
70
  end
71
+ def self.external_to_unicodecr_softbank_sjis(str)
72
+ # SoftBank Shift_JIS
73
+ str.gsub(SOFTBANK_SJIS_REGEXP) do |match|
74
+ sjis = match.unpack('n').first
75
+ unicode = SOFTBANK_SJIS_TO_UNICODE[sjis]
76
+ "&#x%04x;" % (unicode+0x1000)
77
+ end
78
+ end
53
79
  def self.external_to_unicodecr_vodafone(str)
54
80
  external_to_unicodecr_softbank(str)
55
81
  end
56
- # +str+のなかでWebcodeのSoftBank絵文字を(+0x1000だけシフトして)Unicode数値文字参照に変換した文字列を返す。
57
- def self.external_to_unicodecr_jphone(str)
58
- # SoftBank Webcode
59
- s = str.clone
60
- # 連続したエスケープコードが省略されている場合は切りはなす。
61
- s.gsub!(/\x1b\x24(.)(.+?)\x0f/) do |match|
62
- a = $1
63
- $2.split(//).map{|x| "\x1b\x24#{a}#{x}\x0f"}.join('')
64
- end
65
- # Webcodeを変換
66
- s.gsub(SOFTBANK_WEBCODE_REGEXP) do |match|
67
- unicode = SOFTBANK_WEBCODE_TO_UNICODE[match[2,2]] + 0x1000
68
- unicode ? ("&#x%04x;"%unicode) : match
69
- end
70
- end
71
82
 
72
83
  # +str+ のなかでUnicode数値文字参照で表記された絵文字を携帯側エンコーディングに置換する。
73
84
  #
@@ -91,16 +102,15 @@ module Jpmobile
91
102
  # 変換先がUnicodeで指定されている。つまり対応する絵文字がある。
92
103
  if sjis = UNICODE_TO_SJIS[converted]
93
104
  if to_sjis
94
- sjis_emotion = [sjis].pack('n')
95
- if sjis_emotion.respond_to?(:force_encoding)
96
- sjis_emotion.force_encoding("Shift_JIS")
97
- end
98
- sjis_emotion
105
+ sjis_emotion = Jpmobile::Util.sjis([sjis].pack('n'))
99
106
  else
100
107
  [converted].pack("U")
101
108
  end
102
109
  elsif webcode = SOFTBANK_UNICODE_TO_WEBCODE[converted-0x1000]
103
110
  [converted-0x1000].pack('U')
111
+ elsif converted == GETA
112
+ # PCで〓を表示する場合
113
+ [GETA].pack("U")
104
114
  else
105
115
  # キャリア変換テーブルに指定されていたUnicodeに対応する
106
116
  # 携帯側エンコーディングが見つからない(変換テーブルの不備の可能性あり)。
@@ -137,5 +147,59 @@ module Jpmobile
137
147
  "&#x%04x;" % match.unpack('U').first
138
148
  end
139
149
  end
150
+
151
+ # +str+ のなかでUnicode数値文字参照で表記された絵文字をメール送信用JISコードに変換する
152
+ # au 専用
153
+ def self.unicodecr_to_au_email(in_str)
154
+ str = Jpmobile::Util.ascii_8bit(in_str)
155
+ regexp = Regexp.compile(Jpmobile::Util.ascii_8bit("&#x([0-9a-f]{4});"), Regexp::IGNORECASE)
156
+ str.gsub(regexp) do |match|
157
+ unicode = $1.scanf("%x").first
158
+ converted = CONVERSION_TABLE_TO_AU[unicode]
159
+
160
+ # メール用エンコーディングに変換する
161
+ case converted
162
+ when Integer
163
+ if sjis = UNICODE_TO_SJIS[converted]
164
+ if email_jis = SJIS_TO_EMAIL_JIS[sjis]
165
+ Jpmobile::Util.ascii_8bit("\x1b\x24\x42#{[email_jis].pack('n')}\x1b\x28\x42")
166
+ else
167
+ Jpmobile::Util.ascii_8bit([sjis].pack('n'))
168
+ end
169
+ else
170
+ match
171
+ end
172
+ when String
173
+ # FIXME: 絵文字の代替が文章でいいかどうかの検証
174
+ Jpmobile::Util.ascii_8bit(Jpmobile::Util.utf8_to_jis(converted))
175
+ else
176
+ match
177
+ end
178
+ end
179
+ end
180
+
181
+ # +str+ のなかでUnicode数値文字参照で表記された絵文字をメール送信用JISコードに変換する
182
+ # softbank 専用
183
+ def self.unicodecr_to_softbank_email(str)
184
+ str.gsub(/&#x([0-9a-f]{4});/i) do |match|
185
+ unicode = $1.scanf("%x").first
186
+ converted = CONVERSION_TABLE_TO_SOFTBANK[unicode]
187
+
188
+ # メール用エンコーディングに変換する
189
+ case converted
190
+ when Integer
191
+ if sjis = SOFTBANK_UNICODE_TO_SJIS[converted-0x1000]
192
+ Jpmobile::Util.sjis([sjis].pack('n'))
193
+ else
194
+ match
195
+ end
196
+ when String
197
+ # FIXME: 絵文字の代替が文章でいいかどうかの検証
198
+ Jpmobile::Util.utf8_to_sjis(converted)
199
+ else
200
+ match
201
+ end
202
+ end
203
+ end
140
204
  end
141
205
  end
@@ -1285,3 +1285,647 @@ Jpmobile::Emoticon::AU_EMAILJIS_TO_UNICODE = {
1285
1285
  0x7B6C=>0xEB87,
1286
1286
  0x7B6D=>0xEB88,
1287
1287
  }.freeze
1288
+ Jpmobile::Emoticon::AU_UNICODE_TO_EMAILJIS = Jpmobile::Emoticon::AU_EMAILJIS_TO_UNICODE.invert.freeze
1289
+ Jpmobile::Emoticon::AU_SJIS_TO_EMAIL_JIS = {
1290
+ 0xF659 => 0x753A,
1291
+ 0xF75E => 0x773F,
1292
+ 0xF65A => 0x753B,
1293
+ 0xF75F => 0x7740,
1294
+ 0xF65B => 0x753C,
1295
+ 0xF760 => 0x7741,
1296
+ 0xF748 => 0x7729,
1297
+ 0xF761 => 0x7742,
1298
+ 0xF749 => 0x772A,
1299
+ 0xF762 => 0x7743,
1300
+ 0xF74A => 0x772B,
1301
+ 0xF763 => 0x7744,
1302
+ 0xF74B => 0x772C,
1303
+ 0xF764 => 0x7745,
1304
+ 0xF74C => 0x772D,
1305
+ 0xF765 => 0x7746,
1306
+ 0xF74D => 0x772E,
1307
+ 0xF766 => 0x7747,
1308
+ 0xF74E => 0x772F,
1309
+ 0xF767 => 0x7748,
1310
+ 0xF74F => 0x7730,
1311
+ 0xF768 => 0x7749,
1312
+ 0xF69A => 0x757A,
1313
+ 0xF769 => 0x774A,
1314
+ 0xF6EA => 0x766C,
1315
+ 0xF660 => 0x7541,
1316
+ 0xF796 => 0x7776,
1317
+ 0xF693 => 0x7573,
1318
+ 0xF65E => 0x753F,
1319
+ 0xF7B1 => 0x7833,
1320
+ 0xF65F => 0x7540,
1321
+ 0xF661 => 0x7542,
1322
+ 0xF750 => 0x7731,
1323
+ 0xF6EB => 0x766D,
1324
+ 0xF751 => 0x7732,
1325
+ 0xF77C => 0x775D,
1326
+ 0xF752 => 0x7733,
1327
+ 0xF6D3 => 0x7655,
1328
+ 0xF753 => 0x7734,
1329
+ 0xF7B2 => 0x7834,
1330
+ 0xF754 => 0x7735,
1331
+ 0xF69B => 0x757B,
1332
+ 0xF755 => 0x7736,
1333
+ 0xF6EC => 0x766E,
1334
+ 0xF756 => 0x7737,
1335
+ 0xF76A => 0x774B,
1336
+ 0xF757 => 0x7738,
1337
+ 0xF76B => 0x774C,
1338
+ 0xF797 => 0x7777,
1339
+ 0xF77D => 0x775E,
1340
+ 0xF758 => 0x7739,
1341
+ 0xF798 => 0x7778,
1342
+ 0xF759 => 0x773A,
1343
+ 0xF654 => 0x7535,
1344
+ 0xF75A => 0x773B,
1345
+ 0xF77E => 0x775F,
1346
+ 0xF75B => 0x773C,
1347
+ 0xF662 => 0x7543,
1348
+ 0xF75C => 0x773D,
1349
+ 0xF76C => 0x774D,
1350
+ 0xF75D => 0x773E,
1351
+ 0xF76D => 0x774E,
1352
+ 0xF76E => 0x774F,
1353
+ 0xF6EE => 0x7670,
1354
+ 0xF76F => 0x7750,
1355
+ 0xF664 => 0x7545,
1356
+ 0xF69C => 0x757C,
1357
+ 0xF694 => 0x7574,
1358
+ 0xF770 => 0x7751,
1359
+ 0xF782 => 0x7762,
1360
+ 0xF780 => 0x7760,
1361
+ 0xF65C => 0x753D,
1362
+ 0xF6D4 => 0x7656,
1363
+ 0xF642 => 0x7523,
1364
+ 0xF663 => 0x7544,
1365
+ 0xF783 => 0x7763,
1366
+ 0xF771 => 0x7752,
1367
+ 0xF784 => 0x7764,
1368
+ 0xF772 => 0x7753,
1369
+ 0xF785 => 0x7765,
1370
+ 0xF6ED => 0x766F,
1371
+ 0xF786 => 0x7766,
1372
+ 0xF773 => 0x7754,
1373
+ 0xF6EF => 0x7671,
1374
+ 0xF6B8 => 0x763A,
1375
+ 0xF787 => 0x7767,
1376
+ 0xF640 => 0x7521,
1377
+ 0xF676 => 0x7557,
1378
+ 0xF644 => 0x7525,
1379
+ 0xF665 => 0x7546,
1380
+ 0xF64E => 0x752F,
1381
+ 0xF6FA => 0x767C,
1382
+ 0xF6B9 => 0x763B,
1383
+ 0xF79A => 0x777A,
1384
+ 0xF7AC => 0x782E,
1385
+ 0xF6F0 => 0x7672,
1386
+ 0xF6D5 => 0x7657,
1387
+ 0xF79B => 0x777B,
1388
+ 0xF774 => 0x7755,
1389
+ 0xF684 => 0x7564,
1390
+ 0xF775 => 0x7756,
1391
+ 0xF6BD => 0x763F,
1392
+ 0xF674 => 0x7555,
1393
+ 0xF79C => 0x777C,
1394
+ 0xF7AD => 0x782F,
1395
+ 0xF79D => 0x777D,
1396
+ 0xF7B3 => 0x7835,
1397
+ 0xF6D7 => 0x7659,
1398
+ 0xF6D6 => 0x7658,
1399
+ 0xF778 => 0x7759,
1400
+ 0xF799 => 0x7779,
1401
+ 0xF779 => 0x775A,
1402
+ 0xF776 => 0x7757,
1403
+ 0xF6F1 => 0x7673,
1404
+ 0xF777 => 0x7758,
1405
+ 0xF6F2 => 0x7674,
1406
+ 0xF790 => 0x7770,
1407
+ 0xF788 => 0x7768,
1408
+ 0xF675 => 0x7556,
1409
+ 0xF677 => 0x7558,
1410
+ 0xF781 => 0x7761,
1411
+ 0xF79E => 0x777E,
1412
+ 0xF7B4 => 0x7836,
1413
+ 0xF6F3 => 0x7675,
1414
+ 0xF68A => 0x756A,
1415
+ 0xF686 => 0x7566,
1416
+ 0xF79F => 0x7821,
1417
+ 0xF78D => 0x776D,
1418
+ 0xF791 => 0x7771,
1419
+ 0xF67A => 0x755B,
1420
+ 0xF792 => 0x7772,
1421
+ 0xF793 => 0x7773,
1422
+ 0xF6F4 => 0x7676,
1423
+ 0xF69D => 0x757D,
1424
+ 0xF7A0 => 0x7822,
1425
+ 0xF7A5 => 0x7827,
1426
+ 0xF789 => 0x7769,
1427
+ 0xF7A6 => 0x7828,
1428
+ 0xF77A => 0x775B,
1429
+ 0xF6DA => 0x765C,
1430
+ 0xF6A7 => 0x7629,
1431
+ 0xF7A7 => 0x7829,
1432
+ 0xF6BA => 0x763C,
1433
+ 0xF6F8 => 0x767A,
1434
+ 0xF7A1 => 0x7823,
1435
+ 0xF6F9 => 0x767B,
1436
+ 0xF77B => 0x775C,
1437
+ 0xF666 => 0x7547,
1438
+ 0xF78A => 0x776A,
1439
+ 0xF68C => 0x756C,
1440
+ 0xF6F5 => 0x7677,
1441
+ 0xF68D => 0x756D,
1442
+ 0xF7A2 => 0x7824,
1443
+ 0xF6A1 => 0x7623,
1444
+ 0xF6D8 => 0x765A,
1445
+ 0xF7A8 => 0x782A,
1446
+ 0xF6D9 => 0x765B,
1447
+ 0xF68E => 0x756E,
1448
+ 0xF78B => 0x776B,
1449
+ 0xF7A9 => 0x782B,
1450
+ 0xF678 => 0x7559,
1451
+ 0xF7AA => 0x782C,
1452
+ 0xF6A8 => 0x762A,
1453
+ 0xF7AB => 0x782D,
1454
+ 0xF6F6 => 0x7678,
1455
+ 0xF655 => 0x7536,
1456
+ 0xF685 => 0x7565,
1457
+ 0xF656 => 0x7537,
1458
+ 0xF78C => 0x776C,
1459
+ 0xF657 => 0x7538,
1460
+ 0xF68B => 0x756B,
1461
+ 0xF658 => 0x7539,
1462
+ 0xF679 => 0x755A,
1463
+ 0xF6FB => 0x767D,
1464
+ 0xF7A3 => 0x7825,
1465
+ 0xF6FC => 0x767E,
1466
+ 0xF7AE => 0x7830,
1467
+ 0xF740 => 0x7721,
1468
+ 0xF7A4 => 0x7826,
1469
+ 0xF741 => 0x7722,
1470
+ 0xF7AF => 0x7831,
1471
+ 0xF742 => 0x7723,
1472
+ 0xF7B0 => 0x7832,
1473
+ 0xF743 => 0x7724,
1474
+ 0xF6F7 => 0x7679,
1475
+ 0xF744 => 0x7725,
1476
+ 0xF745 => 0x7726,
1477
+ 0xF643 => 0x7524,
1478
+ 0xF746 => 0x7727,
1479
+ 0xF68F => 0x756F,
1480
+ 0xF747 => 0x7728,
1481
+ 0xF690 => 0x7570,
1482
+ 0xF641 => 0x7522,
1483
+ 0xF691 => 0x7571,
1484
+ 0xF65D => 0x753E,
1485
+ 0xF692 => 0x7572,
1486
+ 0xF667 => 0x7548,
1487
+ 0xF645 => 0x7526,
1488
+ 0xF668 => 0x7549,
1489
+ 0xF695 => 0x7575,
1490
+ 0xF669 => 0x754A,
1491
+ 0xF696 => 0x7576,
1492
+ 0xF66A => 0x754B,
1493
+ 0xF697 => 0x7577,
1494
+ 0xF66B => 0x754C,
1495
+ 0xF698 => 0x7578,
1496
+ 0xF66C => 0x754D,
1497
+ 0xF699 => 0x7579,
1498
+ 0xF66D => 0x754E,
1499
+ 0xF646 => 0x7527,
1500
+ 0xF66E => 0x754F,
1501
+ 0xF647 => 0x7528,
1502
+ 0xF66F => 0x7550,
1503
+ 0xF69E => 0x757E,
1504
+ 0xF670 => 0x7551,
1505
+ 0xF69F => 0x7621,
1506
+ 0xF671 => 0x7552,
1507
+ 0xF6A0 => 0x7622,
1508
+ 0xF672 => 0x7553,
1509
+ 0xF6A2 => 0x7624,
1510
+ 0xF673 => 0x7554,
1511
+ 0xF6A3 => 0x7625,
1512
+ 0xF67B => 0x755C,
1513
+ 0xF6A4 => 0x7626,
1514
+ 0xF67C => 0x755D,
1515
+ 0xF6A5 => 0x7627,
1516
+ 0xF67D => 0x755E,
1517
+ 0xF6A6 => 0x7628,
1518
+ 0xF67E => 0x755F,
1519
+ 0xF6A9 => 0x762B,
1520
+ 0xF680 => 0x7560,
1521
+ 0xF6AA => 0x762C,
1522
+ 0xF681 => 0x7561,
1523
+ 0xF6AB => 0x762D,
1524
+ 0xF682 => 0x7562,
1525
+ 0xF6AC => 0x762E,
1526
+ 0xF683 => 0x7563,
1527
+ 0xF6AD => 0x762F,
1528
+ 0xF78E => 0x776E,
1529
+ 0xF6AE => 0x7630,
1530
+ 0xF78F => 0x776F,
1531
+ 0xF6AF => 0x7631,
1532
+ 0xF687 => 0x7567,
1533
+ 0xF648 => 0x7529,
1534
+ 0xF688 => 0x7568,
1535
+ 0xF6B0 => 0x7632,
1536
+ 0xF689 => 0x7569,
1537
+ 0xF6B1 => 0x7633,
1538
+ 0xF6B2 => 0x7634,
1539
+ 0xF6CB => 0x764D,
1540
+ 0xF6B3 => 0x7635,
1541
+ 0xF6CC => 0x764E,
1542
+ 0xF6B4 => 0x7636,
1543
+ 0xF6CD => 0x764F,
1544
+ 0xF6B5 => 0x7637,
1545
+ 0xF6CE => 0x7650,
1546
+ 0xF6B6 => 0x7638,
1547
+ 0xF6CF => 0x7651,
1548
+ 0xF6B7 => 0x7639,
1549
+ 0xF6D0 => 0x7652,
1550
+ 0xF6BB => 0x763D,
1551
+ 0xF6D1 => 0x7653,
1552
+ 0xF6BC => 0x763E,
1553
+ 0xF6D2 => 0x7654,
1554
+ 0xF649 => 0x752A,
1555
+ 0xF6DB => 0x765D,
1556
+ 0xF64A => 0x752B,
1557
+ 0xF6DC => 0x765E,
1558
+ 0xF64B => 0x752C,
1559
+ 0xF6DD => 0x765F,
1560
+ 0xF64C => 0x752D,
1561
+ 0xF6DE => 0x7660,
1562
+ 0xF64D => 0x752E,
1563
+ 0xF6DF => 0x7661,
1564
+ 0xF6BE => 0x7640,
1565
+ 0xF6E0 => 0x7662,
1566
+ 0xF6BF => 0x7641,
1567
+ 0xF6E1 => 0x7663,
1568
+ 0xF6C0 => 0x7642,
1569
+ 0xF6E2 => 0x7664,
1570
+ 0xF64F => 0x7530,
1571
+ 0xF6E3 => 0x7665,
1572
+ 0xF650 => 0x7531,
1573
+ 0xF6E4 => 0x7666,
1574
+ 0xF651 => 0x7532,
1575
+ 0xF794 => 0x7774,
1576
+ 0xF652 => 0x7533,
1577
+ 0xF795 => 0x7775,
1578
+ 0xF653 => 0x7534,
1579
+ 0xF6E5 => 0x7667,
1580
+ 0xF6C1 => 0x7643,
1581
+ 0xF6E6 => 0x7668,
1582
+ 0xF6C2 => 0x7644,
1583
+ 0xF6E7 => 0x7669,
1584
+ 0xF6C3 => 0x7645,
1585
+ 0xF6E8 => 0x766A,
1586
+ 0xF6C4 => 0x7646,
1587
+ 0xF6E9 => 0x766B,
1588
+ 0xF6C5 => 0x7647,
1589
+ 0xF7B5 => 0x7837,
1590
+ 0xF6C6 => 0x7648,
1591
+ 0xF7B6 => 0x7838,
1592
+ 0xF6C7 => 0x7649,
1593
+ 0xF7B7 => 0x7839,
1594
+ 0xF6C8 => 0x764A,
1595
+ 0xF7B8 => 0x783A,
1596
+ 0xF6C9 => 0x764B,
1597
+ 0xF7B9 => 0x783B,
1598
+ 0xF6CA => 0x764C,
1599
+ 0xF7BA => 0x783C,
1600
+ 0xF7BB => 0x783D,
1601
+ 0xF7ED => 0x786F,
1602
+ 0xF7BC => 0x783E,
1603
+ 0xF7EE => 0x7870,
1604
+ 0xF7BD => 0x783F,
1605
+ 0xF7EF => 0x7871,
1606
+ 0xF7BE => 0x7840,
1607
+ 0xF7F0 => 0x7872,
1608
+ 0xF7BF => 0x7841,
1609
+ 0xF7F1 => 0x7873,
1610
+ 0xF7C0 => 0x7842,
1611
+ 0xF7F2 => 0x7874,
1612
+ 0xF7C1 => 0x7843,
1613
+ 0xF7F3 => 0x7875,
1614
+ 0xF7C2 => 0x7844,
1615
+ 0xF7F4 => 0x7876,
1616
+ 0xF7C3 => 0x7845,
1617
+ 0xF7F5 => 0x7877,
1618
+ 0xF7C4 => 0x7846,
1619
+ 0xF7F6 => 0x7878,
1620
+ 0xF7C5 => 0x7847,
1621
+ 0xF7F7 => 0x7879,
1622
+ 0xF7C6 => 0x7848,
1623
+ 0xF7F8 => 0x787A,
1624
+ 0xF7C7 => 0x7849,
1625
+ 0xF7F9 => 0x787B,
1626
+ 0xF7C8 => 0x784A,
1627
+ 0xF7FA => 0x787C,
1628
+ 0xF7C9 => 0x784B,
1629
+ 0xF7FB => 0x787D,
1630
+ 0xF7CA => 0x784C,
1631
+ 0xF7FC => 0x787E,
1632
+ 0xF7CB => 0x784D,
1633
+ 0xF340 => 0x7921,
1634
+ 0xF7CC => 0x784E,
1635
+ 0xF341 => 0x7922,
1636
+ 0xF7CD => 0x784F,
1637
+ 0xF342 => 0x7923,
1638
+ 0xF7CE => 0x7850,
1639
+ 0xF343 => 0x7924,
1640
+ 0xF7CF => 0x7851,
1641
+ 0xF344 => 0x7925,
1642
+ 0xF7D0 => 0x7852,
1643
+ 0xF345 => 0x7926,
1644
+ 0xF7D1 => 0x7853,
1645
+ 0xF346 => 0x7927,
1646
+ 0xF7E5 => 0x7867,
1647
+ 0xF347 => 0x7928,
1648
+ 0xF7E6 => 0x7868,
1649
+ 0xF348 => 0x7929,
1650
+ 0xF7E7 => 0x7869,
1651
+ 0xF349 => 0x792A,
1652
+ 0xF7E8 => 0x786A,
1653
+ 0xF34A => 0x792B,
1654
+ 0xF7E9 => 0x786B,
1655
+ 0xF34B => 0x792C,
1656
+ 0xF7EA => 0x786C,
1657
+ 0xF34C => 0x792D,
1658
+ 0xF7EB => 0x786D,
1659
+ 0xF34D => 0x792E,
1660
+ 0xF7EC => 0x786E,
1661
+ 0xF34E => 0x792F,
1662
+ 0xF34F => 0x7930,
1663
+ 0xF36E => 0x794F,
1664
+ 0xF350 => 0x7931,
1665
+ 0xF36F => 0x7950,
1666
+ 0xF351 => 0x7932,
1667
+ 0xF370 => 0x7951,
1668
+ 0xF352 => 0x7933,
1669
+ 0xF371 => 0x7952,
1670
+ 0xF353 => 0x7934,
1671
+ 0xF372 => 0x7953,
1672
+ 0xF354 => 0x7935,
1673
+ 0xF373 => 0x7954,
1674
+ 0xF355 => 0x7936,
1675
+ 0xF374 => 0x7955,
1676
+ 0xF356 => 0x7937,
1677
+ 0xF375 => 0x7956,
1678
+ 0xF357 => 0x7938,
1679
+ 0xF376 => 0x7957,
1680
+ 0xF358 => 0x7939,
1681
+ 0xF377 => 0x7958,
1682
+ 0xF359 => 0x793A,
1683
+ 0xF378 => 0x7959,
1684
+ 0xF35A => 0x793B,
1685
+ 0xF379 => 0x795A,
1686
+ 0xF35B => 0x793C,
1687
+ 0xF37A => 0x795B,
1688
+ 0xF35C => 0x793D,
1689
+ 0xF37B => 0x795C,
1690
+ 0xF35D => 0x793E,
1691
+ 0xF37C => 0x795D,
1692
+ 0xF35E => 0x793F,
1693
+ 0xF37D => 0x795E,
1694
+ 0xF35F => 0x7940,
1695
+ 0xF37E => 0x795F,
1696
+ 0xF360 => 0x7941,
1697
+ 0xF380 => 0x7960,
1698
+ 0xF361 => 0x7942,
1699
+ 0xF381 => 0x7961,
1700
+ 0xF362 => 0x7943,
1701
+ 0xF382 => 0x7962,
1702
+ 0xF363 => 0x7944,
1703
+ 0xF383 => 0x7963,
1704
+ 0xF364 => 0x7945,
1705
+ 0xF384 => 0x7964,
1706
+ 0xF365 => 0x7946,
1707
+ 0xF385 => 0x7965,
1708
+ 0xF366 => 0x7947,
1709
+ 0xF386 => 0x7966,
1710
+ 0xF367 => 0x7948,
1711
+ 0xF387 => 0x7967,
1712
+ 0xF368 => 0x7949,
1713
+ 0xF388 => 0x7968,
1714
+ 0xF369 => 0x794A,
1715
+ 0xF389 => 0x7969,
1716
+ 0xF36A => 0x794B,
1717
+ 0xF38A => 0x796A,
1718
+ 0xF36B => 0x794C,
1719
+ 0xF38B => 0x796B,
1720
+ 0xF36C => 0x794D,
1721
+ 0xF38C => 0x796C,
1722
+ 0xF36D => 0x794E,
1723
+ 0xF38D => 0x796D,
1724
+ 0xF38E => 0x796E,
1725
+ 0xF3AD => 0x7A2F,
1726
+ 0xF38F => 0x796F,
1727
+ 0xF3AE => 0x7A30,
1728
+ 0xF390 => 0x7970,
1729
+ 0xF3AF => 0x7A31,
1730
+ 0xF391 => 0x7971,
1731
+ 0xF3B0 => 0x7A32,
1732
+ 0xF392 => 0x7972,
1733
+ 0xF3B1 => 0x7A33,
1734
+ 0xF393 => 0x7973,
1735
+ 0xF3B2 => 0x7A34,
1736
+ 0xF394 => 0x7974,
1737
+ 0xF3B3 => 0x7A35,
1738
+ 0xF395 => 0x7975,
1739
+ 0xF3B4 => 0x7A36,
1740
+ 0xF396 => 0x7976,
1741
+ 0xF3B5 => 0x7A37,
1742
+ 0xF397 => 0x7977,
1743
+ 0xF3B6 => 0x7A38,
1744
+ 0xF398 => 0x7978,
1745
+ 0xF3B7 => 0x7A39,
1746
+ 0xF399 => 0x7979,
1747
+ 0xF3B8 => 0x7A3A,
1748
+ 0xF39A => 0x797A,
1749
+ 0xF3B9 => 0x7A3B,
1750
+ 0xF39B => 0x797B,
1751
+ 0xF3BA => 0x7A3C,
1752
+ 0xF39C => 0x797C,
1753
+ 0xF3BB => 0x7A3D,
1754
+ 0xF39D => 0x797D,
1755
+ 0xF3BC => 0x7A3E,
1756
+ 0xF39E => 0x797E,
1757
+ 0xF3BD => 0x7A3F,
1758
+ 0xF39F => 0x7A21,
1759
+ 0xF3BE => 0x7A40,
1760
+ 0xF3A0 => 0x7A22,
1761
+ 0xF3BF => 0x7A41,
1762
+ 0xF3A1 => 0x7A23,
1763
+ 0xF3C0 => 0x7A42,
1764
+ 0xF3A2 => 0x7A24,
1765
+ 0xF3C1 => 0x7A43,
1766
+ 0xF3A3 => 0x7A25,
1767
+ 0xF3C2 => 0x7A44,
1768
+ 0xF3A4 => 0x7A26,
1769
+ 0xF3C3 => 0x7A45,
1770
+ 0xF3A5 => 0x7A27,
1771
+ 0xF3C4 => 0x7A46,
1772
+ 0xF3A6 => 0x7A28,
1773
+ 0xF3C5 => 0x7A47,
1774
+ 0xF3A7 => 0x7A29,
1775
+ 0xF3C6 => 0x7A48,
1776
+ 0xF3A8 => 0x7A2A,
1777
+ 0xF3C7 => 0x7A49,
1778
+ 0xF3A9 => 0x7A2B,
1779
+ 0xF3C8 => 0x7A4A,
1780
+ 0xF3AA => 0x7A2C,
1781
+ 0xF3C9 => 0x7A4B,
1782
+ 0xF3AB => 0x7A2D,
1783
+ 0xF3CA => 0x7A4C,
1784
+ 0xF3AC => 0x7A2E,
1785
+ 0xF3CB => 0x7A4D,
1786
+ 0xF3CC => 0x7A4E,
1787
+ 0xF3D8 => 0x7A5A,
1788
+ 0xF3CD => 0x7A4F,
1789
+ 0xF3D9 => 0x7A5B,
1790
+ 0xF3CE => 0x7A50,
1791
+ 0xF3DA => 0x7A5C,
1792
+ 0xF7D2 => 0x7854,
1793
+ 0xF3DB => 0x7A5D,
1794
+ 0xF7D3 => 0x7855,
1795
+ 0xF3DC => 0x7A5E,
1796
+ 0xF7D4 => 0x7856,
1797
+ 0xF3DD => 0x7A5F,
1798
+ 0xF7D5 => 0x7857,
1799
+ 0xF3DE => 0x7A60,
1800
+ 0xF7D6 => 0x7858,
1801
+ 0xF3DF => 0x7A61,
1802
+ 0xF7D7 => 0x7859,
1803
+ 0xF3E0 => 0x7A62,
1804
+ 0xF7D8 => 0x785A,
1805
+ 0xF3E1 => 0x7A63,
1806
+ 0xF7D9 => 0x785B,
1807
+ 0xF3E2 => 0x7A64,
1808
+ 0xF7DA => 0x785C,
1809
+ 0xF3E3 => 0x7A65,
1810
+ 0xF7DB => 0x785D,
1811
+ 0xF3E4 => 0x7A66,
1812
+ 0xF7DC => 0x785E,
1813
+ 0xF3E5 => 0x7A67,
1814
+ 0xF7DD => 0x785F,
1815
+ 0xF3E6 => 0x7A68,
1816
+ 0xF7DE => 0x7860,
1817
+ 0xF3E7 => 0x7A69,
1818
+ 0xF7DF => 0x7861,
1819
+ 0xF3E8 => 0x7A6A,
1820
+ 0xF7E0 => 0x7862,
1821
+ 0xF3E9 => 0x7A6B,
1822
+ 0xF7E1 => 0x7863,
1823
+ 0xF3EA => 0x7A6C,
1824
+ 0xF7E2 => 0x7864,
1825
+ 0xF3EB => 0x7A6D,
1826
+ 0xF7E3 => 0x7865,
1827
+ 0xF3EC => 0x7A6E,
1828
+ 0xF7E4 => 0x7866,
1829
+ 0xF3ED => 0x7A6F,
1830
+ 0xF3CF => 0x7A51,
1831
+ 0xF3EE => 0x7A70,
1832
+ 0xF3D0 => 0x7A52,
1833
+ 0xF3EF => 0x7A71,
1834
+ 0xF3D1 => 0x7A53,
1835
+ 0xF3F0 => 0x7A72,
1836
+ 0xF3D2 => 0x7A54,
1837
+ 0xF3F1 => 0x7A73,
1838
+ 0xF3D3 => 0x7A55,
1839
+ 0xF3F2 => 0x7A74,
1840
+ 0xF3D4 => 0x7A56,
1841
+ 0xF3F3 => 0x7A75,
1842
+ 0xF3D5 => 0x7A57,
1843
+ 0xF3F4 => 0x7A76,
1844
+ 0xF3D6 => 0x7A58,
1845
+ 0xF3F5 => 0x7A77,
1846
+ 0xF3D7 => 0x7A59,
1847
+ 0xF3F6 => 0x7A78,
1848
+ 0xF3F7 => 0x7A79,
1849
+ 0xF459 => 0x7B3A,
1850
+ 0xF3F8 => 0x7A7A,
1851
+ 0xF45A => 0x7B3B,
1852
+ 0xF3F9 => 0x7A7B,
1853
+ 0xF45B => 0x7B3C,
1854
+ 0xF3FA => 0x7A7C,
1855
+ 0xF45C => 0x7B3D,
1856
+ 0xF3FB => 0x7A7D,
1857
+ 0xF45D => 0x7B3E,
1858
+ 0xF3FC => 0x7A7E,
1859
+ 0xF45E => 0x7B3F,
1860
+ 0xF440 => 0x7B21,
1861
+ 0xF45F => 0x7B40,
1862
+ 0xF441 => 0x7B22,
1863
+ 0xF460 => 0x7B41,
1864
+ 0xF442 => 0x7B23,
1865
+ 0xF461 => 0x7B42,
1866
+ 0xF443 => 0x7B24,
1867
+ 0xF462 => 0x7B43,
1868
+ 0xF444 => 0x7B25,
1869
+ 0xF463 => 0x7B44,
1870
+ 0xF445 => 0x7B26,
1871
+ 0xF464 => 0x7B45,
1872
+ 0xF446 => 0x7B27,
1873
+ 0xF465 => 0x7B46,
1874
+ 0xF447 => 0x7B28,
1875
+ 0xF466 => 0x7B47,
1876
+ 0xF448 => 0x7B29,
1877
+ 0xF467 => 0x7B48,
1878
+ 0xF449 => 0x7B2A,
1879
+ 0xF468 => 0x7B49,
1880
+ 0xF44A => 0x7B2B,
1881
+ 0xF469 => 0x7B4A,
1882
+ 0xF44B => 0x7B2C,
1883
+ 0xF46A => 0x7B4B,
1884
+ 0xF44C => 0x7B2D,
1885
+ 0xF46B => 0x7B4C,
1886
+ 0xF44D => 0x7B2E,
1887
+ 0xF46C => 0x7B4D,
1888
+ 0xF44E => 0x7B2F,
1889
+ 0xF46D => 0x7B4E,
1890
+ 0xF44F => 0x7B30,
1891
+ 0xF46E => 0x7B4F,
1892
+ 0xF450 => 0x7B31,
1893
+ 0xF46F => 0x7B50,
1894
+ 0xF451 => 0x7B32,
1895
+ 0xF470 => 0x7B51,
1896
+ 0xF452 => 0x7B33,
1897
+ 0xF471 => 0x7B52,
1898
+ 0xF453 => 0x7B34,
1899
+ 0xF472 => 0x7B53,
1900
+ 0xF454 => 0x7B35,
1901
+ 0xF473 => 0x7B54,
1902
+ 0xF455 => 0x7B36,
1903
+ 0xF474 => 0x7B55,
1904
+ 0xF456 => 0x7B37,
1905
+ 0xF475 => 0x7B56,
1906
+ 0xF457 => 0x7B38,
1907
+ 0xF476 => 0x7B57,
1908
+ 0xF458 => 0x7B39,
1909
+ 0xF477 => 0x7B58,
1910
+ 0xF478 => 0x7B59,
1911
+ 0xF479 => 0x7B5A,
1912
+ 0xF47A => 0x7B5B,
1913
+ 0xF47B => 0x7B5C,
1914
+ 0xF47C => 0x7B5D,
1915
+ 0xF47D => 0x7B5E,
1916
+ 0xF47E => 0x7B5F,
1917
+ 0xF480 => 0x7B60,
1918
+ 0xF481 => 0x7B61,
1919
+ 0xF482 => 0x7B62,
1920
+ 0xF483 => 0x7B63,
1921
+ 0xF484 => 0x7B64,
1922
+ 0xF485 => 0x7B65,
1923
+ 0xF486 => 0x7B66,
1924
+ 0xF487 => 0x7B67,
1925
+ 0xF488 => 0x7B68,
1926
+ 0xF489 => 0x7B69,
1927
+ 0xF48A => 0x7B6A,
1928
+ 0xF48B => 0x7B6B,
1929
+ 0xF48C => 0x7B6C,
1930
+ 0xF48D => 0x7B6D
1931
+ }