egalite 0.0.1 → 0.0.2
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/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/Rakefile +1 -0
- data/egalite.gemspec +24 -0
- data/lib/egalite/auth/basic.rb +32 -0
- data/lib/egalite/blank.rb +53 -0
- data/lib/egalite/errorconsole.rb +77 -0
- data/lib/egalite/helper.rb +251 -0
- data/lib/egalite/keitai/keitai.rb +107 -0
- data/lib/egalite/keitai/ketai.rb +11 -0
- data/lib/egalite/keitai/rack/ketai/carrier/abstract.rb +131 -0
- data/lib/egalite/keitai/rack/ketai/carrier/au.rb +78 -0
- data/lib/egalite/keitai/rack/ketai/carrier/docomo.rb +80 -0
- data/lib/egalite/keitai/rack/ketai/carrier/emoji/ausjisstrtoemojiid.rb +1391 -0
- data/lib/egalite/keitai/rack/ketai/carrier/emoji/docomosjisstrtoemojiid.rb +759 -0
- data/lib/egalite/keitai/rack/ketai/carrier/emoji/emojidata.rb +836 -0
- data/lib/egalite/keitai/rack/ketai/carrier/emoji/softbankutf8strtoemojiid.rb +1119 -0
- data/lib/egalite/keitai/rack/ketai/carrier/emoji/softbankwebcodetoutf8str.rb +499 -0
- data/lib/egalite/keitai/rack/ketai/carrier/iphone.rb +8 -0
- data/lib/egalite/keitai/rack/ketai/carrier/softbank.rb +82 -0
- data/lib/egalite/keitai/rack/ketai/carrier.rb +17 -0
- data/lib/egalite/keitai/rack/ketai/middleware.rb +24 -0
- data/lib/egalite/m17n.rb +193 -0
- data/lib/egalite/route.rb +231 -0
- data/lib/egalite/sendmail.rb +222 -0
- data/lib/egalite/sequel_helper.rb +20 -0
- data/lib/egalite/session.rb +132 -0
- data/lib/egalite/stringify_hash.rb +63 -0
- data/lib/egalite/support.rb +35 -0
- data/lib/egalite/template.rb +287 -0
- data/lib/egalite/version.rb +3 -0
- data/lib/egalite.rb +744 -0
- metadata +35 -3
@@ -0,0 +1,499 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
|
3
|
+
# SoftBankウェブコードとSoftbank-UTF8バイナリとのマッピング
|
4
|
+
# 参考 http://creation.mb.softbank.jp/web/web_pic_06.html
|
5
|
+
|
6
|
+
# format("0x%03X", Rack::Ketai::Carrier::Softbank::Filter::WEBCODE_TO_EMOJI['G!'])
|
7
|
+
# => [0xE001]].pack('U*') (男の子)
|
8
|
+
|
9
|
+
module Rack
|
10
|
+
module Ketai
|
11
|
+
module Carrier
|
12
|
+
class Softbank
|
13
|
+
class Filter
|
14
|
+
WEBCODE_TO_EMOJI = {
|
15
|
+
'G!' => [0xE001].pack('U*'),
|
16
|
+
'G"' => [0xE002].pack('U*'),
|
17
|
+
'G#' => [0xE003].pack('U*'),
|
18
|
+
'G$' => [0xE004].pack('U*'),
|
19
|
+
'G%' => [0xE005].pack('U*'),
|
20
|
+
'G&' => [0xE006].pack('U*'),
|
21
|
+
'G\'' => [0xE007].pack('U*'),
|
22
|
+
'G(' => [0xE008].pack('U*'),
|
23
|
+
'G)' => [0xE009].pack('U*'),
|
24
|
+
'G*' => [0xE00A].pack('U*'),
|
25
|
+
'G+' => [0xE00B].pack('U*'),
|
26
|
+
'G,' => [0xE00C].pack('U*'),
|
27
|
+
'G-' => [0xE00D].pack('U*'),
|
28
|
+
'G.' => [0xE00E].pack('U*'),
|
29
|
+
'G/' => [0xE00F].pack('U*'),
|
30
|
+
'G0' => [0xE010].pack('U*'),
|
31
|
+
'G1' => [0xE011].pack('U*'),
|
32
|
+
'G2' => [0xE012].pack('U*'),
|
33
|
+
'G3' => [0xE013].pack('U*'),
|
34
|
+
'G4' => [0xE014].pack('U*'),
|
35
|
+
'G5' => [0xE015].pack('U*'),
|
36
|
+
'G6' => [0xE016].pack('U*'),
|
37
|
+
'G7' => [0xE017].pack('U*'),
|
38
|
+
'G8' => [0xE018].pack('U*'),
|
39
|
+
'G9' => [0xE019].pack('U*'),
|
40
|
+
'G:' => [0xE01A].pack('U*'),
|
41
|
+
'G;' => [0xE01B].pack('U*'),
|
42
|
+
'G<' => [0xE01C].pack('U*'),
|
43
|
+
'G=' => [0xE01D].pack('U*'),
|
44
|
+
'G>' => [0xE01E].pack('U*'),
|
45
|
+
'G?' => [0xE01F].pack('U*'),
|
46
|
+
'G@' => [0xE020].pack('U*'),
|
47
|
+
'GA' => [0xE021].pack('U*'),
|
48
|
+
'GB' => [0xE022].pack('U*'),
|
49
|
+
'GC' => [0xE023].pack('U*'),
|
50
|
+
'GD' => [0xE024].pack('U*'),
|
51
|
+
'GE' => [0xE025].pack('U*'),
|
52
|
+
'GF' => [0xE026].pack('U*'),
|
53
|
+
'GG' => [0xE027].pack('U*'),
|
54
|
+
'GH' => [0xE028].pack('U*'),
|
55
|
+
'GI' => [0xE029].pack('U*'),
|
56
|
+
'GJ' => [0xE02A].pack('U*'),
|
57
|
+
'GK' => [0xE02B].pack('U*'),
|
58
|
+
'GL' => [0xE02C].pack('U*'),
|
59
|
+
'GM' => [0xE02D].pack('U*'),
|
60
|
+
'GN' => [0xE02E].pack('U*'),
|
61
|
+
'GO' => [0xE02F].pack('U*'),
|
62
|
+
'GP' => [0xE030].pack('U*'),
|
63
|
+
'GQ' => [0xE031].pack('U*'),
|
64
|
+
'GR' => [0xE032].pack('U*'),
|
65
|
+
'GS' => [0xE033].pack('U*'),
|
66
|
+
'GT' => [0xE034].pack('U*'),
|
67
|
+
'GU' => [0xE035].pack('U*'),
|
68
|
+
'GV' => [0xE036].pack('U*'),
|
69
|
+
'GW' => [0xE037].pack('U*'),
|
70
|
+
'GX' => [0xE038].pack('U*'),
|
71
|
+
'GY' => [0xE039].pack('U*'),
|
72
|
+
'GZ' => [0xE03A].pack('U*'),
|
73
|
+
'G[' => [0xE03B].pack('U*'),
|
74
|
+
'G\\' => [0xE03C].pack('U*'),
|
75
|
+
'G]' => [0xE03D].pack('U*'),
|
76
|
+
'G^' => [0xE03E].pack('U*'),
|
77
|
+
'G_' => [0xE03F].pack('U*'),
|
78
|
+
'G`' => [0xE040].pack('U*'),
|
79
|
+
'Ga' => [0xE041].pack('U*'),
|
80
|
+
'Gb' => [0xE042].pack('U*'),
|
81
|
+
'Gc' => [0xE043].pack('U*'),
|
82
|
+
'Gd' => [0xE044].pack('U*'),
|
83
|
+
'Ge' => [0xE045].pack('U*'),
|
84
|
+
'Gf' => [0xE046].pack('U*'),
|
85
|
+
'Gg' => [0xE047].pack('U*'),
|
86
|
+
'Gh' => [0xE048].pack('U*'),
|
87
|
+
'Gi' => [0xE049].pack('U*'),
|
88
|
+
'Gj' => [0xE04A].pack('U*'),
|
89
|
+
'Gk' => [0xE04B].pack('U*'),
|
90
|
+
'Gl' => [0xE04C].pack('U*'),
|
91
|
+
'Gm' => [0xE04D].pack('U*'),
|
92
|
+
'Gn' => [0xE04E].pack('U*'),
|
93
|
+
'Go' => [0xE04F].pack('U*'),
|
94
|
+
'Gp' => [0xE050].pack('U*'),
|
95
|
+
'Gq' => [0xE051].pack('U*'),
|
96
|
+
'Gr' => [0xE052].pack('U*'),
|
97
|
+
'Gs' => [0xE053].pack('U*'),
|
98
|
+
'Gt' => [0xE054].pack('U*'),
|
99
|
+
'Gu' => [0xE055].pack('U*'),
|
100
|
+
'Gv' => [0xE056].pack('U*'),
|
101
|
+
'Gw' => [0xE057].pack('U*'),
|
102
|
+
'Gx' => [0xE058].pack('U*'),
|
103
|
+
'Gy' => [0xE059].pack('U*'),
|
104
|
+
'Gz' => [0xE05A].pack('U*'),
|
105
|
+
'E!' => [0xE101].pack('U*'),
|
106
|
+
'E"' => [0xE102].pack('U*'),
|
107
|
+
'E#' => [0xE103].pack('U*'),
|
108
|
+
'E$' => [0xE104].pack('U*'),
|
109
|
+
'E%' => [0xE105].pack('U*'),
|
110
|
+
'E&' => [0xE106].pack('U*'),
|
111
|
+
'E\'' => [0xE107].pack('U*'),
|
112
|
+
'E(' => [0xE108].pack('U*'),
|
113
|
+
'E)' => [0xE109].pack('U*'),
|
114
|
+
'E*' => [0xE10A].pack('U*'),
|
115
|
+
'E+' => [0xE10B].pack('U*'),
|
116
|
+
'E,' => [0xE10C].pack('U*'),
|
117
|
+
'E-' => [0xE10D].pack('U*'),
|
118
|
+
'E.' => [0xE10E].pack('U*'),
|
119
|
+
'E/' => [0xE10F].pack('U*'),
|
120
|
+
'E0' => [0xE110].pack('U*'),
|
121
|
+
'E1' => [0xE111].pack('U*'),
|
122
|
+
'E2' => [0xE112].pack('U*'),
|
123
|
+
'E3' => [0xE113].pack('U*'),
|
124
|
+
'E4' => [0xE114].pack('U*'),
|
125
|
+
'E5' => [0xE115].pack('U*'),
|
126
|
+
'E6' => [0xE116].pack('U*'),
|
127
|
+
'E7' => [0xE117].pack('U*'),
|
128
|
+
'E8' => [0xE118].pack('U*'),
|
129
|
+
'E9' => [0xE119].pack('U*'),
|
130
|
+
'E:' => [0xE11A].pack('U*'),
|
131
|
+
'E;' => [0xE11B].pack('U*'),
|
132
|
+
'E<' => [0xE11C].pack('U*'),
|
133
|
+
'E=' => [0xE11D].pack('U*'),
|
134
|
+
'E>' => [0xE11E].pack('U*'),
|
135
|
+
'E?' => [0xE11F].pack('U*'),
|
136
|
+
'E@' => [0xE120].pack('U*'),
|
137
|
+
'EA' => [0xE121].pack('U*'),
|
138
|
+
'EB' => [0xE122].pack('U*'),
|
139
|
+
'EC' => [0xE123].pack('U*'),
|
140
|
+
'ED' => [0xE124].pack('U*'),
|
141
|
+
'EE' => [0xE125].pack('U*'),
|
142
|
+
'EF' => [0xE126].pack('U*'),
|
143
|
+
'EG' => [0xE127].pack('U*'),
|
144
|
+
'EH' => [0xE128].pack('U*'),
|
145
|
+
'EI' => [0xE129].pack('U*'),
|
146
|
+
'EJ' => [0xE12A].pack('U*'),
|
147
|
+
'EK' => [0xE12B].pack('U*'),
|
148
|
+
'EL' => [0xE12C].pack('U*'),
|
149
|
+
'EM' => [0xE12D].pack('U*'),
|
150
|
+
'EN' => [0xE12E].pack('U*'),
|
151
|
+
'EO' => [0xE12F].pack('U*'),
|
152
|
+
'EP' => [0xE130].pack('U*'),
|
153
|
+
'EQ' => [0xE131].pack('U*'),
|
154
|
+
'ER' => [0xE132].pack('U*'),
|
155
|
+
'ES' => [0xE133].pack('U*'),
|
156
|
+
'ET' => [0xE134].pack('U*'),
|
157
|
+
'EU' => [0xE135].pack('U*'),
|
158
|
+
'EV' => [0xE136].pack('U*'),
|
159
|
+
'EW' => [0xE137].pack('U*'),
|
160
|
+
'EX' => [0xE138].pack('U*'),
|
161
|
+
'EY' => [0xE139].pack('U*'),
|
162
|
+
'EZ' => [0xE13A].pack('U*'),
|
163
|
+
'E[' => [0xE13B].pack('U*'),
|
164
|
+
'E\\' => [0xE13C].pack('U*'),
|
165
|
+
'E]' => [0xE13D].pack('U*'),
|
166
|
+
'E^' => [0xE13E].pack('U*'),
|
167
|
+
'E_' => [0xE13F].pack('U*'),
|
168
|
+
'E`' => [0xE140].pack('U*'),
|
169
|
+
'Ea' => [0xE141].pack('U*'),
|
170
|
+
'Eb' => [0xE142].pack('U*'),
|
171
|
+
'Ec' => [0xE143].pack('U*'),
|
172
|
+
'Ed' => [0xE144].pack('U*'),
|
173
|
+
'Ee' => [0xE145].pack('U*'),
|
174
|
+
'Ef' => [0xE146].pack('U*'),
|
175
|
+
'Eg' => [0xE147].pack('U*'),
|
176
|
+
'Eh' => [0xE148].pack('U*'),
|
177
|
+
'Ei' => [0xE149].pack('U*'),
|
178
|
+
'Ej' => [0xE14A].pack('U*'),
|
179
|
+
'Ek' => [0xE14B].pack('U*'),
|
180
|
+
'El' => [0xE14C].pack('U*'),
|
181
|
+
'Em' => [0xE14D].pack('U*'),
|
182
|
+
'En' => [0xE14E].pack('U*'),
|
183
|
+
'Eo' => [0xE14F].pack('U*'),
|
184
|
+
'Ep' => [0xE150].pack('U*'),
|
185
|
+
'Eq' => [0xE151].pack('U*'),
|
186
|
+
'Er' => [0xE152].pack('U*'),
|
187
|
+
'Es' => [0xE153].pack('U*'),
|
188
|
+
'Et' => [0xE154].pack('U*'),
|
189
|
+
'Eu' => [0xE155].pack('U*'),
|
190
|
+
'Ev' => [0xE156].pack('U*'),
|
191
|
+
'Ew' => [0xE157].pack('U*'),
|
192
|
+
'Ex' => [0xE158].pack('U*'),
|
193
|
+
'Ey' => [0xE159].pack('U*'),
|
194
|
+
'Ez' => [0xE15A].pack('U*'),
|
195
|
+
'F!' => [0xE201].pack('U*'),
|
196
|
+
'F"' => [0xE202].pack('U*'),
|
197
|
+
'F#' => [0xE203].pack('U*'),
|
198
|
+
'F$' => [0xE204].pack('U*'),
|
199
|
+
'F%' => [0xE205].pack('U*'),
|
200
|
+
'F&' => [0xE206].pack('U*'),
|
201
|
+
'F\'' => [0xE207].pack('U*'),
|
202
|
+
'F(' => [0xE208].pack('U*'),
|
203
|
+
'F)' => [0xE209].pack('U*'),
|
204
|
+
'F*' => [0xE20A].pack('U*'),
|
205
|
+
'F+' => [0xE20B].pack('U*'),
|
206
|
+
'F,' => [0xE20C].pack('U*'),
|
207
|
+
'F-' => [0xE20D].pack('U*'),
|
208
|
+
'F.' => [0xE20E].pack('U*'),
|
209
|
+
'F/' => [0xE20F].pack('U*'),
|
210
|
+
'F0' => [0xE210].pack('U*'),
|
211
|
+
'F1' => [0xE211].pack('U*'),
|
212
|
+
'F2' => [0xE212].pack('U*'),
|
213
|
+
'F3' => [0xE213].pack('U*'),
|
214
|
+
'F4' => [0xE214].pack('U*'),
|
215
|
+
'F5' => [0xE215].pack('U*'),
|
216
|
+
'F6' => [0xE216].pack('U*'),
|
217
|
+
'F7' => [0xE217].pack('U*'),
|
218
|
+
'F8' => [0xE218].pack('U*'),
|
219
|
+
'F9' => [0xE219].pack('U*'),
|
220
|
+
'F:' => [0xE21A].pack('U*'),
|
221
|
+
'F;' => [0xE21B].pack('U*'),
|
222
|
+
'F<' => [0xE21C].pack('U*'),
|
223
|
+
'F=' => [0xE21D].pack('U*'),
|
224
|
+
'F>' => [0xE21E].pack('U*'),
|
225
|
+
'F?' => [0xE21F].pack('U*'),
|
226
|
+
'F@' => [0xE220].pack('U*'),
|
227
|
+
'FA' => [0xE221].pack('U*'),
|
228
|
+
'FB' => [0xE222].pack('U*'),
|
229
|
+
'FC' => [0xE223].pack('U*'),
|
230
|
+
'FD' => [0xE224].pack('U*'),
|
231
|
+
'FE' => [0xE225].pack('U*'),
|
232
|
+
'FF' => [0xE226].pack('U*'),
|
233
|
+
'FG' => [0xE227].pack('U*'),
|
234
|
+
'FH' => [0xE228].pack('U*'),
|
235
|
+
'FI' => [0xE229].pack('U*'),
|
236
|
+
'FJ' => [0xE22A].pack('U*'),
|
237
|
+
'FK' => [0xE22B].pack('U*'),
|
238
|
+
'FL' => [0xE22C].pack('U*'),
|
239
|
+
'FM' => [0xE22D].pack('U*'),
|
240
|
+
'FN' => [0xE22E].pack('U*'),
|
241
|
+
'FO' => [0xE22F].pack('U*'),
|
242
|
+
'FP' => [0xE230].pack('U*'),
|
243
|
+
'FQ' => [0xE231].pack('U*'),
|
244
|
+
'FR' => [0xE232].pack('U*'),
|
245
|
+
'FS' => [0xE233].pack('U*'),
|
246
|
+
'FT' => [0xE234].pack('U*'),
|
247
|
+
'FU' => [0xE235].pack('U*'),
|
248
|
+
'FV' => [0xE236].pack('U*'),
|
249
|
+
'FW' => [0xE237].pack('U*'),
|
250
|
+
'FX' => [0xE238].pack('U*'),
|
251
|
+
'FY' => [0xE239].pack('U*'),
|
252
|
+
'FZ' => [0xE23A].pack('U*'),
|
253
|
+
'F[' => [0xE23B].pack('U*'),
|
254
|
+
'F\\' => [0xE23C].pack('U*'),
|
255
|
+
'F]' => [0xE23D].pack('U*'),
|
256
|
+
'F^' => [0xE23E].pack('U*'),
|
257
|
+
'F_' => [0xE23F].pack('U*'),
|
258
|
+
'F`' => [0xE240].pack('U*'),
|
259
|
+
'Fa' => [0xE241].pack('U*'),
|
260
|
+
'Fb' => [0xE242].pack('U*'),
|
261
|
+
'Fc' => [0xE243].pack('U*'),
|
262
|
+
'Fd' => [0xE244].pack('U*'),
|
263
|
+
'Fe' => [0xE245].pack('U*'),
|
264
|
+
'Ff' => [0xE246].pack('U*'),
|
265
|
+
'Fg' => [0xE247].pack('U*'),
|
266
|
+
'Fh' => [0xE248].pack('U*'),
|
267
|
+
'Fi' => [0xE249].pack('U*'),
|
268
|
+
'Fj' => [0xE24A].pack('U*'),
|
269
|
+
'Fk' => [0xE24B].pack('U*'),
|
270
|
+
'Fl' => [0xE24C].pack('U*'),
|
271
|
+
'Fm' => [0xE24D].pack('U*'),
|
272
|
+
'Fn' => [0xE24E].pack('U*'),
|
273
|
+
'Fo' => [0xE24F].pack('U*'),
|
274
|
+
'Fp' => [0xE250].pack('U*'),
|
275
|
+
'Fq' => [0xE251].pack('U*'),
|
276
|
+
'Fr' => [0xE252].pack('U*'),
|
277
|
+
'Fs' => [0xE253].pack('U*'),
|
278
|
+
'O!' => [0xE301].pack('U*'),
|
279
|
+
'O"' => [0xE302].pack('U*'),
|
280
|
+
'O#' => [0xE303].pack('U*'),
|
281
|
+
'O$' => [0xE304].pack('U*'),
|
282
|
+
'O%' => [0xE305].pack('U*'),
|
283
|
+
'O&' => [0xE306].pack('U*'),
|
284
|
+
'O\'' => [0xE307].pack('U*'),
|
285
|
+
'O(' => [0xE308].pack('U*'),
|
286
|
+
'O)' => [0xE309].pack('U*'),
|
287
|
+
'O*' => [0xE30A].pack('U*'),
|
288
|
+
'O+' => [0xE30B].pack('U*'),
|
289
|
+
'O,' => [0xE30C].pack('U*'),
|
290
|
+
'O-' => [0xE30D].pack('U*'),
|
291
|
+
'O.' => [0xE30E].pack('U*'),
|
292
|
+
'O/' => [0xE30F].pack('U*'),
|
293
|
+
'O0' => [0xE310].pack('U*'),
|
294
|
+
'O1' => [0xE311].pack('U*'),
|
295
|
+
'O2' => [0xE312].pack('U*'),
|
296
|
+
'O3' => [0xE313].pack('U*'),
|
297
|
+
'O4' => [0xE314].pack('U*'),
|
298
|
+
'O5' => [0xE315].pack('U*'),
|
299
|
+
'O6' => [0xE316].pack('U*'),
|
300
|
+
'O7' => [0xE317].pack('U*'),
|
301
|
+
'O8' => [0xE318].pack('U*'),
|
302
|
+
'O9' => [0xE319].pack('U*'),
|
303
|
+
'O:' => [0xE31A].pack('U*'),
|
304
|
+
'O;' => [0xE31B].pack('U*'),
|
305
|
+
'O<' => [0xE31C].pack('U*'),
|
306
|
+
'O=' => [0xE31D].pack('U*'),
|
307
|
+
'O>' => [0xE31E].pack('U*'),
|
308
|
+
'O?' => [0xE31F].pack('U*'),
|
309
|
+
'O@' => [0xE320].pack('U*'),
|
310
|
+
'OA' => [0xE321].pack('U*'),
|
311
|
+
'OB' => [0xE322].pack('U*'),
|
312
|
+
'OC' => [0xE323].pack('U*'),
|
313
|
+
'OD' => [0xE324].pack('U*'),
|
314
|
+
'OE' => [0xE325].pack('U*'),
|
315
|
+
'OF' => [0xE326].pack('U*'),
|
316
|
+
'OG' => [0xE327].pack('U*'),
|
317
|
+
'OH' => [0xE328].pack('U*'),
|
318
|
+
'OI' => [0xE329].pack('U*'),
|
319
|
+
'OJ' => [0xE32A].pack('U*'),
|
320
|
+
'OK' => [0xE32B].pack('U*'),
|
321
|
+
'OL' => [0xE32C].pack('U*'),
|
322
|
+
'OM' => [0xE32D].pack('U*'),
|
323
|
+
'ON' => [0xE32E].pack('U*'),
|
324
|
+
'OO' => [0xE32F].pack('U*'),
|
325
|
+
'OP' => [0xE330].pack('U*'),
|
326
|
+
'OQ' => [0xE331].pack('U*'),
|
327
|
+
'OR' => [0xE332].pack('U*'),
|
328
|
+
'OS' => [0xE333].pack('U*'),
|
329
|
+
'OT' => [0xE334].pack('U*'),
|
330
|
+
'OU' => [0xE335].pack('U*'),
|
331
|
+
'OV' => [0xE336].pack('U*'),
|
332
|
+
'OW' => [0xE337].pack('U*'),
|
333
|
+
'OX' => [0xE338].pack('U*'),
|
334
|
+
'OY' => [0xE339].pack('U*'),
|
335
|
+
'OZ' => [0xE33A].pack('U*'),
|
336
|
+
'O[' => [0xE33B].pack('U*'),
|
337
|
+
'O\\' => [0xE33C].pack('U*'),
|
338
|
+
'O]' => [0xE33D].pack('U*'),
|
339
|
+
'O^' => [0xE33E].pack('U*'),
|
340
|
+
'O_' => [0xE33F].pack('U*'),
|
341
|
+
'O`' => [0xE340].pack('U*'),
|
342
|
+
'Oa' => [0xE341].pack('U*'),
|
343
|
+
'Ob' => [0xE342].pack('U*'),
|
344
|
+
'Oc' => [0xE343].pack('U*'),
|
345
|
+
'Od' => [0xE344].pack('U*'),
|
346
|
+
'Oe' => [0xE345].pack('U*'),
|
347
|
+
'Of' => [0xE346].pack('U*'),
|
348
|
+
'Og' => [0xE347].pack('U*'),
|
349
|
+
'Oh' => [0xE348].pack('U*'),
|
350
|
+
'Oi' => [0xE349].pack('U*'),
|
351
|
+
'Oj' => [0xE34A].pack('U*'),
|
352
|
+
'Ok' => [0xE34B].pack('U*'),
|
353
|
+
'Ol' => [0xE34C].pack('U*'),
|
354
|
+
'Om' => [0xE34D].pack('U*'),
|
355
|
+
'P!' => [0xE401].pack('U*'),
|
356
|
+
'P"' => [0xE402].pack('U*'),
|
357
|
+
'P#' => [0xE403].pack('U*'),
|
358
|
+
'P$' => [0xE404].pack('U*'),
|
359
|
+
'P%' => [0xE405].pack('U*'),
|
360
|
+
'P&' => [0xE406].pack('U*'),
|
361
|
+
'P\'' => [0xE407].pack('U*'),
|
362
|
+
'P(' => [0xE408].pack('U*'),
|
363
|
+
'P)' => [0xE409].pack('U*'),
|
364
|
+
'P*' => [0xE40A].pack('U*'),
|
365
|
+
'P+' => [0xE40B].pack('U*'),
|
366
|
+
'P,' => [0xE40C].pack('U*'),
|
367
|
+
'P-' => [0xE40D].pack('U*'),
|
368
|
+
'P.' => [0xE40E].pack('U*'),
|
369
|
+
'P/' => [0xE40F].pack('U*'),
|
370
|
+
'P0' => [0xE410].pack('U*'),
|
371
|
+
'P1' => [0xE411].pack('U*'),
|
372
|
+
'P2' => [0xE412].pack('U*'),
|
373
|
+
'P3' => [0xE413].pack('U*'),
|
374
|
+
'P4' => [0xE414].pack('U*'),
|
375
|
+
'P5' => [0xE415].pack('U*'),
|
376
|
+
'P6' => [0xE416].pack('U*'),
|
377
|
+
'P7' => [0xE417].pack('U*'),
|
378
|
+
'P8' => [0xE418].pack('U*'),
|
379
|
+
'P9' => [0xE419].pack('U*'),
|
380
|
+
'P:' => [0xE41A].pack('U*'),
|
381
|
+
'P;' => [0xE41B].pack('U*'),
|
382
|
+
'P<' => [0xE41C].pack('U*'),
|
383
|
+
'P=' => [0xE41D].pack('U*'),
|
384
|
+
'P>' => [0xE41E].pack('U*'),
|
385
|
+
'P?' => [0xE41F].pack('U*'),
|
386
|
+
'P@' => [0xE420].pack('U*'),
|
387
|
+
'PA' => [0xE421].pack('U*'),
|
388
|
+
'PB' => [0xE422].pack('U*'),
|
389
|
+
'PC' => [0xE423].pack('U*'),
|
390
|
+
'PD' => [0xE424].pack('U*'),
|
391
|
+
'PE' => [0xE425].pack('U*'),
|
392
|
+
'PF' => [0xE426].pack('U*'),
|
393
|
+
'PG' => [0xE427].pack('U*'),
|
394
|
+
'PH' => [0xE428].pack('U*'),
|
395
|
+
'PI' => [0xE429].pack('U*'),
|
396
|
+
'PJ' => [0xE42A].pack('U*'),
|
397
|
+
'PK' => [0xE42B].pack('U*'),
|
398
|
+
'PL' => [0xE42C].pack('U*'),
|
399
|
+
'PM' => [0xE42D].pack('U*'),
|
400
|
+
'PN' => [0xE42E].pack('U*'),
|
401
|
+
'PO' => [0xE42F].pack('U*'),
|
402
|
+
'PP' => [0xE430].pack('U*'),
|
403
|
+
'PQ' => [0xE431].pack('U*'),
|
404
|
+
'PR' => [0xE432].pack('U*'),
|
405
|
+
'PS' => [0xE433].pack('U*'),
|
406
|
+
'PT' => [0xE434].pack('U*'),
|
407
|
+
'PU' => [0xE435].pack('U*'),
|
408
|
+
'PV' => [0xE436].pack('U*'),
|
409
|
+
'PW' => [0xE437].pack('U*'),
|
410
|
+
'PX' => [0xE438].pack('U*'),
|
411
|
+
'PY' => [0xE439].pack('U*'),
|
412
|
+
'PZ' => [0xE43A].pack('U*'),
|
413
|
+
'P[' => [0xE43B].pack('U*'),
|
414
|
+
'P\\' => [0xE43C].pack('U*'),
|
415
|
+
'P]' => [0xE43D].pack('U*'),
|
416
|
+
'P^' => [0xE43E].pack('U*'),
|
417
|
+
'P_' => [0xE43F].pack('U*'),
|
418
|
+
'P`' => [0xE440].pack('U*'),
|
419
|
+
'Pa' => [0xE441].pack('U*'),
|
420
|
+
'Pb' => [0xE442].pack('U*'),
|
421
|
+
'Pc' => [0xE443].pack('U*'),
|
422
|
+
'Pd' => [0xE444].pack('U*'),
|
423
|
+
'Pe' => [0xE445].pack('U*'),
|
424
|
+
'Pf' => [0xE446].pack('U*'),
|
425
|
+
'Pg' => [0xE447].pack('U*'),
|
426
|
+
'Ph' => [0xE448].pack('U*'),
|
427
|
+
'Pi' => [0xE449].pack('U*'),
|
428
|
+
'Pj' => [0xE44A].pack('U*'),
|
429
|
+
'Pk' => [0xE44B].pack('U*'),
|
430
|
+
'Pl' => [0xE44C].pack('U*'),
|
431
|
+
'Q!' => [0xE501].pack('U*'),
|
432
|
+
'Q"' => [0xE502].pack('U*'),
|
433
|
+
'Q#' => [0xE503].pack('U*'),
|
434
|
+
'Q$' => [0xE504].pack('U*'),
|
435
|
+
'Q%' => [0xE505].pack('U*'),
|
436
|
+
'Q&' => [0xE506].pack('U*'),
|
437
|
+
'Q\'' => [0xE507].pack('U*'),
|
438
|
+
'Q(' => [0xE508].pack('U*'),
|
439
|
+
'Q)' => [0xE509].pack('U*'),
|
440
|
+
'Q*' => [0xE50A].pack('U*'),
|
441
|
+
'Q+' => [0xE50B].pack('U*'),
|
442
|
+
'Q,' => [0xE50C].pack('U*'),
|
443
|
+
'Q-' => [0xE50D].pack('U*'),
|
444
|
+
'Q.' => [0xE50E].pack('U*'),
|
445
|
+
'Q/' => [0xE50F].pack('U*'),
|
446
|
+
'Q0' => [0xE510].pack('U*'),
|
447
|
+
'Q1' => [0xE511].pack('U*'),
|
448
|
+
'Q2' => [0xE512].pack('U*'),
|
449
|
+
'Q3' => [0xE513].pack('U*'),
|
450
|
+
'Q4' => [0xE514].pack('U*'),
|
451
|
+
'Q5' => [0xE515].pack('U*'),
|
452
|
+
'Q6' => [0xE516].pack('U*'),
|
453
|
+
'Q7' => [0xE517].pack('U*'),
|
454
|
+
'Q8' => [0xE518].pack('U*'),
|
455
|
+
'Q9' => [0xE519].pack('U*'),
|
456
|
+
'Q:' => [0xE51A].pack('U*'),
|
457
|
+
'Q;' => [0xE51B].pack('U*'),
|
458
|
+
'Q<' => [0xE51C].pack('U*'),
|
459
|
+
'Q=' => [0xE51D].pack('U*'),
|
460
|
+
'Q>' => [0xE51E].pack('U*'),
|
461
|
+
'Q?' => [0xE51F].pack('U*'),
|
462
|
+
'Q@' => [0xE520].pack('U*'),
|
463
|
+
'QA' => [0xE521].pack('U*'),
|
464
|
+
'QB' => [0xE522].pack('U*'),
|
465
|
+
'QC' => [0xE523].pack('U*'),
|
466
|
+
'QD' => [0xE524].pack('U*'),
|
467
|
+
'QE' => [0xE525].pack('U*'),
|
468
|
+
'QF' => [0xE526].pack('U*'),
|
469
|
+
'QG' => [0xE527].pack('U*'),
|
470
|
+
'QH' => [0xE528].pack('U*'),
|
471
|
+
'QI' => [0xE529].pack('U*'),
|
472
|
+
'QJ' => [0xE52A].pack('U*'),
|
473
|
+
'QK' => [0xE52B].pack('U*'),
|
474
|
+
'QL' => [0xE52C].pack('U*'),
|
475
|
+
'QM' => [0xE52D].pack('U*'),
|
476
|
+
'QN' => [0xE52E].pack('U*'),
|
477
|
+
'QO' => [0xE52F].pack('U*'),
|
478
|
+
'QP' => [0xE530].pack('U*'),
|
479
|
+
'QQ' => [0xE531].pack('U*'),
|
480
|
+
'QR' => [0xE532].pack('U*'),
|
481
|
+
'QS' => [0xE533].pack('U*'),
|
482
|
+
'QT' => [0xE534].pack('U*'),
|
483
|
+
'QU' => [0xE535].pack('U*'),
|
484
|
+
'QV' => [0xE536].pack('U*'),
|
485
|
+
'QW' => [0xE537].pack('U*'),
|
486
|
+
}
|
487
|
+
|
488
|
+
# 1.8系、1.9系 互換性維持のため
|
489
|
+
if RUBY_VERSION >= '1.9.0'
|
490
|
+
def EMOJI_TO_EMOJIID.index(val)
|
491
|
+
key(val)
|
492
|
+
end
|
493
|
+
end
|
494
|
+
|
495
|
+
end
|
496
|
+
end
|
497
|
+
end
|
498
|
+
end
|
499
|
+
end
|
@@ -0,0 +1,82 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
# -*- coding: utf-8 -*-
|
3
|
+
require 'scanf'
|
4
|
+
|
5
|
+
module Rack::Ketai::Carrier
|
6
|
+
class Softbank < Abstract
|
7
|
+
# Semulator はウェブコンテンツビューアのUA
|
8
|
+
USER_AGENT_REGEXP = /^(?:SoftBank|Semulator)/
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
class Rack::Ketai::Carrier::Softbank
|
13
|
+
class Filter < ::Rack::Ketai::Carrier::Abstract::Filter
|
14
|
+
|
15
|
+
def inbound(env)
|
16
|
+
# softbank UTF-8バイナリ(Unicode) -> 絵文字ID表記
|
17
|
+
request = Rack::Request.new(env)
|
18
|
+
|
19
|
+
request.params # 最低でも1回呼んでないと query_stringが未設定
|
20
|
+
|
21
|
+
converter = lambda do |value|
|
22
|
+
# まずウェブコードを変換
|
23
|
+
value = value.gsub(/\x1B\$([GEFOPQ])([\x21-\x7E]+)\x0F/u) do |match|
|
24
|
+
head = $1
|
25
|
+
$2.split(//u).collect { |b| WEBCODE_TO_EMOJI[head+b]}
|
26
|
+
end
|
27
|
+
|
28
|
+
# UTF-8バイナリから絵文字IDに
|
29
|
+
value.gsub(emoji_utf8_regexp) do |match|
|
30
|
+
format("[e:%03X]", EMOJI_TO_EMOJIID[match])
|
31
|
+
end
|
32
|
+
end
|
33
|
+
deep_apply(request.env["rack.request.query_hash"], &converter)
|
34
|
+
deep_apply(request.env["rack.request.form_hash"], &converter)
|
35
|
+
|
36
|
+
# 文字コード変換
|
37
|
+
super(request.env)
|
38
|
+
end
|
39
|
+
|
40
|
+
def outbound(status, headers, body)
|
41
|
+
status, headers, body = super
|
42
|
+
|
43
|
+
return [status, headers, body] unless body[0]
|
44
|
+
|
45
|
+
body = body.collect do |str|
|
46
|
+
str.gsub(/\[e:([0-9A-F]{3})\]/) do |match|
|
47
|
+
emojiid = $1.scanf('%X').first
|
48
|
+
utf8str = EMOJIID_TO_EMOJI[emojiid]
|
49
|
+
if utf8str
|
50
|
+
# 絵文字があるので差替え
|
51
|
+
utf8str.split(//u).collect { |b| "\x1B$"+WEBCODE_TO_EMOJI.index(b)+"\x0F" }.join("")
|
52
|
+
else
|
53
|
+
# 絵文字がないので代替文字列
|
54
|
+
emoji_data = EMOJI_DATA[emojiid]
|
55
|
+
emoji_data[:fallback] || emoji_data[:name] || '〓'
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
content = (body.is_a?(Array) ? body[0] : body).to_s
|
61
|
+
headers['Content-Length'] = (content.respond_to?(:bytesize) ? content.bytesize : content.size).to_s if headers.member?('Content-Length')
|
62
|
+
|
63
|
+
[status, headers, body]
|
64
|
+
end
|
65
|
+
|
66
|
+
private
|
67
|
+
# 絵文字コード -> 絵文字ID 対応表から、絵文字コード検出用の正規表現をつくる
|
68
|
+
# 複数の絵文字の組み合わせのものを前におくことで
|
69
|
+
# そっちを優先的にマッチさせる
|
70
|
+
def emoji_utf8_regexp
|
71
|
+
@emoji_utf8_regexp if @emoji_utf8_regexp
|
72
|
+
@emoji_utf8_regexp = Regexp.union(*EMOJI_TO_EMOJIID.keys.sort_by{ |codes| - codes.size }.collect{ |utf8str| Regexp.new(Regexp.escape(utf8str), nil)})
|
73
|
+
end
|
74
|
+
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
# 変換テーブル読み込み
|
79
|
+
require 'rack/ketai/carrier/emoji/softbankwebcodetoutf8str'
|
80
|
+
require 'rack/ketai/carrier/emoji/softbankutf8strtoemojiid'
|
81
|
+
|
82
|
+
Rack::Ketai::Carrier::Softbank.filters = [Rack::Ketai::Carrier::Softbank::Filter.instance]
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module Rack::Ketai::Carrier
|
2
|
+
|
3
|
+
autoload :Abstract, 'rack/ketai/carrier/abstract'
|
4
|
+
autoload :Docomo, 'rack/ketai/carrier/docomo'
|
5
|
+
autoload :Au, 'rack/ketai/carrier/au'
|
6
|
+
autoload :Softbank, 'rack/ketai/carrier/softbank'
|
7
|
+
autoload :IPhone, 'rack/ketai/carrier/iphone'
|
8
|
+
|
9
|
+
def self.load(env)
|
10
|
+
constants.each do |const|
|
11
|
+
c = self.const_get(const)
|
12
|
+
return c.new(env) if c::USER_AGENT_REGEXP && env['HTTP_USER_AGENT'] =~ c::USER_AGENT_REGEXP
|
13
|
+
end
|
14
|
+
nil
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
class Rack::Ketai::Middleware
|
2
|
+
|
3
|
+
def initialize(app)
|
4
|
+
@app = app
|
5
|
+
end
|
6
|
+
|
7
|
+
def call(env)
|
8
|
+
carrier = Rack::Ketai::Carrier.load(env)
|
9
|
+
return @app.call(env) unless carrier
|
10
|
+
|
11
|
+
apply(env, carrier)
|
12
|
+
end
|
13
|
+
|
14
|
+
private
|
15
|
+
def apply(env, carrier)
|
16
|
+
env = env.clone
|
17
|
+
env['rack.ketai'] = carrier
|
18
|
+
env = carrier.filters.inject(env) { |env, filter| filter.inbound(env) }
|
19
|
+
ret = @app.call(env)
|
20
|
+
ret[2] = ret[2].body if ret[2].is_a?(Rack::Response)
|
21
|
+
carrier.filters.reverse.inject(ret) { |r, filter| filter.outbound(*r) }
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|