Class: Rack::Ketai::Carrier::Softbank::Filter

Inherits:
Abstract::Filter show all
Defined in:
lib/egalite/keitai/rack/ketai/carrier/emoji/softbankutf8strtoemojiid.rb,
lib/egalite/keitai/rack/ketai/carrier/emoji/softbankwebcodetoutf8str.rb,
lib/egalite/keitai/rack/ketai/carrier/softbank.rb

Constant Summary collapse

EMOJI_TO_EMOJIID =
{
  "" => 0xB0E,
  "" => 0x820,
  "" => 0xB9A,
  "" => 0xB69,
  "" => 0x51C,
  "" => 0xB0C,
  "" => 0x81F,
  "" => 0xB99,
  "" => 0xB57,
  "" => 0x51B,
  "" => 0x4B8,
  "" => 0x01F,
  "" => 0x82A,
  "" => 0x1B1,
  "" => 0xB9C,
  "" => 0xB0B,
  "" => 0x01E,
  "" => 0x81C,
  "" => 0xB9B,
  "" => 0xB0A,
  "" => 0x007,
  "" => 0x805,
  "" => 0x971,
  "" => 0x021,
  "" => 0x964,
  "" => 0x80B,
  "" => 0xAF9,
  "" => 0x331,
  "" => 0x804,
  "" => 0x038,
  "" => 0x984,
  "" => 0x020,
  "" => 0x81B,
  "" => 0xAF8,
  "" => 0x4BE,
  "" => 0x023,
  "" => 0x967,
  "" => 0x4E0,
  "" => 0xAFB,
  "" => 0x1C6,
  "" => 0x4BD,
  "" => 0x022,
  "" => 0x966,
  "" => 0xB32,
  "" => 0xAFA,
  "" => 0x51D,
  "" => 0x345,
  "" => 0x802,
  "" => 0x025,
  "" => 0x969,
  "" => 0x7DB,
  "" => 0xAF2,
  "" => 0x005,
  "" => 0x4BF,
  "" => 0x024,
  "" => 0x968,
  "" => 0x80C,
  "" => 0xAF0,
  "" => 0x51E,
  "" => 0x321,
  "" => 0x4C4,
  "" => 0x96B,
  "" => 0x027,
  "" => 0x80D,
  "" => 0xAF3,
  "" => 0x51F,
  "" => 0x343,
  "" => 0x4C0,
  "" => 0x049,
  "" => 0x96A,
  "" => 0x026,
  "" => 0x7D7,
  "" => 0xAF1,
  "" => 0x347,
  "" => 0x4E5,
  "" => 0x043,
  "" => 0x029,
  "" => 0x96C,
  "" => 0x7EE,
  "" => 0xAFD,
  "" => 0x824,
  "" => 0x328,
  "" => 0x4C5,
  "" => 0x028,
  "" => 0x017,
  "" => 0xAFC,
  "" => 0x963,
  "" => 0x7DC,
  "" => 0x527,
  "" => 0x33F,
  "" => 0x4E7,
  "" => 0x96D,
  "" => 0x00A,
  "" => 0xAFF,
  "" => 0x4D2,
  "" => 0xB26,
  "" => 0x324,
  "" => 0x4E6,
  "" => 0x040,
  "" => 0xAFE,
  "" => 0x961,
  "" => 0x513,
  "" => 0x7EB,
  "" => 0x045,
  "" => 0x194,
  "" => 0x4E9,
  "" => 0x02B,
  "" => 0x05B,
  "" => 0x008,
  "" => 0x512,
  "" => 0xB34,
  "" => 0x4D3,
  "" => 0x342,
  "" => 0x4E8,
  "" => 0x041,
  "" => 0x96E,
  "" => 0x00C,
  "" => 0x4F7,
  "" => 0xB33,
  "" => 0x04D,
  "" => 0x33B,
  "" => 0x4EB,
  "" => 0x053,
  "" => 0x02D,
  "" => 0x826,
  "" => 0x509,
  "" => 0x03D,
  "" => 0x332,
  "" => 0x4EA,
  "" => 0x052,
  "" => 0x02C,
  "" => 0x00D,
  "" => 0x825,
  "" => 0xB35,
  "" => 0x047,
  "" => 0x32F,
  "" => 0x4ED,
  "" => 0x7F0,
  "" => 0x055,
  "" => 0x02F,
  "" => 0x4BB,
  "" => 0x004,
  "" => 0x828,
  "" => 0x32E,
  "" => 0x4EC,
  "" => 0x054,
  "" => 0x4B0,
  "" => 0x02E,
  "" => 0xB59,
  "" => 0x508,
  "" => 0x325,
  "" => 0x1A4,
  "" => 0xB24,
  "" => 0x031,
  "" => 0x511,
  "" => 0x7EC,
  "" => 0x505,
  "" => 0x048,
  "" => 0x326,
  "" => 0x4EE,
  "" => 0x4C1,
  "" => 0x056,
  "" => 0x4B2,
  "" => 0x030,
  "" => 0x4D6,
  "" => 0x33A,
  "" => 0x1A6,
  "" => 0xB61,
  "" => 0x4C2,
  "" => 0x033,
  "" => 0x970,
  "" => 0x4C3,
  "" => 0x821,
  "" => 0x322,
  "" => 0x1A5,
  "" => 0xB19,
  "" => 0x803,
  "" => 0x032,
  "" => 0x96F,
  "" => 0x7F5,
  "" => 0x507,
  "" => 0x339,
  "" => 0x1A8,
  "" => 0x52C,
  "" => 0xB25,
  "" => 0xB43,
  "" => 0x035,
  "" => 0xE1C,
  "" => 0x514,
  "" => 0x987,
  "" => 0x334,
  "" => 0x1A7,
  "" => 0xB62,
  "" => 0x034,
  "" => 0x800,
  "" => 0x52F,
  "" => 0x044,
  "" => 0x338,
  "" => 0x1AA,
  "" => 0x529,
  "" => 0x50A,
  "" => 0x037,
  "" => 0xB82,
  "" => 0xB87,
  "" => 0x336,
  "" => 0x1A9,
  "" => 0x52E,
  "" => 0xB1F,
  "" => 0xB1E,
  "" => 0x036,
  "" => 0x813,
  "" => 0xB86,
  "" => 0x838,
  "" => 0x4C6,
  "" => 0x329,
  "" => 0xB58,
  "" => 0x32D,
  "" => 0x965,
  "" => 0x816,
  "" => 0xB27,
  "" => 0x1AB,
  "" => 0x526,
  "" => 0xB20,
  "" => 0x516,
  "" => 0x33D,
  "" => 0x00B,
  "" => 0x815,
  "" => 0xB42,
  "" => 0x1B6,
  "" => 0x19B,
  "" => 0x341,
  "" => 0xB1C,
  "" => 0x53E,
  "" => 0x190,
  "" => 0x980,
  "" => 0x4DE,
  "" => 0xB2D,
  "" => 0x1B5,
  "" => 0x327,
  "" => 0xB1A,
  "" => 0x517,
  "" => 0x32C,
  "" => 0x818,
  "" => 0x500,
  "" => 0xB29,
  "" => 0x1C8,
  "" => 0x823,
  "" => 0x1C4,
  "" => 0xB1D,
  "" => 0xB2B,
  "" => 0x191,
  "" => 0x981,
  "" => 0x83A,
  "" => 0x531,
  "" => 0x1C7,
  "" => 0x19C,
  "" => 0x344,
  "" => 0xB1B,
  "" => 0x50F,
  "" => 0x192,
  "" => 0x982,
  "" => 0x839,
  "" => 0x4DF,
  "" => 0x82B,
  "" => 0x19E,
  "" => 0x1BF,
  "" => 0x530,
  "" => 0x35B,
  "" => 0x1BA,
  "" => 0x983,
  "" => 0x4B5,
  "" => 0x1B4,
  "" => 0x82C,
  "" => 0x19D,
  "" => 0x1C5,
  "" => 0x53C,
  "" => 0x193,
  "" => 0x1C9,
  "" => 0x962,
  "" => 0xB5E,
  "" => 0xB23,
  "" => 0x4CC,
  "" => 0x7ED,
  "" => 0xB37,
  "" => 0x4D5,
  "" => 0xB9E,
  "" => 0x1CB,
  "" => 0x001,
  "" => 0x7F6,
  "" => 0xE78,
  "" => 0x4CF,
  "" => 0x1B0,
  "" => 0xB36,
  "" => 0x4D4,
  "" => 0xB9D,
  "" => 0x1CA,
  "" => 0x003,
  "" => 0x7F7,
  "" => 0xE77,
  "" => 0xB56,
  "" => 0xB39,
  "" => 0x4D8,
  "" => 0xBA0,
  "" => 0x1CD,
  "" => 0x523,
  "" => 0x002,
  "" => 0x506,
  "" => 0xE7A,
  "" => 0x4D1,
  "" => 0xB38,
  "" => 0x4D7,
  "" => 0xB9F,
  "" => 0x1CC,
  "" => 0x4EF,
  "" => 0x7E7,
  "" => 0xE79,
  "" => 0x000,
  "" => 0x827,
  "" => 0xB3B,
  "" => 0x196,
  "" => 0x351,
  "" => 0x1CF,
  "" => 0x528,
  "" => 0x4B3,
  "" => 0xE7C,
  "" => 0x009,
  "" => 0x04E,
  "" => 0xB3A,
  "" => 0x195,
  "" => 0xBA1,
  "" => 0x1CE,
  "" => 0x525,
  "" => 0x1A1,
  "" => 0xE7B,
  "" => 0x012,
  "" => 0x4F5,
  "" => 0xB63,
  "" => 0x198,
  "" => 0x829,
  "" => 0x1D1,
  "" => 0xB96,
  "" => 0x4B4,
  "" => 0x1B8,
  "" => 0x510,
  "" => 0xB3C,
  "" => 0x197,
  "" => 0x352,
  "" => 0x1D0,
  "" => 0x538,
  "" => 0x4B6,
  "" => 0xE7D,
  "" => 0x1AF,
  "" => 0xB67,
  "" => 0x4D9,
  "" => 0x358,
  "" => 0x1D3,
  "" => 0xB98,
  "" => 0x7D9,
  "" => 0x4BA,
  "" => 0x1C1,
  "" => 0xBA3,
  "" => 0x199,
  "" => 0x353,
  "" => 0x1D2,
  "" => 0xB97,
  "" => 0xB85,
  "" => 0x1C0,
  "" => 0x4B9,
  "" => 0x82F,
  "" => 0x4F0,
  "" => 0x1A2,
  "" => 0x1D5,
  "" => 0xB94,
  "" => 0x515,
  "" => 0x1C2,
  "" => 0x7E6,
  "" => 0x82E,
  "" => 0x4DA,
  "" => 0x1A0,
  "" => 0x1D4,
  "" => 0xB93,
  "" => 0x4CA,
  "" => 0x1B7,
  "" => 0x4B7,
  "" => 0x042,
  "" => 0x831,
  "" => 0x4F2,
  "" => 0x7DD,
  "" => 0x1D7,
  "" => 0x7D5,
  "" => 0x1BC,
  "" => 0x03F,
  "" => 0x830,
  "" => 0x808,
  "" => 0x7D6,
  "" => 0x1D6,
  "" => 0x357,
  "" => 0x1C3,
  "" => 0x7EF,
  "" => 0x833,
  "" => 0xB10,
  "" => 0x7DE,
  "" => 0x50C,
  "" => 0x7D3,
  "" => 0x1AE,
  "" => 0x330,
  "" => 0x832,
  "" => 0x814,
  "" => 0x80E,
  "" => 0x50B,
  "" => 0x7D2,
  "" => 0x1B2,
  "" => 0x335,
  "" => 0x835,
  "" => 0xB12,
  "" => 0x7F1,
  "" => 0x50E,
  "" => 0x7DA,
  "" => 0x4F6,
  "" => 0x320,
  "" => 0x834,
  "" => 0xB11,
  "" => 0x7E5,
  "" => 0x50D,
  "" => 0x7D1,
  "" => 0x1B3,
  "" => 0x323,
  "" => 0x837,
  "" => 0xB14,
  "" => 0x7F3,
  "" => 0xB2A,
  "" => 0x1BD,
  "" => 0x537,
  "" => 0x836,
  "" => 0xB13,
  "" => 0x7F2,
  "" => 0x553,
  "" => 0x7D4,
  "" => 0x53B,
  "" => 0x4F4,
  "" => 0x7FE,
  "" => 0xE71,
  "" => 0x7E4,
  "" => 0x4BC,
  "" => 0xB3E,
  "" => 0xB16,
  "" => 0x7F4,
  "" => 0xE70,
  "" => 0x1BE,
  "" => 0x960,
  "" => 0xB3D,
  "" => 0xB15,
  "" => 0x7E2,
  "" => 0xE73,
  "" => 0x7E9,
  "" => 0x7FA,
  "" => 0xB81,
  "" => 0xB68,
  "" => 0x00F,
  "" => 0x7E0,
  "" => 0xE72,
  "" => 0x7EA,
  "" => 0x7FB,
  "" => 0xB3F,
  "" => 0xB60,
  "" => 0xB17,
  "" => 0xE75,
  "" => 0x7E3,
  "" => 0x807,
  "" => 0xB2F,
  "" => 0xB5B,
  "" => 0x7FD,
  "" => 0x518,
  "" => 0xE74,
  "" => 0x7DF,
  "" => 0xB31,
  "" => 0xB5D,
  "" => 0xB04,
  "" => 0x81E,
  "" => 0xB41,
  "" => 0xB45,
  "" => 0x51A,
  "" => 0xE76,
  "" => 0xB09,
  "" => 0x81D,
  "" => 0xB40,
  "" => 0xB44,
  "" => 0x519,
}
EMOJIID_TO_EMOJI =

単にEMOJI_TO_EMOJIID#index を使うと、 1つの絵文字が複数のIDに割り当てられている(DoCoMo SJIS-F97A など)場合 見つからなくなる 逆にEMOJIID_TO_EMOJIだけだと複数絵文字の組み合わせによるものがめんどくさい(たぶん)

{
  0x041 => "",
  0x7EE => "",
  0x1CA => "",
  0x353 => "",
  0x830 => "",
  0x000 => "",
  0x51E => "",
  0xB42 => "",
  0x042 => "",
  0x7EF => "",
  0x1CB => "",
  0x4DD => "",
  0x831 => "",
  0x001 => "",
  0x51F => "",
  0xB43 => "",
  0x043 => "",
  0x7F0 => "",
  0x1CC => "",
  0x4DE => "",
  0xB85 => "",
  0x832 => "",
  0x002 => "",
  0xB44 => "",
  0x044 => "",
  0x7F1 => "",
  0x1CD => "",
  0x4DF => "",
  0xB86 => "",
  0x833 => "",
  0x003 => "",
  0xB45 => "",
  0x045 => "",
  0x7F2 => "",
  0x1CE => "",
  0x357 => "",
  0x4E0 => "",
  0xB04 => "",
  0xB87 => "",
  0x834 => "",
  0x004 => "",
  0xB46 => "",
  0x046 => "",
  0x7F3 => "",
  0x1CF => "",
  0x358 => "",
  0x835 => "",
  0x005 => "",
  0x523 => "",
  0x047 => "",
  0x7F4 => "",
  0x1D0 => "",
  0x359 => "",
  0x836 => "",
  0x524 => "",
  0x048 => "",
  0x7F5 => "",
  0xB8A => "",
  0x1D1 => "",
  0x35A => "",
  0x4E3 => "",
  0x837 => "",
  0x007 => "",
  0x190 => "",
  0x525 => "",
  0x049 => "",
  0x7F6 => "",
  0x1D2 => "",
  0x35B => "",
  0x838 => "",
  0x008 => "",
  0x191 => "",
  0x526 => "",
  0x980 => "",
  0x7F7 => "",
  0x1D3 => "",
  0x4E5 => "",
  0xB09 => "",
  0x839 => "",
  0x009 => "",
  0x527 => "",
  0x192 => "",
  0x981 => "",
  0x7F8 => "",
  0xB8D => "",
  0x1D4 => "",
  0xE1C => "",
  0x4E6 => "",
  0xB0A => "",
  0x83A => "",
  0x00A => "",
  0x528 => "",
  0x193 => "",
  0x982 => "",
  0x7F9 => "",
  0xB8E => "",
  0x4E7 => "",
  0xB0B => "",
  0x1D5 => "",
  0x00B => "",
  0x529 => "",
  0x194 => "",
  0x983 => "",
  0x7FA => "",
  0x4E8 => "",
  0xB0C => "",
  0x04D => "",
  0x1D6 => "",
  0x00C => "",
  0x52A => "",
  0x195 => "",
  0x984 => "",
  0x7FB => "",
  0xB90 => "",
  0x4E9 => "",
  0xB0D => "",
  0x04E => "",
  0x1D7 => "",
  0x00D => "",
  0x52B => "",
  0x196 => "",
  0x985 => "",
  0x4EA => "",
  0xB0E => "",
  0x1D8 => "",
  0x320 => "",
  0x52C => "",
  0x197 => "",
  0x986 => "",
  0x7FD => "",
  0xB92 => "",
  0x4EB => "",
  0xB0F => "",
  0x1D9 => "",
  0x00F => "",
  0x321 => "",
  0x52D => "",
  0x198 => "",
  0x051 => "",
  0x987 => "",
  0x7FE => "",
  0xB93 => "",
  0x4EC => "",
  0xB10 => "",
  0x010 => "",
  0x322 => "",
  0x52E => "",
  0x199 => "",
  0x052 => "",
  0x988 => "",
  0x7FF => "",
  0xB94 => "",
  0x4ED => "",
  0xB11 => "",
  0x1DB => "",
  0x323 => "",
  0x52F => "",
  0xB53 => "",
  0x053 => "",
  0xB95 => "",
  0x4EE => "",
  0xB12 => "",
  0x800 => "",
  0x012 => "",
  0x530 => "",
  0x19B => "",
  0x324 => "",
  0x054 => "",
  0xB96 => "",
  0x4EF => "",
  0xB13 => "",
  0x1DD => "",
  0x801 => "",
  0x013 => "",
  0x531 => "",
  0x19C => "",
  0x325 => "",
  0x055 => "",
  0xB97 => "",
  0x4F0 => "",
  0xB14 => "",
  0x802 => "",
  0x014 => "",
  0xB56 => "",
  0x19D => "",
  0x326 => "",
  0x056 => "",
  0xB98 => "",
  0xB15 => "",
  0x803 => "",
  0x4B0 => "",
  0xB57 => "",
  0x19E => "",
  0x327 => "",
  0xB99 => "",
  0x4F2 => "",
  0xB16 => "",
  0x1E0 => "",
  0x804 => "",
  0x4B1 => "",
  0x016 => "",
  0xB58 => "",
  0x328 => "",
  0xB9A => "",
  0xB17 => "",
  0x805 => "",
  0x4B2 => "",
  0x017 => "",
  0x535 => "",
  0xB59 => "",
  0x1A0 => "",
  0x329 => "",
  0xB9B => "",
  0x4F4 => "",
  0xB18 => "",
  0x4B3 => "",
  0x1A1 => "",
  0x32A => "",
  0xB9C => "",
  0x4F5 => "",
  0xB19 => "",
  0x807 => "",
  0x4B4 => "",
  0x537 => "",
  0xB5B => "",
  0x1A2 => "",
  0x32B => "",
  0xB9D => "",
  0x808 => "",
  0x4F6 => "",
  0xB1A => "",
  0x05B => "",
  0x4B5 => "",
  0x538 => "",
  0xB5C => "",
  0x32C => "",
  0xB9E => "",
  0x809 => "",
  0x4F7 => "",
  0xB1B => "",
  0x539 => "",
  0xB5D => "",
  0x1A4 => "",
  0x32D => "",
  0x4B6 => "",
  0xB9F => "",
  0x4F8 => "",
  0xB1C => "",
  0xB5E => "",
  0x1A5 => "",
  0xE70 => "",
  0x32E => "",
  0x4B7 => "",
  0x80B => "",
  0xB1D => "",
  0xBA0 => "",
  0x4F9 => "",
  0x53B => "",
  0xB5F => "",
  0x1A6 => "",
  0xE71 => "",
  0x32F => "",
  0x4B8 => "",
  0x80C => "",
  0xB1E => "",
  0xBA1 => "",
  0x01E => "",
  0xB60 => "",
  0x1A7 => "",
  0xE72 => "",
  0x330 => "",
  0x4B9 => "",
  0x53C => "",
  0x80D => "",
  0xB1F => "",
  0x01F => "",
  0xB61 => "",
  0x1A8 => "",
  0xE73 => "",
  0x331 => "",
  0x4BA => "",
  0x53D => "",
  0x80E => "",
  0xBA3 => "",
  0xB20 => "",
  0x020 => "",
  0x1A9 => "",
  0xE74 => "",
  0x332 => "",
  0x4BB => "",
  0x53E => "",
  0xB62 => "",
  0x021 => "",
  0x1AA => "",
  0xE75 => "",
  0x333 => "",
  0x4BC => "",
  0xB63 => "",
  0x022 => "",
  0x1AB => "",
  0xE76 => "",
  0x334 => "",
  0x4BD => "",
  0x540 => "",
  0xB64 => "",
  0x4FF => "",
  0xB23 => "",
  0x023 => "",
  0xE77 => "",
  0x335 => "",
  0x4BE => "",
  0x541 => "",
  0xB65 => "",
  0x500 => "",
  0xB24 => "",
  0x024 => "",
  0x7D1 => "",
  0xE78 => "",
  0x336 => "",
  0x4BF => "",
  0xB66 => "",
  0x813 => "",
  0x501 => "",
  0xB25 => "",
  0x025 => "",
  0x1AE => "",
  0x7D2 => "",
  0xE79 => "",
  0x337 => "",
  0x4C0 => "",
  0xB67 => "",
  0x814 => "",
  0x502 => "",
  0xB26 => "",
  0x026 => "",
  0x1AF => "",
  0x7D3 => "",
  0xE7A => "",
  0x338 => "",
  0x4C1 => "",
  0xB68 => "",
  0x815 => "",
  0x503 => "",
  0xB27 => "",
  0x027 => "",
  0x1B0 => "",
  0x7D4 => "",
  0xE7B => "",
  0x339 => "",
  0x4C2 => "",
  0x545 => "",
  0xB69 => "",
  0x816 => "",
  0x028 => "",
  0x1B1 => "",
  0x7D5 => "",
  0xE7C => "",
  0x33A => "",
  0x4C3 => "",
  0x546 => "",
  0x505 => "",
  0xB29 => "",
  0x029 => "",
  0x1B2 => "",
  0x7D6 => "",
  0xE7D => "",
  0x33B => "",
  0x4C4 => "",
  0x547 => "",
  0xB6B => "",
  0x818 => "",
  0x506 => "",
  0xB2A => "",
  0x02A => "",
  0x960 => "",
  0x7D7 => "",
  0x33C => "",
  0x4C5 => "",
  0x548 => "",
  0xB6C => "",
  0x1B3 => "",
  0x507 => "",
  0xB2B => "",
  0x02B => "",
  0x961 => "",
  0x33D => "",
  0x4C6 => "",
  0xB6D => "",
  0x1B4 => "",
  0x81A => "",
  0x508 => "",
  0x02C => "",
  0x962 => "",
  0x7D9 => "",
  0x33E => "",
  0x54A => "",
  0xB6E => "",
  0x1B5 => "",
  0x81B => "",
  0x509 => "",
  0xB2D => "",
  0x02D => "",
  0x963 => "",
  0x7DA => "",
  0x33F => "",
  0x54B => "",
  0xB6F => "",
  0x1B6 => "",
  0x81C => "",
  0x50A => "",
  0x02E => "",
  0x964 => "",
  0x7DB => "",
  0x340 => "",
  0xB70 => "",
  0x1B7 => "",
  0x81D => "",
  0x50B => "",
  0xB2F => "",
  0x02F => "",
  0x965 => "",
  0x7DC => "",
  0x341 => "",
  0x4CA => "",
  0x54D => "",
  0xB71 => "",
  0x1B8 => "",
  0x81E => "",
  0x50C => "",
  0x030 => "",
  0x966 => "",
  0x7DD => "",
  0x342 => "",
  0xB72 => "",
  0x81F => "",
  0x50D => "",
  0xB31 => "",
  0x031 => "",
  0x967 => "",
  0x7DE => "",
  0x343 => "",
  0x4CC => "",
  0xAF0 => "",
  0x54F => "",
  0xB73 => "",
  0x1BA => "",
  0x820 => "",
  0x50E => "",
  0xB32 => "",
  0x032 => "",
  0x968 => "",
  0x7DF => "",
  0x344 => "",
  0x4CD => "",
  0xAF1 => "",
  0xB74 => "",
  0x1BB => "",
  0x821 => "",
  0x50F => "",
  0xB33 => "",
  0x033 => "",
  0x969 => "",
  0xAF2 => "",
  0xB75 => "",
  0x1BC => "",
  0x7E0 => "",
  0x345 => "",
  0x510 => "",
  0xB34 => "",
  0x034 => "",
  0x96A => "",
  0x4CF => "",
  0xAF3 => "",
  0x552 => "",
  0xB76 => "",
  0x1BD => "",
  0x7E1 => "",
  0x346 => "",
  0x823 => "",
  0x511 => "",
  0xB35 => "",
  0x035 => "",
  0x96B => "",
  0xAF4 => "",
  0x553 => "",
  0xB77 => "",
  0x1BE => "",
  0x7E2 => "",
  0x347 => "",
  0x824 => "",
  0x512 => "",
  0xB36 => "",
  0x036 => "",
  0x96C => "",
  0x7E3 => "",
  0x4D1 => "",
  0xAF5 => "",
  0x1BF => "",
  0x348 => "",
  0x825 => "",
  0x513 => "",
  0xB37 => "",
  0x037 => "",
  0x96D => "",
  0x7E4 => "",
  0x4D2 => "",
  0x1C0 => "",
  0x349 => "",
  0x826 => "",
  0x514 => "",
  0xB38 => "",
  0x038 => "",
  0x96E => "",
  0x7E5 => "",
  0x4D3 => "",
  0x1C1 => "",
  0x34A => "",
  0x827 => "",
  0x515 => "",
  0xB39 => "",
  0x96F => "",
  0x7E6 => "",
  0x4D4 => "",
  0xAF8 => "",
  0x1C2 => "",
  0x34B => "",
  0x828 => "",
  0x516 => "",
  0xB3A => "",
  0x970 => "",
  0x7E7 => "",
  0x4D5 => "",
  0xAF9 => "",
  0x1C3 => "",
  0x34C => "",
  0x829 => "",
  0x517 => "",
  0xB3B => "",
  0x03B => "",
  0x971 => "",
  0x7E8 => "",
  0x4D6 => "",
  0xAFA => "",
  0x1C4 => "",
  0x34D => "",
  0x82A => "",
  0x518 => "",
  0xB3C => "",
  0x03C => "",
  0x7E9 => "",
  0xAFB => "",
  0x1C5 => "",
  0x34E => "",
  0x4D7 => "",
  0x82B => "",
  0x519 => "",
  0xB3D => "",
  0x03D => "",
  0x7EA => "",
  0xAFC => "",
  0x1C6 => "",
  0x34F => "",
  0x4D8 => "",
  0x82C => "",
  0xB3E => "",
  0x51A => "",
  0x03E => "",
  0x7EB => "",
  0xAFD => "",
  0x1C7 => "",
  0x350 => "",
  0x4D9 => "",
  0xB3F => "",
  0x51B => "",
  0x03F => "",
  0x7EC => "",
  0xB81 => "",
  0x1C8 => "",
  0x351 => "",
  0x4DA => "",
  0xAFE => "",
  0x82E => "",
  0xB40 => "",
  0x51C => "",
  0x040 => "",
  0x7ED => "",
  0xB82 => "",
  0x1C9 => "",
  0x352 => "",
  0x4DB => "",
  0xAFF => "",
  0x82F => "",
  0x51D => "",
  0xB41 => "",
}
WEBCODE_TO_EMOJI =
{
  'G!' => [0xE001].pack('U*'),
  'G"' => [0xE002].pack('U*'),
  'G#' => [0xE003].pack('U*'),
  'G$' => [0xE004].pack('U*'),
  'G%' => [0xE005].pack('U*'),
  'G&' => [0xE006].pack('U*'),
  'G\'' => [0xE007].pack('U*'),
  'G(' => [0xE008].pack('U*'),
  'G)' => [0xE009].pack('U*'),
  'G*' => [0xE00A].pack('U*'),
  'G+' => [0xE00B].pack('U*'),
  'G,' => [0xE00C].pack('U*'),
  'G-' => [0xE00D].pack('U*'),
  'G.' => [0xE00E].pack('U*'),
  'G/' => [0xE00F].pack('U*'),
  'G0' => [0xE010].pack('U*'),
  'G1' => [0xE011].pack('U*'),
  'G2' => [0xE012].pack('U*'),
  'G3' => [0xE013].pack('U*'),
  'G4' => [0xE014].pack('U*'),
  'G5' => [0xE015].pack('U*'),
  'G6' => [0xE016].pack('U*'),
  'G7' => [0xE017].pack('U*'),
  'G8' => [0xE018].pack('U*'),
  'G9' => [0xE019].pack('U*'),
  'G:' => [0xE01A].pack('U*'),
  'G;' => [0xE01B].pack('U*'),
  'G<' => [0xE01C].pack('U*'),
  'G=' => [0xE01D].pack('U*'),
  'G>' => [0xE01E].pack('U*'),
  'G?' => [0xE01F].pack('U*'),
  'G@' => [0xE020].pack('U*'),
  'GA' => [0xE021].pack('U*'),
  'GB' => [0xE022].pack('U*'),
  'GC' => [0xE023].pack('U*'),
  'GD' => [0xE024].pack('U*'),
  'GE' => [0xE025].pack('U*'),
  'GF' => [0xE026].pack('U*'),
  'GG' => [0xE027].pack('U*'),
  'GH' => [0xE028].pack('U*'),
  'GI' => [0xE029].pack('U*'),
  'GJ' => [0xE02A].pack('U*'),
  'GK' => [0xE02B].pack('U*'),
  'GL' => [0xE02C].pack('U*'),
  'GM' => [0xE02D].pack('U*'),
  'GN' => [0xE02E].pack('U*'),
  'GO' => [0xE02F].pack('U*'),
  'GP' => [0xE030].pack('U*'),
  'GQ' => [0xE031].pack('U*'),
  'GR' => [0xE032].pack('U*'),
  'GS' => [0xE033].pack('U*'),
  'GT' => [0xE034].pack('U*'),
  'GU' => [0xE035].pack('U*'),
  'GV' => [0xE036].pack('U*'),
  'GW' => [0xE037].pack('U*'),
  'GX' => [0xE038].pack('U*'),
  'GY' => [0xE039].pack('U*'),
  'GZ' => [0xE03A].pack('U*'),
  'G[' => [0xE03B].pack('U*'),
  'G\\' => [0xE03C].pack('U*'),
  'G]' => [0xE03D].pack('U*'),
  'G^' => [0xE03E].pack('U*'),
  'G_' => [0xE03F].pack('U*'),
  'G`' => [0xE040].pack('U*'),
  'Ga' => [0xE041].pack('U*'),
  'Gb' => [0xE042].pack('U*'),
  'Gc' => [0xE043].pack('U*'),
  'Gd' => [0xE044].pack('U*'),
  'Ge' => [0xE045].pack('U*'),
  'Gf' => [0xE046].pack('U*'),
  'Gg' => [0xE047].pack('U*'),
  'Gh' => [0xE048].pack('U*'),
  'Gi' => [0xE049].pack('U*'),
  'Gj' => [0xE04A].pack('U*'),
  'Gk' => [0xE04B].pack('U*'),
  'Gl' => [0xE04C].pack('U*'),
  'Gm' => [0xE04D].pack('U*'),
  'Gn' => [0xE04E].pack('U*'),
  'Go' => [0xE04F].pack('U*'),
  'Gp' => [0xE050].pack('U*'),
  'Gq' => [0xE051].pack('U*'),
  'Gr' => [0xE052].pack('U*'),
  'Gs' => [0xE053].pack('U*'),
  'Gt' => [0xE054].pack('U*'),
  'Gu' => [0xE055].pack('U*'),
  'Gv' => [0xE056].pack('U*'),
  'Gw' => [0xE057].pack('U*'),
  'Gx' => [0xE058].pack('U*'),
  'Gy' => [0xE059].pack('U*'),
  'Gz' => [0xE05A].pack('U*'),
  'E!' => [0xE101].pack('U*'),
  'E"' => [0xE102].pack('U*'),
  'E#' => [0xE103].pack('U*'),
  'E$' => [0xE104].pack('U*'),
  'E%' => [0xE105].pack('U*'),
  'E&' => [0xE106].pack('U*'),
  'E\'' => [0xE107].pack('U*'),
  'E(' => [0xE108].pack('U*'),
  'E)' => [0xE109].pack('U*'),
  'E*' => [0xE10A].pack('U*'),
  'E+' => [0xE10B].pack('U*'),
  'E,' => [0xE10C].pack('U*'),
  'E-' => [0xE10D].pack('U*'),
  'E.' => [0xE10E].pack('U*'),
  'E/' => [0xE10F].pack('U*'),
  'E0' => [0xE110].pack('U*'),
  'E1' => [0xE111].pack('U*'),
  'E2' => [0xE112].pack('U*'),
  'E3' => [0xE113].pack('U*'),
  'E4' => [0xE114].pack('U*'),
  'E5' => [0xE115].pack('U*'),
  'E6' => [0xE116].pack('U*'),
  'E7' => [0xE117].pack('U*'),
  'E8' => [0xE118].pack('U*'),
  'E9' => [0xE119].pack('U*'),
  'E:' => [0xE11A].pack('U*'),
  'E;' => [0xE11B].pack('U*'),
  'E<' => [0xE11C].pack('U*'),
  'E=' => [0xE11D].pack('U*'),
  'E>' => [0xE11E].pack('U*'),
  'E?' => [0xE11F].pack('U*'),
  'E@' => [0xE120].pack('U*'),
  'EA' => [0xE121].pack('U*'),
  'EB' => [0xE122].pack('U*'),
  'EC' => [0xE123].pack('U*'),
  'ED' => [0xE124].pack('U*'),
  'EE' => [0xE125].pack('U*'),
  'EF' => [0xE126].pack('U*'),
  'EG' => [0xE127].pack('U*'),
  'EH' => [0xE128].pack('U*'),
  'EI' => [0xE129].pack('U*'),
  'EJ' => [0xE12A].pack('U*'),
  'EK' => [0xE12B].pack('U*'),
  'EL' => [0xE12C].pack('U*'),
  'EM' => [0xE12D].pack('U*'),
  'EN' => [0xE12E].pack('U*'),
  'EO' => [0xE12F].pack('U*'),
  'EP' => [0xE130].pack('U*'),
  'EQ' => [0xE131].pack('U*'),
  'ER' => [0xE132].pack('U*'),
  'ES' => [0xE133].pack('U*'),
  'ET' => [0xE134].pack('U*'),
  'EU' => [0xE135].pack('U*'),
  'EV' => [0xE136].pack('U*'),
  'EW' => [0xE137].pack('U*'),
  'EX' => [0xE138].pack('U*'),
  'EY' => [0xE139].pack('U*'),
  'EZ' => [0xE13A].pack('U*'),
  'E[' => [0xE13B].pack('U*'),
  'E\\' => [0xE13C].pack('U*'),
  'E]' => [0xE13D].pack('U*'),
  'E^' => [0xE13E].pack('U*'),
  'E_' => [0xE13F].pack('U*'),
  'E`' => [0xE140].pack('U*'),
  'Ea' => [0xE141].pack('U*'),
  'Eb' => [0xE142].pack('U*'),
  'Ec' => [0xE143].pack('U*'),
  'Ed' => [0xE144].pack('U*'),
  'Ee' => [0xE145].pack('U*'),
  'Ef' => [0xE146].pack('U*'),
  'Eg' => [0xE147].pack('U*'),
  'Eh' => [0xE148].pack('U*'),
  'Ei' => [0xE149].pack('U*'),
  'Ej' => [0xE14A].pack('U*'),
  'Ek' => [0xE14B].pack('U*'),
  'El' => [0xE14C].pack('U*'),
  'Em' => [0xE14D].pack('U*'),
  'En' => [0xE14E].pack('U*'),
  'Eo' => [0xE14F].pack('U*'),
  'Ep' => [0xE150].pack('U*'),
  'Eq' => [0xE151].pack('U*'),
  'Er' => [0xE152].pack('U*'),
  'Es' => [0xE153].pack('U*'),
  'Et' => [0xE154].pack('U*'),
  'Eu' => [0xE155].pack('U*'),
  'Ev' => [0xE156].pack('U*'),
  'Ew' => [0xE157].pack('U*'),
  'Ex' => [0xE158].pack('U*'),
  'Ey' => [0xE159].pack('U*'),
  'Ez' => [0xE15A].pack('U*'),
  'F!' => [0xE201].pack('U*'),
  'F"' => [0xE202].pack('U*'),
  'F#' => [0xE203].pack('U*'),
  'F$' => [0xE204].pack('U*'),
  'F%' => [0xE205].pack('U*'),
  'F&' => [0xE206].pack('U*'),
  'F\'' => [0xE207].pack('U*'),
  'F(' => [0xE208].pack('U*'),
  'F)' => [0xE209].pack('U*'),
  'F*' => [0xE20A].pack('U*'),
  'F+' => [0xE20B].pack('U*'),
  'F,' => [0xE20C].pack('U*'),
  'F-' => [0xE20D].pack('U*'),
  'F.' => [0xE20E].pack('U*'),
  'F/' => [0xE20F].pack('U*'),
  'F0' => [0xE210].pack('U*'),
  'F1' => [0xE211].pack('U*'),
  'F2' => [0xE212].pack('U*'),
  'F3' => [0xE213].pack('U*'),
  'F4' => [0xE214].pack('U*'),
  'F5' => [0xE215].pack('U*'),
  'F6' => [0xE216].pack('U*'),
  'F7' => [0xE217].pack('U*'),
  'F8' => [0xE218].pack('U*'),
  'F9' => [0xE219].pack('U*'),
  'F:' => [0xE21A].pack('U*'),
  'F;' => [0xE21B].pack('U*'),
  'F<' => [0xE21C].pack('U*'),
  'F=' => [0xE21D].pack('U*'),
  'F>' => [0xE21E].pack('U*'),
  'F?' => [0xE21F].pack('U*'),
  'F@' => [0xE220].pack('U*'),
  'FA' => [0xE221].pack('U*'),
  'FB' => [0xE222].pack('U*'),
  'FC' => [0xE223].pack('U*'),
  'FD' => [0xE224].pack('U*'),
  'FE' => [0xE225].pack('U*'),
  'FF' => [0xE226].pack('U*'),
  'FG' => [0xE227].pack('U*'),
  'FH' => [0xE228].pack('U*'),
  'FI' => [0xE229].pack('U*'),
  'FJ' => [0xE22A].pack('U*'),
  'FK' => [0xE22B].pack('U*'),
  'FL' => [0xE22C].pack('U*'),
  'FM' => [0xE22D].pack('U*'),
  'FN' => [0xE22E].pack('U*'),
  'FO' => [0xE22F].pack('U*'),
  'FP' => [0xE230].pack('U*'),
  'FQ' => [0xE231].pack('U*'),
  'FR' => [0xE232].pack('U*'),
  'FS' => [0xE233].pack('U*'),
  'FT' => [0xE234].pack('U*'),
  'FU' => [0xE235].pack('U*'),
  'FV' => [0xE236].pack('U*'),
  'FW' => [0xE237].pack('U*'),
  'FX' => [0xE238].pack('U*'),
  'FY' => [0xE239].pack('U*'),
  'FZ' => [0xE23A].pack('U*'),
  'F[' => [0xE23B].pack('U*'),
  'F\\' => [0xE23C].pack('U*'),
  'F]' => [0xE23D].pack('U*'),
  'F^' => [0xE23E].pack('U*'),
  'F_' => [0xE23F].pack('U*'),
  'F`' => [0xE240].pack('U*'),
  'Fa' => [0xE241].pack('U*'),
  'Fb' => [0xE242].pack('U*'),
  'Fc' => [0xE243].pack('U*'),
  'Fd' => [0xE244].pack('U*'),
  'Fe' => [0xE245].pack('U*'),
  'Ff' => [0xE246].pack('U*'),
  'Fg' => [0xE247].pack('U*'),
  'Fh' => [0xE248].pack('U*'),
  'Fi' => [0xE249].pack('U*'),
  'Fj' => [0xE24A].pack('U*'),
  'Fk' => [0xE24B].pack('U*'),
  'Fl' => [0xE24C].pack('U*'),
  'Fm' => [0xE24D].pack('U*'),
  'Fn' => [0xE24E].pack('U*'),
  'Fo' => [0xE24F].pack('U*'),
  'Fp' => [0xE250].pack('U*'),
  'Fq' => [0xE251].pack('U*'),
  'Fr' => [0xE252].pack('U*'),
  'Fs' => [0xE253].pack('U*'),
  'O!' => [0xE301].pack('U*'),
  'O"' => [0xE302].pack('U*'),
  'O#' => [0xE303].pack('U*'),
  'O$' => [0xE304].pack('U*'),
  'O%' => [0xE305].pack('U*'),
  'O&' => [0xE306].pack('U*'),
  'O\'' => [0xE307].pack('U*'),
  'O(' => [0xE308].pack('U*'),
  'O)' => [0xE309].pack('U*'),
  'O*' => [0xE30A].pack('U*'),
  'O+' => [0xE30B].pack('U*'),
  'O,' => [0xE30C].pack('U*'),
  'O-' => [0xE30D].pack('U*'),
  'O.' => [0xE30E].pack('U*'),
  'O/' => [0xE30F].pack('U*'),
  'O0' => [0xE310].pack('U*'),
  'O1' => [0xE311].pack('U*'),
  'O2' => [0xE312].pack('U*'),
  'O3' => [0xE313].pack('U*'),
  'O4' => [0xE314].pack('U*'),
  'O5' => [0xE315].pack('U*'),
  'O6' => [0xE316].pack('U*'),
  'O7' => [0xE317].pack('U*'),
  'O8' => [0xE318].pack('U*'),
  'O9' => [0xE319].pack('U*'),
  'O:' => [0xE31A].pack('U*'),
  'O;' => [0xE31B].pack('U*'),
  'O<' => [0xE31C].pack('U*'),
  'O=' => [0xE31D].pack('U*'),
  'O>' => [0xE31E].pack('U*'),
  'O?' => [0xE31F].pack('U*'),
  'O@' => [0xE320].pack('U*'),
  'OA' => [0xE321].pack('U*'),
  'OB' => [0xE322].pack('U*'),
  'OC' => [0xE323].pack('U*'),
  'OD' => [0xE324].pack('U*'),
  'OE' => [0xE325].pack('U*'),
  'OF' => [0xE326].pack('U*'),
  'OG' => [0xE327].pack('U*'),
  'OH' => [0xE328].pack('U*'),
  'OI' => [0xE329].pack('U*'),
  'OJ' => [0xE32A].pack('U*'),
  'OK' => [0xE32B].pack('U*'),
  'OL' => [0xE32C].pack('U*'),
  'OM' => [0xE32D].pack('U*'),
  'ON' => [0xE32E].pack('U*'),
  'OO' => [0xE32F].pack('U*'),
  'OP' => [0xE330].pack('U*'),
  'OQ' => [0xE331].pack('U*'),
  'OR' => [0xE332].pack('U*'),
  'OS' => [0xE333].pack('U*'),
  'OT' => [0xE334].pack('U*'),
  'OU' => [0xE335].pack('U*'),
  'OV' => [0xE336].pack('U*'),
  'OW' => [0xE337].pack('U*'),
  'OX' => [0xE338].pack('U*'),
  'OY' => [0xE339].pack('U*'),
  'OZ' => [0xE33A].pack('U*'),
  'O[' => [0xE33B].pack('U*'),
  'O\\' => [0xE33C].pack('U*'),
  'O]' => [0xE33D].pack('U*'),
  'O^' => [0xE33E].pack('U*'),
  'O_' => [0xE33F].pack('U*'),
  'O`' => [0xE340].pack('U*'),
  'Oa' => [0xE341].pack('U*'),
  'Ob' => [0xE342].pack('U*'),
  'Oc' => [0xE343].pack('U*'),
  'Od' => [0xE344].pack('U*'),
  'Oe' => [0xE345].pack('U*'),
  'Of' => [0xE346].pack('U*'),
  'Og' => [0xE347].pack('U*'),
  'Oh' => [0xE348].pack('U*'),
  'Oi' => [0xE349].pack('U*'),
  'Oj' => [0xE34A].pack('U*'),
  'Ok' => [0xE34B].pack('U*'),
  'Ol' => [0xE34C].pack('U*'),
  'Om' => [0xE34D].pack('U*'),
  'P!' => [0xE401].pack('U*'),
  'P"' => [0xE402].pack('U*'),
  'P#' => [0xE403].pack('U*'),
  'P$' => [0xE404].pack('U*'),
  'P%' => [0xE405].pack('U*'),
  'P&' => [0xE406].pack('U*'),
  'P\'' => [0xE407].pack('U*'),
  'P(' => [0xE408].pack('U*'),
  'P)' => [0xE409].pack('U*'),
  'P*' => [0xE40A].pack('U*'),
  'P+' => [0xE40B].pack('U*'),
  'P,' => [0xE40C].pack('U*'),
  'P-' => [0xE40D].pack('U*'),
  'P.' => [0xE40E].pack('U*'),
  'P/' => [0xE40F].pack('U*'),
  'P0' => [0xE410].pack('U*'),
  'P1' => [0xE411].pack('U*'),
  'P2' => [0xE412].pack('U*'),
  'P3' => [0xE413].pack('U*'),
  'P4' => [0xE414].pack('U*'),
  'P5' => [0xE415].pack('U*'),
  'P6' => [0xE416].pack('U*'),
  'P7' => [0xE417].pack('U*'),
  'P8' => [0xE418].pack('U*'),
  'P9' => [0xE419].pack('U*'),
  'P:' => [0xE41A].pack('U*'),
  'P;' => [0xE41B].pack('U*'),
  'P<' => [0xE41C].pack('U*'),
  'P=' => [0xE41D].pack('U*'),
  'P>' => [0xE41E].pack('U*'),
  'P?' => [0xE41F].pack('U*'),
  'P@' => [0xE420].pack('U*'),
  'PA' => [0xE421].pack('U*'),
  'PB' => [0xE422].pack('U*'),
  'PC' => [0xE423].pack('U*'),
  'PD' => [0xE424].pack('U*'),
  'PE' => [0xE425].pack('U*'),
  'PF' => [0xE426].pack('U*'),
  'PG' => [0xE427].pack('U*'),
  'PH' => [0xE428].pack('U*'),
  'PI' => [0xE429].pack('U*'),
  'PJ' => [0xE42A].pack('U*'),
  'PK' => [0xE42B].pack('U*'),
  'PL' => [0xE42C].pack('U*'),
  'PM' => [0xE42D].pack('U*'),
  'PN' => [0xE42E].pack('U*'),
  'PO' => [0xE42F].pack('U*'),
  'PP' => [0xE430].pack('U*'),
  'PQ' => [0xE431].pack('U*'),
  'PR' => [0xE432].pack('U*'),
  'PS' => [0xE433].pack('U*'),
  'PT' => [0xE434].pack('U*'),
  'PU' => [0xE435].pack('U*'),
  'PV' => [0xE436].pack('U*'),
  'PW' => [0xE437].pack('U*'),
  'PX' => [0xE438].pack('U*'),
  'PY' => [0xE439].pack('U*'),
  'PZ' => [0xE43A].pack('U*'),
  'P[' => [0xE43B].pack('U*'),
  'P\\' => [0xE43C].pack('U*'),
  'P]' => [0xE43D].pack('U*'),
  'P^' => [0xE43E].pack('U*'),
  'P_' => [0xE43F].pack('U*'),
  'P`' => [0xE440].pack('U*'),
  'Pa' => [0xE441].pack('U*'),
  'Pb' => [0xE442].pack('U*'),
  'Pc' => [0xE443].pack('U*'),
  'Pd' => [0xE444].pack('U*'),
  'Pe' => [0xE445].pack('U*'),
  'Pf' => [0xE446].pack('U*'),
  'Pg' => [0xE447].pack('U*'),
  'Ph' => [0xE448].pack('U*'),
  'Pi' => [0xE449].pack('U*'),
  'Pj' => [0xE44A].pack('U*'),
  'Pk' => [0xE44B].pack('U*'),
  'Pl' => [0xE44C].pack('U*'),
  'Q!' => [0xE501].pack('U*'),
  'Q"' => [0xE502].pack('U*'),
  'Q#' => [0xE503].pack('U*'),
  'Q$' => [0xE504].pack('U*'),
  'Q%' => [0xE505].pack('U*'),
  'Q&' => [0xE506].pack('U*'),
  'Q\'' => [0xE507].pack('U*'),
  'Q(' => [0xE508].pack('U*'),
  'Q)' => [0xE509].pack('U*'),
  'Q*' => [0xE50A].pack('U*'),
  'Q+' => [0xE50B].pack('U*'),
  'Q,' => [0xE50C].pack('U*'),
  'Q-' => [0xE50D].pack('U*'),
  'Q.' => [0xE50E].pack('U*'),
  'Q/' => [0xE50F].pack('U*'),
  'Q0' => [0xE510].pack('U*'),
  'Q1' => [0xE511].pack('U*'),
  'Q2' => [0xE512].pack('U*'),
  'Q3' => [0xE513].pack('U*'),
  'Q4' => [0xE514].pack('U*'),
  'Q5' => [0xE515].pack('U*'),
  'Q6' => [0xE516].pack('U*'),
  'Q7' => [0xE517].pack('U*'),
  'Q8' => [0xE518].pack('U*'),
  'Q9' => [0xE519].pack('U*'),
  'Q:' => [0xE51A].pack('U*'),
  'Q;' => [0xE51B].pack('U*'),
  'Q<' => [0xE51C].pack('U*'),
  'Q=' => [0xE51D].pack('U*'),
  'Q>' => [0xE51E].pack('U*'),
  'Q?' => [0xE51F].pack('U*'),
  'Q@' => [0xE520].pack('U*'),
  'QA' => [0xE521].pack('U*'),
  'QB' => [0xE522].pack('U*'),
  'QC' => [0xE523].pack('U*'),
  'QD' => [0xE524].pack('U*'),
  'QE' => [0xE525].pack('U*'),
  'QF' => [0xE526].pack('U*'),
  'QG' => [0xE527].pack('U*'),
  'QH' => [0xE528].pack('U*'),
  'QI' => [0xE529].pack('U*'),
  'QJ' => [0xE52A].pack('U*'),
  'QK' => [0xE52B].pack('U*'),
  'QL' => [0xE52C].pack('U*'),
  'QM' => [0xE52D].pack('U*'),
  'QN' => [0xE52E].pack('U*'),
  'QO' => [0xE52F].pack('U*'),
  'QP' => [0xE530].pack('U*'),
  'QQ' => [0xE531].pack('U*'),
  'QR' => [0xE532].pack('U*'),
  'QS' => [0xE533].pack('U*'),
  'QT' => [0xE534].pack('U*'),
  'QU' => [0xE535].pack('U*'),
  'QV' => [0xE536].pack('U*'),
  'QW' => [0xE537].pack('U*'),
}

Constants inherited from Abstract::Filter

Abstract::Filter::EMOJI_DATA

Instance Method Summary collapse

Instance Method Details

#inbound(env) ⇒ Object



15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# File 'lib/egalite/keitai/rack/ketai/carrier/softbank.rb', line 15

def inbound(env)
  # softbank UTF-8バイナリ(Unicode) -> 絵文字ID表記
  request = Rack::Request.new(env)
  
  request.params  # 最低でも1回呼んでないと query_stringが未設定

  converter = lambda do |value|
    # まずウェブコードを変換
    value = value.gsub(/\x1B\$([GEFOPQ])([\x21-\x7E]+)\x0F/u) do |match|
      head = $1
      $2.split(//u).collect { |b| WEBCODE_TO_EMOJI[head+b]}
    end

    # UTF-8バイナリから絵文字IDに
    value.gsub(emoji_utf8_regexp) do |match|
      format("[e:%03X]", EMOJI_TO_EMOJIID[match])
    end
  end
  deep_apply(request.env["rack.request.query_hash"], &converter)
  deep_apply(request.env["rack.request.form_hash"], &converter)
  
  # 文字コード変換
  super(request.env)
end

#outbound(status, headers, body) ⇒ Object



40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
# File 'lib/egalite/keitai/rack/ketai/carrier/softbank.rb', line 40

def outbound(status, headers, body)
  status, headers, body = super

  return [status, headers, body] unless body[0]

  body = body.collect do |str|
    str.gsub(/\[e:([0-9A-F]{3})\]/) do |match|
      emojiid = $1.scanf('%X').first
      utf8str = EMOJIID_TO_EMOJI[emojiid]
      if utf8str
        # 絵文字があるので差替え
        utf8str.split(//u).collect { |b| "\x1B$"+WEBCODE_TO_EMOJI.index(b)+"\x0F" }.join("")
      else
        # 絵文字がないので代替文字列
        emoji_data = EMOJI_DATA[emojiid]
        emoji_data[:fallback] || emoji_data[:name] || ''
      end
    end
  end
  
  content = (body.is_a?(Array) ? body[0] : body).to_s
  headers['Content-Length'] = (content.respond_to?(:bytesize) ? content.bytesize : content.size).to_s if headers.member?('Content-Length')
  
  [status, headers, body]
end