jpmobile 0.1.6 → 1.0.0.pre

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.
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
+ }