| 48 | | # SJIS Binary |
| 49 | | if term.get_carrier == KtaiSpec::CARRIER_DOCOMO |
| 50 | | ret.gsub!(RE_IMODE_SJIS) do |s| |
| 51 | | orig_match = $1 |
| 52 | | if not $2.nil? |
| 53 | | sprintf '<img class="emoji" src="emoji/docomo/%X.gif" />', orig_match.unpack('n')[0] |
| 54 | | else |
| 55 | | orig_match |
| 56 | | end |
| | 58 | def self.convert_docomo(html, is_utf8) |
| | 59 | html.gsub!(RE_IMODE_SJIS) { docomo_sjis_binary($1, $2) } |
| | 60 | html.gsub!(/./) { |c| docomo_utf8_binary(c) } if is_utf8 |
| | 61 | html.gsub!(/&#([0-9]+);/) { docomo_sjis_decimal($1) } |
| | 62 | html.gsub(/(&#x([0-9a-zA-Z]+);)/) { docomo_unicode_hex($1, $2) } |
| | 63 | end |
| | 64 | |
| | 65 | # SJIS Binary |
| | 66 | def self.docomo_sjis_binary(original, inside) |
| | 67 | unless inside.nil? |
| | 68 | sprintf '<img class="emoji" src="emoji/docomo/%X.gif" />', original.unpack('n')[0] |
| | 69 | else |
| | 70 | original |
| | 71 | end |
| | 72 | end |
| | 73 | |
| | 74 | # UNICODE 16進数実体参照 (とりあえず拡張絵文字だけ) |
| | 75 | def self.docomo_unicode_hex(original, unicode) |
| | 76 | code = |
| | 77 | case hex = unicode.hex |
| | 78 | when 0xE63E..0xE69B |
| | 79 | # 4705 |
| | 80 | hex + 4705 |
| | 81 | when 0xE69C..0xE6DA, 0xE6AC..0xE6BA |
| | 82 | # 4772 |
| | 83 | hex + 4772 |
| | 84 | when 0xE6DB..0xE70A, 0xE70C..0xE757 |
| | 85 | # 4773 |
| | 86 | hex + 4773 |
| | 87 | else |
| | 88 | original |
| 72 | | # UNICODE 16進数実体参照 (とりあえず拡張絵文字だけ) |
| 73 | | ret.gsub!(/(&#x([0-9a-zA-Z]+);)/) do |s| |
| 74 | | code = |
| 75 | | case ($2.hex) |
| 76 | | when 0xE63E..0xE69B |
| 77 | | # 4705 |
| 78 | | $2.hex + 4705 |
| 79 | | when 0xE69C..0xE6DA, 0xE6AC..0xE6BA |
| 80 | | # 4772 |
| 81 | | $2.hex + 4772 |
| 82 | | when 0xE6DB..0xE70A, 0xE70C..0xE757 |
| 83 | | # 4773 |
| 84 | | $2.hex + 4773 |
| 85 | | else |
| 86 | | $1 |
| 87 | | end |
| 88 | | if code.is_a?(Integer) |
| 89 | | '<img class="emoji" src="emoji/docomo/' + (code).to_s(16).upcase + '.gif" />' |
| 90 | | else |
| 91 | | code |
| 92 | | end |
| 93 | | end |
| | 108 | def self.convert_kddi(html) |
| | 109 | html.gsub!(/(&#x([0-9a-zA-Z]+);)/) { kddi_localsrc($1, $2) } |
| | 110 | html.gsub(/ (localsrc)=\"?([^>\" ]+)\"?/im) { |
| | 111 | ' class="emoji" src="emoji/kddi/' + '%03d' % $2.to_i + '.gif"' |
| | 112 | } |
| | 113 | end |
| | 114 | |
| | 115 | # KDDI localsrc |
| | 116 | def self.kddi_localsrc(original, code) |
| | 117 | number = SSB::Emoji.ez_uni2number(code) |
| | 118 | if number.nil? |
| | 119 | original |
| | 120 | else |
| | 121 | sprintf '<img class="emoji" src="emoji/kddi/%03d.gif" />', number |
| 96 | | # KDDI localsrc |
| 97 | | if term.get_carrier == KtaiSpec::CARRIER_KDDI |
| 98 | | ret.gsub!(/(&#x([0-9a-zA-Z]+);)/) do |s| |
| 99 | | number = SSB::Emoji.ez_uni2number($2) |
| 100 | | if number.nil? |
| 101 | | $1 |
| 102 | | else |
| 103 | | sprintf '<img class="emoji" src="emoji/kddi/%03d.gif" />', number |
| 104 | | end |
| 105 | | end |
| | 125 | def self.convert_thirdforce(html) |
| | 126 | html.gsub!(/(&#x([a-zA-Z0-9]{4});)/) { thirdforce_unicode_hex_cref($1, $2) } |
| | 127 | re_sb_emoji = Regexp.new('\x1B\$(..)\x0F', 0, 'n') |
| | 128 | html.gsub(re_sb_emoji) { thirdforce_emoji($1) } |
| | 129 | end |
| 107 | | ret.gsub!(/ (localsrc)=\"?([^>\" ]+)\"?/im) { |s| |
| 108 | | ' class="emoji" src="emoji/kddi/' + '%03d' % $2.to_i + '.gif"' |
| | 131 | def self.thirdforce_unicode_hex_cref(original, unicode) |
| | 132 | code = unicode.hex |
| | 133 | if (0xE001 <= code and code <= 0xE05A) or |
| | 134 | (0xE101 <= code and code <= 0xE15A) or |
| | 135 | (0xE201 <= code and code <= 0xE253) or |
| | 136 | (0xE255 <= code and code <= 0xE257) or |
| | 137 | (0xE301 <= code and code <= 0xE34D) or |
| | 138 | (0xE401 <= code and code <= 0xE44C) or |
| | 139 | (0xE501 <= code and code <= 0xE537) |
| | 140 | sprintf "<img class='emoji' src='emoji/softbank/%s.gif' />", unicode |
| | 141 | else |
| | 142 | original |
| | 143 | end |
| | 144 | end |
| | 145 | |
| | 146 | def self.thirdforce_emoji(emoji) |
| | 147 | page_map = { |
| | 148 | ?G => 1, |
| | 149 | ?E => 2, |
| | 150 | ?F => 3, |
| | 151 | ?O => 4, |
| | 152 | ?P => 5, |
| | 153 | ?Q => 6, |
| 110 | | end |
| 111 | | |
| 112 | | # Thirdforce |
| 113 | | re_sb_emoji = Regexp.new('\x1B\$(..)\x0F', 0, 'n') |
| 114 | | if term.get_carrier == KtaiSpec::CARRIER_SOFTBANK |
| 115 | | # unicode hex cref. |
| 116 | | ret.gsub!(/(&#x([a-zA-Z0-9]{4});)/) do |x| |
| 117 | | code = $2.hex |
| 118 | | if (0xE001 <= code and code <= 0xE05A) or |
| 119 | | (0xE101 <= code and code <= 0xE15A) or |
| 120 | | (0xE201 <= code and code <= 0xE253) or |
| 121 | | (0xE255 <= code and code <= 0xE257) or |
| 122 | | (0xE301 <= code and code <= 0xE34D) or |
| 123 | | (0xE401 <= code and code <= 0xE44C) or |
| 124 | | (0xE501 <= code and code <= 0xE537) |
| 125 | | |
| 126 | | sprintf "<img class='emoji' src='emoji/softbank/%s.gif' />", $2 |
| 127 | | else |
| 128 | | $1 |
| 129 | | end |
| 130 | | end |
| 131 | | # web code |
| 132 | | ret.gsub!(re_sb_emoji) { |s| |
| 133 | | page_map = { |
| 134 | | ?G => 1, |
| 135 | | ?E => 2, |
| 136 | | ?F => 3, |
| 137 | | ?O => 4, |
| 138 | | ?P => 5, |
| 139 | | ?Q => 6, |
| 140 | | } |
| 141 | | code = ( (0xE0 + page_map[$1[0]] - 1 ) << 8) + ($1[1] - ?! + 1) |
| 142 | | |
| 143 | | sprintf "<img class='emoji' src='emoji/softbank/%04X.gif' />" % code |
| 144 | | } |
| 145 | | end |
| 146 | | |
| 147 | | ret |
| | 155 | code = ( (0xE0 + page_map[emoji[0]] - 1 ) << 8) + (emoji[1] - ?! + 1) |
| | 156 | sprintf "<img class='emoji' src='emoji/softbank/%04X.gif' />" % code |