twemoji 0.0.1

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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 30d5595bf4c341a2f7b960d79941a08571184fb3
4
+ data.tar.gz: 1ba40ad4ea3c925acbca7a7cdd7e3ba1bf3fa9b0
5
+ SHA512:
6
+ metadata.gz: e3d2628da8e26b765f96944e8a93328cfebb747fae0c13fb88db09cf72c1fab1f0d36cb9e4a05c8e3c4f31ff56ee88bb05b0690f77a10da2b7c00ee8963b5e40
7
+ data.tar.gz: 9bd3620246f497178f7f6f13997ee83834ee90b005a130a1a787e25cf4726be049700976c1588789d3efe1378fb87412f227a68d5b72f48246d9b035c345dfa4
@@ -0,0 +1,14 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
10
+ *.bundle
11
+ *.so
12
+ *.o
13
+ *.a
14
+ mkmf.log
data/Gemfile ADDED
@@ -0,0 +1,13 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in twemoji.gemspec
4
+ gemspec
5
+
6
+ group :development do
7
+ gem "rake"
8
+ gem "bundler"
9
+ end
10
+
11
+ group :test do
12
+ gem "minitest", ">= 5.5"
13
+ end
data/LICENSE ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2015 Juanito Fatas
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,100 @@
1
+ # Twemoji
2
+
3
+ Get imoji img by text.
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ ```ruby
10
+ gem 'twemoji'
11
+ ```
12
+
13
+ And then execute:
14
+
15
+ $ bundle
16
+
17
+ Or install it yourself as:
18
+
19
+ $ gem install twemoji
20
+
21
+ ## Usage
22
+
23
+ ### API
24
+
25
+ #### `.find_by_text`
26
+
27
+ ```ruby
28
+ > Twemoji.find_by_text(":heart_eyes:")
29
+ => "1f60d"
30
+ ```
31
+
32
+ #### `.find_by_code`
33
+
34
+ ```ruby
35
+ > Twemoji.find_by_code("1f60d")
36
+ => "1f60d"
37
+ ```
38
+
39
+ #### `.find_by` text or code
40
+
41
+ ```ruby
42
+ > Twemoji.find_by(text: ':heart_eyes:')
43
+ => 1f60d
44
+
45
+ > Twemoji.find_by(code: '1f60d')
46
+ => :heart_eyes:
47
+ ```
48
+
49
+ #### `.parse`
50
+
51
+ ```ruby
52
+ > Twemoji.parse 'I like chocolate :heart_eyes:!'
53
+ => 'I like chololate <img class="emoji" draggable="false" alt=":heart_eyes:" src="https://twemoji.maxcdn.com/36x36/1f60d.png">'
54
+ ```
55
+
56
+ ##### asset_root
57
+
58
+ Default assets root url, by default will be `https://twemoji.maxcdn.com/`:
59
+
60
+ ```ruby
61
+ > Twemoji.parse 'I like chocolate :heart_eyes:!', base: 'foocdn.com'
62
+ => 'I like chololate <img class="emoji" draggable="false" alt=":heart_eyes:" src="https://foocdn.com/36x36/1f60d.png">'
63
+ ```
64
+
65
+ ##### file_ext
66
+
67
+ Default assets file extensions, by default '.svg'.
68
+
69
+ ```ruby
70
+ > Twemoji.parse 'I like chocolate :heart_eyes:!', ext: '.png'
71
+ => 'I like chololate <img class="emoji" draggable="false" alt=":heart_eyes:" src="https://twemoji.maxcdn.com/16x16/1f60d.png">'
72
+ ```
73
+
74
+ ##### image_size
75
+
76
+ Default assets/folder size, by default "36x36". Available via Twitter CDN: 16, 36, 72
77
+
78
+ Only applicable when file_ext is .png.
79
+
80
+ ```ruby
81
+ > Twemoji.parse 'I like chocolate :heart_eyes:!', size: "72x72"
82
+ => 'I like chololate <img class="emoji" draggable="false" alt=":heart_eyes:" src="https://foocdn.com/72x72/1f60d.png">'
83
+ ```
84
+
85
+ ##### class_name
86
+
87
+ Default img css class name, by default "emoji".
88
+
89
+ ```ruby
90
+ > Twemoji.parse 'I like chocolate :heart_eyes:!', class_name: 'superemoji'
91
+ => 'I like chololate <img class="superemoji" draggable="false" alt=":heart_eyes:" src="https://foocdn.com/72x72/1f60d.png">'
92
+ ```
93
+
94
+ ## Contributing
95
+
96
+ 1. Fork it ( https://github.com/[my-github-username]/twemoji/fork )
97
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
98
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
99
+ 4. Push to the branch (`git push origin my-new-feature`)
100
+ 5. Create a new Pull Request
@@ -0,0 +1,11 @@
1
+ #!/usr/bin/env rake
2
+ require "bundler/gem_tasks"
3
+ require "rake/testtask"
4
+
5
+ Rake::TestTask.new do |t|
6
+ t.libs << "test"
7
+ t.test_files = FileList['test/**/*_test.rb']
8
+ t.verbose = true
9
+ end
10
+
11
+ task :default => :test
@@ -0,0 +1,149 @@
1
+ require "nokogiri"
2
+
3
+ require "twemoji/version"
4
+ require "twemoji/map"
5
+
6
+ module Twemoji
7
+ # Find code by text and find text by code.
8
+ #
9
+ # @example Usage
10
+ #
11
+ # Twemoji.find_by(text: :heart_eyes:) # => "1f60d"
12
+ # Twemoji.find_by(code: :1f60d:) # => "heart_eyes"
13
+ #
14
+ # @option options [String] (optional) :text
15
+ # @option options [String] (optional) :code
16
+ #
17
+ # @return [String] Text or Code
18
+ def self.find_by(*args, text: nil, code: nil)
19
+ raise "Can only specify text or code one at a time" if text && code
20
+
21
+ if text
22
+ find_by_text text
23
+ else
24
+ find_by_code code
25
+ end
26
+ end
27
+
28
+ # Find emoji code by text
29
+ #
30
+ # @example Usage
31
+ #
32
+ # Twemoji.find_by_text ":heart_eyes:"
33
+ # => "1f60d"
34
+ #
35
+ # @param text [String] Text to find emoji code
36
+ #
37
+ # @return [String] Emoji Code
38
+ def self.find_by_text(text)
39
+ CODES[must_str(text)]
40
+ end
41
+
42
+ # Find text by emoji code
43
+ #
44
+ # @example Usage
45
+ #
46
+ # Twemoji.find_by_code "1f60d"
47
+ # => ":heart_eyes:"
48
+ #
49
+ # @param code [String] Emoji code to find text
50
+ #
51
+ # @return [String] Text
52
+ def self.find_by_code(code)
53
+ ICODES[must_str(code)]
54
+ end
55
+
56
+ # Parse text, replace emoji text with image.
57
+ #
58
+ # @example Usage
59
+ #
60
+ # Twemoji.parse("I like chocolate :heart_eyes:!")
61
+ # => => 'I like chololate <img class="emoji" draggable="false" alt=":heart_eyes:" src="https://twemoji.maxcdn.com/svg/1f60d.svg">'
62
+ #
63
+ # @param text [String] source text to parse.
64
+ #
65
+ # @option options [String] (optional) asset_root Asset root url to serve emoji.
66
+ # @option options [String] (optional) asset_path Folder where you store your emoji images.
67
+ # @option options [String] (optional) file_ext File extension.
68
+ # @option options [String] (optional) image_size Emoji image's size 16, 36, 72 applicable if specify .png.
69
+ # @option options [String] (optional) class_name Emoji image's css class name.
70
+ #
71
+ # @return [String]
72
+ def self.parse(text, asset_root: "https://twemoji.maxcdn.com/",
73
+ asset_path: "",
74
+ file_ext: ".svg",
75
+ image_size: "16x16",
76
+ class_name: "emoji")
77
+
78
+ options[:asset_root] = asset_root
79
+ options[:asset_path] = asset_path
80
+ options[:file_ext] = file_ext
81
+ options[:image_size] = image_size
82
+ options[:class_name] = class_name
83
+
84
+ if text.kind_of?(String)
85
+ parse_html(text)
86
+ else
87
+ parse_document(text)
88
+ end
89
+ end
90
+
91
+ # Return all emoji patterns' regexp
92
+ def self.emoji_pattern
93
+ @emoji_pattern ||= /(#{CODES.keys.each { |name| Regexp.escape(name) }.join("|") })/
94
+ end
95
+
96
+ private
97
+ # Ensure text is string
98
+ #
99
+ # @param text [String]
100
+ #
101
+ # @return [String]
102
+ def self.must_str(text)
103
+ text = text.respond_to?(:to_str) ? text.to_str : text.to_s
104
+ end
105
+
106
+ def self.options
107
+ @options ||= {}
108
+ end
109
+
110
+ def self.parse_html(text)
111
+ return text if !text.include?(":")
112
+
113
+ filter_emojis(text)
114
+ end
115
+
116
+ def self.parse_document(doc)
117
+ doc.search('text()').each do |node|
118
+ content = node.to_html
119
+ next if !content.include?(":")
120
+ next if has_ancestor?(node, %w(pre code tt))
121
+ html = filter_emojis(content)
122
+ next if html == content
123
+ node.replace(html)
124
+ end
125
+ doc
126
+ end
127
+
128
+ def self.filter_emojis(content)
129
+ content.gsub(emoji_pattern) { |match| img_tag(match) }
130
+ end
131
+
132
+ def self.img_tag(name)
133
+ "<img class='#{options[:class_name]}' draggable='false' title='#{name}' alt='#{name}' src='#{emoji_url(name)}'>"
134
+ end
135
+
136
+ def self.emoji_url(name)
137
+ code = find_by_text(name)
138
+
139
+ if options[:file_ext] == ".svg"
140
+ File.join(options[:asset_root], "svg", "#{code}.svg")
141
+ elsif !options[:asset_path].empty?
142
+ File.join(options[:asset_root], options[:asset_path], "#{code}.#{options[:file_ext]}")
143
+ elsif options[:file_ext] == ".png"
144
+ File.join(options[:asset_root], options[:image_size], "#{code}.png")
145
+ else
146
+ File.join(options[:asset_root], options[:image_size], "#{code}.#{options[:file_ext]}")
147
+ end
148
+ end
149
+ end
@@ -0,0 +1,853 @@
1
+ module Twemoji
2
+ # String to hex map
3
+ #
4
+ # This hash is frozen.
5
+ #
6
+ # @example Usage
7
+ #
8
+ # CODES[:smile:] # => "1f604"
9
+ # CODES[:notebook_with_decorative_cover:] # => "1f4d4"
10
+ #
11
+ # @return [Hash<String => String>]
12
+ CODES = {
13
+ ":smile:" => "1f604",
14
+ ":laughing:" => "1f606",
15
+ ":blush:" => "1f60a",
16
+ ":smiley:" => "1f603",
17
+ ":relaxed:" => "263a",
18
+ ":smirk:" => "1f60f",
19
+ ":heart_eyes:" => "1f60d",
20
+ ":kissing_heart:" => "1f618",
21
+ ":kissing_closed_eyes:" => "1f61a",
22
+ ":flushed:" => "1f633",
23
+ ":relieved:" => "1f625",
24
+ ":satisfied:" => "1f60c",
25
+ ":grin:" => "1f601",
26
+ ":wink:" => "1f609",
27
+ ":stuck_out_tongue_winking_eye:" => "1f61c",
28
+ ":stuck_out_tongue_closed_eyes:" => "1f61d",
29
+ ":grinning:" => "1f600",
30
+ ":kissing:" => "1f617",
31
+ ":kissing_smiling_eyes:" => "1f619",
32
+ ":stuck_out_tongue:" => "1f61b",
33
+ ":sleeping:" => "1f634",
34
+ ":worried:" => "1f61f",
35
+ ":frowning:" => "1f626",
36
+ ":anguished:" => "1f627",
37
+ ":open_mouth:" => "1f62e",
38
+ ":grimacing:" => "1f62c",
39
+ ":confused:" => "1f615",
40
+ ":hushed:" => "1f62f",
41
+ ":expressionless:" => "1f611",
42
+ ":unamused:" => "1f612",
43
+ ":sweat_smile:" => "1f605",
44
+ ":sweat:" => "1f613",
45
+ ":weary:" => "1f629",
46
+ ":pensive:" => "1f614",
47
+ ":disappointed:" => "1f61e",
48
+ ":confounded:" => "1f616",
49
+ ":fearful:" => "1f628",
50
+ ":cold_sweat:" => "1f630",
51
+ ":persevere:" => "1f623",
52
+ ":cry:" => "1f622",
53
+ ":sob:" => "1f62d",
54
+ ":joy:" => "1f602",
55
+ ":astonished:" => "1f632",
56
+ ":scream:" => "1f631",
57
+ ":tired_face:" => "1f62b",
58
+ ":angry:" => "1f620",
59
+ ":rage:" => "1f621",
60
+ ":triumph:" => "1f624",
61
+ ":sleepy:" => "1f62a",
62
+ ":yum:" => "1f60b",
63
+ ":mask:" => "1f637",
64
+ ":sunglasses:" => "1f60e",
65
+ ":dizzy_face:" => "1f635",
66
+ ":imp:" => "1f47f",
67
+ ":smiling_imp:" => "1f608",
68
+ ":neutral_face:" => "1f610",
69
+ ":no_mouth:" => "1f636",
70
+ ":innocent:" => "1f607",
71
+ ":alien:" => "1f47d",
72
+ ":yellow_heart:" => "1f49b",
73
+ ":blue_heart:" => "1f499",
74
+ ":purple_heart:" => "1f49c",
75
+ ":heart:" => "2764",
76
+ ":green_heart:" => "1f49a",
77
+ ":broken_heart:" => "1f494",
78
+ ":heartbeat:" => "1f493",
79
+ ":heartpulse:" => "1f497",
80
+ ":two_hearts:" => "1f495",
81
+ ":revolving_hearts:" => "1f49e",
82
+ ":cupid:" => "1f498",
83
+ ":sparkling_heart:" => "1f496",
84
+ ":sparkles:" => "2728",
85
+ ":star:" => "2b50",
86
+ ":star2:" => "1f31f",
87
+ ":dizzy:" => "1f4ab",
88
+ ":boom:" => "1f4a5",
89
+ ":anger:" => "1f4a2",
90
+ ":exclamation:" => "2757",
91
+ ":question:" => "2753",
92
+ ":grey_exclamation:" => "2755",
93
+ ":grey_question:" => "2754",
94
+ ":zzz:" => "1f4a4",
95
+ ":dash:" => "1f4a8",
96
+ ":sweat_drops:" => "1f4a6",
97
+ ":notes:" => "1f3b6",
98
+ ":musical_note:" => "1f3b5",
99
+ ":fire:" => "1f525",
100
+ ":poop:" => "1f4a9",
101
+ ":thumbsup:" => "1f44d",
102
+ ":thumbsdown:" => "1f44e",
103
+ ":ok_hand:" => "1f44c",
104
+ ":punch:" => "1f44a",
105
+ ":fist:" => "270a",
106
+ ":v:" => "270c",
107
+ ":wave:" => "1f44b",
108
+ ":hand:" => "270b",
109
+ ":open_hands:" => "1f450",
110
+ ":point_up:" => "261d",
111
+ ":point_down:" => "1f447",
112
+ ":point_left:" => "1f448",
113
+ ":point_right:" => "1f449",
114
+ ":raised_hands:" => "1f64c",
115
+ ":pray:" => "1f64f",
116
+ ":point_up_2:" => "1f446",
117
+ ":clap:" => "1f44f",
118
+ ":muscle:" => "1f4aa",
119
+ ":walking:" => "1f6b6",
120
+ ":runner:" => "1f3c3",
121
+ ":couple:" => "1f46b",
122
+ ":family:" => "1f46a",
123
+ ":two_men_holding_hands:" => "1f46c",
124
+ ":two_women_holding_hands:" => "1f46d",
125
+ ":dancer:" => "1f483",
126
+ ":dancers:" => "1f46f",
127
+ ":ok_woman:" => "1f646",
128
+ ":no_good:" => "1f645",
129
+ ":information_desk_person:" => "1f481",
130
+ ":raised_hand:" => "1f64b",
131
+ ":bride_with_veil:" => "1f470",
132
+ ":person_with_pouting_face:" => "1f64e",
133
+ ":person_frowning:" => "1f64d",
134
+ ":bow:" => "1f647",
135
+ ":couplekiss:" => "1f48f",
136
+ ":couple_with_heart:" => "1f491",
137
+ ":massage:" => "1f486",
138
+ ":haircut:" => "1f487",
139
+ ":nail_care:" => "1f485",
140
+ ":boy:" => "1f466",
141
+ ":girl:" => "1f467",
142
+ ":woman:" => "1f469",
143
+ ":man:" => "1f468",
144
+ ":baby:" => "1f476",
145
+ ":older_woman:" => "1f475",
146
+ ":older_man:" => "1f474",
147
+ ":person_with_blond_hair:" => "1f471",
148
+ ":man_with_gua_pi_mao:" => "1f472",
149
+ ":man_with_turban:" => "1f473",
150
+ ":construction_worker:" => "1f477",
151
+ ":cop:" => "1f46e",
152
+ ":angel:" => "1f47c",
153
+ ":princess:" => "1f478",
154
+ ":smiley_cat:" => "1f63a",
155
+ ":smile_cat:" => "1f638",
156
+ ":heart_eyes_cat:" => "1f63b",
157
+ ":kissing_cat:" => "1f63d",
158
+ ":smirk_cat:" => "1f63c",
159
+ ":scream_cat:" => "1f640",
160
+ ":crying_cat_face:" => "1f63f",
161
+ ":joy_cat:" => "1f639",
162
+ ":pouting_cat:" => "1f63e",
163
+ ":japanese_ogre:" => "1f479",
164
+ ":japanese_goblin:" => "1f47a",
165
+ ":see_no_evil:" => "1f648",
166
+ ":hear_no_evil:" => "1f649",
167
+ ":speak_no_evil:" => "1f64a",
168
+ ":guardsman:" => "1f482",
169
+ ":skull:" => "1f480",
170
+ ":feet:" => "1f463",
171
+ ":lips:" => "1f444",
172
+ ":kiss:" => "1f48b",
173
+ ":droplet:" => "1f4a7",
174
+ ":ear:" => "1f442",
175
+ ":eyes:" => "1f440",
176
+ ":nose:" => "1f443",
177
+ ":tongue:" => "1f445",
178
+ ":love_letter:" => "1f48c",
179
+ ":bust_in_silhouette:" => "1f464",
180
+ ":busts_in_silhouette:" => "1f465",
181
+ ":speech_balloon:" => "1f4ac",
182
+ ":thought_balloon:" => "1f4ad",
183
+ ":sunny:" => "2600",
184
+ ":umbrella:" => "2614",
185
+ ":cloud:" => "2601",
186
+ ":snowflake:" => "2744",
187
+ ":snowman:" => "26c4",
188
+ ":zap:" => "26a1",
189
+ ":cyclone:" => "1f300",
190
+ ":foggy:" => "1f301",
191
+ ":ocean:" => "1f30a",
192
+ ":cat:" => "1f431",
193
+ ":dog:" => "1f436",
194
+ ":mouse:" => "1f42d",
195
+ ":hamster:" => "1f439",
196
+ ":rabbit:" => "1f430",
197
+ ":wolf:" => "1f43a",
198
+ ":frog:" => "1f438",
199
+ ":tiger:" => "1f42f",
200
+ ":koala:" => "1f428",
201
+ ":bear:" => "1f43b",
202
+ ":pig:" => "1f437",
203
+ ":pig_nose:" => "1f43d",
204
+ ":cow:" => "1f42e",
205
+ ":boar:" => "1f417",
206
+ ":monkey_face:" => "1f435",
207
+ ":monkey:" => "1f412",
208
+ ":horse:" => "1f434",
209
+ ":racehorse:" => "1f40e",
210
+ ":camel:" => "1f42b",
211
+ ":sheep:" => "1f411",
212
+ ":elephant:" => "1f418",
213
+ ":panda_face:" => "1f43c",
214
+ ":snake:" => "1f40d",
215
+ ":bird:" => "1f426",
216
+ ":baby_chick:" => "1f424",
217
+ ":hatched_chick:" => "1f425",
218
+ ":hatching_chick:" => "1f423",
219
+ ":chicken:" => "1f414",
220
+ ":penguin:" => "1f427",
221
+ ":turtle:" => "1f422",
222
+ ":bug:" => "1f41b",
223
+ ":honeybee:" => "1f41d",
224
+ ":ant:" => "1f41c",
225
+ ":beetle:" => "1f41e",
226
+ ":snail:" => "1f40c",
227
+ ":octopus:" => "1f419",
228
+ ":tropical_fish:" => "1f420",
229
+ ":fish:" => "1f41f",
230
+ ":whale:" => "1f433",
231
+ ":whale2:" => "1f40b",
232
+ ":dolphin:" => "1f42c",
233
+ ":cow2:" => "1f404",
234
+ ":ram:" => "1f40f",
235
+ ":rat:" => "1f400",
236
+ ":water_buffalo:" => "1f403",
237
+ ":tiger2:" => "1f405",
238
+ ":rabbit2:" => "1f407",
239
+ ":dragon:" => "1f409",
240
+ ":goat:" => "1f410",
241
+ ":rooster:" => "1f413",
242
+ ":dog2:" => "1f415",
243
+ ":pig2:" => "1f416",
244
+ ":mouse2:" => "1f401",
245
+ ":ox:" => "1f402",
246
+ ":dragon_face:" => "1f432",
247
+ ":blowfish:" => "1f421",
248
+ ":crocodile:" => "1f40a",
249
+ ":dromedary_camel:" => "1f42a",
250
+ ":leopard:" => "1f406",
251
+ ":cat2:" => "1f408",
252
+ ":poodle:" => "1f429",
253
+ ":paw_prints:" => "1f43e",
254
+ ":bouquet:" => "1f490",
255
+ ":cherry_blossom:" => "1f338",
256
+ ":tulip:" => "1f337",
257
+ ":four_leaf_clover:" => "1f340",
258
+ ":rose:" => "1f339",
259
+ ":sunflower:" => "1f33b",
260
+ ":hibiscus:" => "1f33a",
261
+ ":maple_leaf:" => "1f341",
262
+ ":leaves:" => "1f343",
263
+ ":fallen_leaf:" => "1f342",
264
+ ":herb:" => "1f33f",
265
+ ":mushroom:" => "1f344",
266
+ ":cactus:" => "1f335",
267
+ ":palm_tree:" => "1f334",
268
+ ":evergreen_tree:" => "1f332",
269
+ ":deciduous_tree:" => "1f333",
270
+ ":chestnut:" => "1f330",
271
+ ":seedling:" => "1f331",
272
+ ":blossom:" => "1f33c",
273
+ ":ear_of_rice:" => "1f33e",
274
+ ":shell:" => "1f41a",
275
+ ":globe_with_meridians:" => "1f310",
276
+ ":sun_with_face:" => "1f31e",
277
+ ":full_moon_with_face:" => "1f31d",
278
+ ":new_moon_with_face:" => "1f31a",
279
+ ":new_moon:" => "1f311",
280
+ ":waxing_crescent_moon:" => "1f312",
281
+ ":first_quarter_moon:" => "1f313",
282
+ ":waxing_gibbous_moon:" => "1f314",
283
+ ":full_moon:" => "1f315",
284
+ ":waning_gibbous_moon:" => "1f316",
285
+ ":last_quarter_moon:" => "1f317",
286
+ ":waning_crescent_moon:" => "1f318",
287
+ ":last_quarter_moon_with_face:" => "1f31c",
288
+ ":first_quarter_moon_with_face:" => "1f31b",
289
+ ":moon:" => "1f319",
290
+ ":earth_africa:" => "1f30d",
291
+ ":earth_americas:" => "1f30e",
292
+ ":earth_asia:" => "1f30f",
293
+ ":volcano:" => "1f30b",
294
+ ":milky_way:" => "1f30c",
295
+ ":partly_sunny:" => "26c5",
296
+ ":bamboo:" => "1f38d",
297
+ ":gift_heart:" => "1f49d",
298
+ ":dolls:" => "1f38e",
299
+ ":school_satchel:" => "1f392",
300
+ ":mortar_board:" => "1f393",
301
+ ":flags:" => "1f38f",
302
+ ":fireworks:" => "1f386",
303
+ ":sparkler:" => "1f387",
304
+ ":wind_chime:" => "1f390",
305
+ ":rice_scene:" => "1f391",
306
+ ":jack_o_lantern:" => "1f383",
307
+ ":ghost:" => "1f47b",
308
+ ":santa:" => "1f385",
309
+ ":8ball:" => "1f3b1",
310
+ ":alarm_clock:" => "23f0",
311
+ ":apple:" => "1f34e",
312
+ ":art:" => "1f3a8",
313
+ ":baby_bottle:" => "1f37c",
314
+ ":balloon:" => "1f388",
315
+ ":banana:" => "1f34c",
316
+ ":bar_chart:" => "1f4ca",
317
+ ":baseball:" => "26be",
318
+ ":basketball:" => "1f3c0",
319
+ ":bath:" => "1f6c0",
320
+ ":bathtub:" => "1f6c1",
321
+ ":battery:" => "1f50b",
322
+ ":beer:" => "1f37a",
323
+ ":beers:" => "1f37b",
324
+ ":bell:" => "1f514",
325
+ ":bento:" => "1f371",
326
+ ":bicyclist:" => "1f6b4",
327
+ ":bikini:" => "1f459",
328
+ ":birthday:" => "1f382",
329
+ ":black_joker:" => "1f0cf",
330
+ ":black_nib:" => "2712",
331
+ ":blue_book:" => "1f4d8",
332
+ ":bomb:" => "1f4a3",
333
+ ":bookmark:" => "1f516",
334
+ ":bookmark_tabs:" => "1f4d1",
335
+ ":books:" => "1f4da",
336
+ ":boot:" => "1f462",
337
+ ":bowling:" => "1f3b3",
338
+ ":bread:" => "1f35e",
339
+ ":briefcase:" => "1f4bc",
340
+ ":bulb:" => "1f4a1",
341
+ ":cake:" => "1f370",
342
+ ":calendar:" => "1f4c6",
343
+ ":calling:" => "1f4f2",
344
+ ":camera:" => "1f4f7",
345
+ ":candy:" => "1f36c",
346
+ ":card_index:" => "1f4c7",
347
+ ":cd:" => "1f4bf",
348
+ ":chart_with_downwards_trend:" => "1f4c9",
349
+ ":chart_with_upwards_trend:" => "1f4c8",
350
+ ":cherries:" => "1f352",
351
+ ":chocolate_bar:" => "1f36b",
352
+ ":christmas_tree:" => "1f384",
353
+ ":clapper:" => "1f3ac",
354
+ ":clipboard:" => "1f4cb",
355
+ ":closed_book:" => "1f4d5",
356
+ ":closed_lock_with_key:" => "1f510",
357
+ ":closed_umbrella:" => "1f302",
358
+ ":clubs:" => "2663",
359
+ ":cocktail:" => "1f378",
360
+ ":coffee:" => "2615",
361
+ ":computer:" => "1f4bb",
362
+ ":confetti_ball:" => "1f38a",
363
+ ":cookie:" => "1f36a",
364
+ ":corn:" => "1f33d",
365
+ ":credit_card:" => "1f4b3",
366
+ ":crown:" => "1f451",
367
+ ":crystal_ball:" => "1f52e",
368
+ ":curry:" => "1f35b",
369
+ ":custard:" => "1f36e",
370
+ ":dango:" => "1f361",
371
+ ":dart:" => "1f3af",
372
+ ":date:" => "1f4c5",
373
+ ":diamonds:" => "2666",
374
+ ":dollar:" => "1f4b5",
375
+ ":door:" => "1f6aa",
376
+ ":doughnut:" => "1f369",
377
+ ":dress:" => "1f457",
378
+ ":dvd:" => "1f4c0",
379
+ ":e_mail:" => "1f4e7",
380
+ ":egg:" => "1f373",
381
+ ":eggplant:" => "1f346",
382
+ ":electric_plug:" => "1f50c",
383
+ ":email:" => "2709",
384
+ ":euro:" => "1f4b6",
385
+ ":eyeglasses:" => "1f453",
386
+ ":fax:" => "1f4e0",
387
+ ":file_folder:" => "1f4c1",
388
+ ":fish_cake:" => "1f365",
389
+ ":fishing_pole_and_fish:" => "1f3a3",
390
+ ":flashlight:" => "1f526",
391
+ ":floppy_disk:" => "1f4be",
392
+ ":flower_playing_cards:" => "1f3b4",
393
+ ":football:" => "1f3c8",
394
+ ":fork_and_knife:" => "1f374",
395
+ ":fried_shrimp:" => "1f364",
396
+ ":fries:" => "1f35f",
397
+ ":game_die:" => "1f3b2",
398
+ ":gem:" => "1f48e",
399
+ ":gift:" => "1f381",
400
+ ":golf:" => "26f3",
401
+ ":grapes:" => "1f347",
402
+ ":green_apple:" => "1f34f",
403
+ ":green_book:" => "1f4d7",
404
+ ":guitar:" => "1f3b8",
405
+ ":gun:" => "1f52b",
406
+ ":hamburger:" => "1f354",
407
+ ":hammer:" => "1f528",
408
+ ":handbag:" => "1f45c",
409
+ ":headphones:" => "1f3a7",
410
+ ":hearts:" => "2665",
411
+ ":high_brightness:" => "1f506",
412
+ ":high_heel:" => "1f460",
413
+ ":hocho:" => "1f52a",
414
+ ":honey_pot:" => "1f36f",
415
+ ":horse_racing:" => "1f3c7",
416
+ ":hourglass:" => "231b",
417
+ ":hourglass_flowing_sand:" => "23f3",
418
+ ":ice_cream:" => "1f368",
419
+ ":icecream:" => "1f366",
420
+ ":inbox_tray:" => "1f4e5",
421
+ ":incoming_envelope:" => "1f4e8",
422
+ ":iphone:" => "1f4f1",
423
+ ":jeans:" => "1f456",
424
+ ":key:" => "1f511",
425
+ ":kimono:" => "1f458",
426
+ ":ledger:" => "1f4d2",
427
+ ":lemon:" => "1f34b",
428
+ ":lipstick:" => "1f484",
429
+ ":lock:" => "1f512",
430
+ ":lock_with_ink_pen:" => "1f50f",
431
+ ":lollipop:" => "1f36d",
432
+ ":loop:" => "27bf",
433
+ ":loudspeaker:" => "1f4e2",
434
+ ":low_brightness:" => "1f505",
435
+ ":mag:" => "1f50d",
436
+ ":mag_right:" => "1f50e",
437
+ ":mahjong:" => "1f004",
438
+ ":mailbox:" => "1f4eb",
439
+ ":mailbox_closed:" => "1f4ea",
440
+ ":mailbox_with_mail:" => "1f4ec",
441
+ ":mailbox_with_no_mail:" => "1f4ed",
442
+ ":mans_shoe:" => "1f45e",
443
+ ":meat_on_bone:" => "1f356",
444
+ ":mega:" => "1f4e3",
445
+ ":melon:" => "1f348",
446
+ ":memo:" => "1f4dd",
447
+ ":microphone:" => "1f3a4",
448
+ ":microscope:" => "1f52c",
449
+ ":minidisc:" => "1f4bd",
450
+ ":money_with_wings:" => "1f4b8",
451
+ ":moneybag:" => "1f4b0",
452
+ ":mountain_bicyclist:" => "1f6b5",
453
+ ":movie_camera:" => "1f3a5",
454
+ ":musical_keyboard:" => "1f3b9",
455
+ ":musical_score:" => "1f3bc",
456
+ ":mute:" => "1f507",
457
+ ":name_badge:" => "1f4db",
458
+ ":necktie:" => "1f454",
459
+ ":newspaper:" => "1f4f0",
460
+ ":no_bell:" => "1f515",
461
+ ":notebook:" => "1f4d3",
462
+ ":notebook_with_decorative_cover:" => "1f4d4",
463
+ ":nut_and_bolt:" => "1f529",
464
+ ":oden:" => "1f362",
465
+ ":open_file_folder:" => "1f4c2",
466
+ ":orange_book:" => "1f4d9",
467
+ ":outbox_tray:" => "1f4e4",
468
+ ":page_facing_up:" => "1f4c4",
469
+ ":page_with_curl:" => "1f4c3",
470
+ ":pager:" => "1f4df",
471
+ ":paperclip:" => "1f4ce",
472
+ ":peach:" => "1f351",
473
+ ":pear:" => "1f350",
474
+ ":pencil2:" => "270f",
475
+ ":phone:" => "260e",
476
+ ":pill:" => "1f48a",
477
+ ":pineapple:" => "1f34d",
478
+ ":pizza:" => "1f355",
479
+ ":postal_horn:" => "1f4ef",
480
+ ":postbox:" => "1f4ee",
481
+ ":pouch:" => "1f45d",
482
+ ":poultry_leg:" => "1f357",
483
+ ":pound:" => "1f4b7",
484
+ ":purse:" => "1f45b",
485
+ ":pushpin:" => "1f4cc",
486
+ ":radio:" => "1f4fb",
487
+ ":ramen:" => "1f35c",
488
+ ":ribbon:" => "1f380",
489
+ ":rice:" => "1f35a",
490
+ ":rice_ball:" => "1f359",
491
+ ":rice_cracker:" => "1f358",
492
+ ":ring:" => "1f48d",
493
+ ":rugby_football:" => "1f3c9",
494
+ ":running_shirt_with_sash:" => "1f3bd",
495
+ ":sake:" => "1f376",
496
+ ":sandal:" => "1f461",
497
+ ":satellite:" => "1f4e1",
498
+ ":saxophone:" => "1f3b7",
499
+ ":scissors:" => "2702",
500
+ ":scroll:" => "1f4dc",
501
+ ":seat:" => "1f4ba",
502
+ ":shaved_ice:" => "1f367",
503
+ ":shirt:" => "1f455",
504
+ ":shower:" => "1f6bf",
505
+ ":ski:" => "1f3bf",
506
+ ":smoking:" => "1f6ac",
507
+ ":snowboarder:" => "1f3c2",
508
+ ":soccer:" => "26bd",
509
+ ":sound:" => "1f509",
510
+ ":space_invader:" => "1f47e",
511
+ ":spades:" => "2660",
512
+ ":spaghetti:" => "1f35d",
513
+ ":speaker:" => "1f50a",
514
+ ":stew:" => "1f372",
515
+ ":straight_ruler:" => "1f4cf",
516
+ ":strawberry:" => "1f353",
517
+ ":surfer:" => "1f3c4",
518
+ ":sushi:" => "1f363",
519
+ ":sweet_potato:" => "1f360",
520
+ ":swimmer:" => "1f3ca",
521
+ ":syringe:" => "1f489",
522
+ ":tada:" => "1f389",
523
+ ":tanabata_tree:" => "1f38b",
524
+ ":tangerine:" => "1f34a",
525
+ ":tea:" => "1f375",
526
+ ":telephone_receiver:" => "1f4de",
527
+ ":telescope:" => "1f52d",
528
+ ":tennis:" => "1f3be",
529
+ ":toilet:" => "1f6bd",
530
+ ":tomato:" => "1f345",
531
+ ":tophat:" => "1f3a9",
532
+ ":triangular_ruler:" => "1f4d0",
533
+ ":trophy:" => "1f3c6",
534
+ ":tropical_drink:" => "1f379",
535
+ ":trumpet:" => "1f3ba",
536
+ ":tv:" => "1f4fa",
537
+ ":unlock:" => "1f513",
538
+ ":vhs:" => "1f4fc",
539
+ ":video_camera:" => "1f4f9",
540
+ ":video_game:" => "1f3ae",
541
+ ":violin:" => "1f3bb",
542
+ ":watch:" => "231a",
543
+ ":watermelon:" => "1f349",
544
+ ":wine_glass:" => "1f377",
545
+ ":womans_clothes:" => "1f45a",
546
+ ":womans_hat:" => "1f452",
547
+ ":wrench:" => "1f527",
548
+ ":yen:" => "1f4b4",
549
+ ":aerial_tramway:" => "1f6a1",
550
+ ":airplane:" => "2708",
551
+ ":ambulance:" => "1f691",
552
+ ":anchor:" => "2693",
553
+ ":articulated_lorry:" => "1f69b",
554
+ ":atm:" => "1f3e7",
555
+ ":bank:" => "1f3e6",
556
+ ":barber:" => "1f488",
557
+ ":beginner:" => "1f530",
558
+ ":bike:" => "1f6b2",
559
+ ":blue_car:" => "1f699",
560
+ ":boat:" => "26f5",
561
+ ":bridge_at_night:" => "1f309",
562
+ ":bullettrain_front:" => "1f685",
563
+ ":bullettrain_side:" => "1f684",
564
+ ":bus:" => "1f68c",
565
+ ":busstop:" => "1f68f",
566
+ ":car:" => "1f697",
567
+ ":carousel_horse:" => "1f3a0",
568
+ ":checkered_flag:" => "1f3c1",
569
+ ":church:" => "26ea",
570
+ ":circus_tent:" => "1f3aa",
571
+ ":city_sunrise:" => "1f307",
572
+ ":city_sunset:" => "1f306",
573
+ ":construction:" => "1f6a7",
574
+ ":convenience_store:" => "1f3ea",
575
+ ":crossed_flags:" => "1f38c",
576
+ ":department_store:" => "1f3ec",
577
+ ":european_castle:" => "1f3f0",
578
+ ":european_post_office:" => "1f3e4",
579
+ ":factory:" => "1f3ed",
580
+ ":ferris_wheel:" => "1f3a1",
581
+ ":fire_engine:" => "1f692",
582
+ ":fountain:" => "26f2",
583
+ ":fuelpump:" => "26fd",
584
+ ":helicopter:" => "1f681",
585
+ ":hospital:" => "1f3e5",
586
+ ":hotel:" => "1f3e8",
587
+ ":hotsprings:" => "2668",
588
+ ":house:" => "1f3e0",
589
+ ":house_with_garden:" => "1f3e1",
590
+ ":japan:" => "1f5fe",
591
+ ":japanese_castle:" => "1f3ef",
592
+ ":light_rail:" => "1f688",
593
+ ":love_hotel:" => "1f3e9",
594
+ ":minibus:" => "1f690",
595
+ ":monorail:" => "1f69d",
596
+ ":mount_fuji:" => "1f5fb",
597
+ ":mountain_cableway:" => "1f6a0",
598
+ ":mountain_railway:" => "1f69e",
599
+ ":moyai:" => "1f5ff",
600
+ ":office:" => "1f3e2",
601
+ ":oncoming_automobile:" => "1f698",
602
+ ":oncoming_bus:" => "1f68d",
603
+ ":oncoming_police_car:" => "1f694",
604
+ ":oncoming_taxi:" => "1f696",
605
+ ":performing_arts:" => "1f3ad",
606
+ ":police_car:" => "1f693",
607
+ ":post_office:" => "1f3e3",
608
+ ":railway_car:" => "1f683",
609
+ ":rainbow:" => "1f308",
610
+ ":rocket:" => "1f680",
611
+ ":roller_coaster:" => "1f3a2",
612
+ ":rotating_light:" => "1f6a8",
613
+ ":round_pushpin:" => "1f4cd",
614
+ ":rowboat:" => "1f6a3",
615
+ ":school:" => "1f3eb",
616
+ ":ship:" => "1f6a2",
617
+ ":slot_machine:" => "1f3b0",
618
+ ":speedboat:" => "1f6a4",
619
+ ":stars:" => "1f303",
620
+ ":station:" => "1f689",
621
+ ":statue_of_liberty:" => "1f5fd",
622
+ ":steam_locomotive:" => "1f682",
623
+ ":sunrise:" => "1f305",
624
+ ":sunrise_over_mountains:" => "1f304",
625
+ ":suspension_railway:" => "1f69f",
626
+ ":taxi:" => "1f695",
627
+ ":tent:" => "26fa",
628
+ ":ticket:" => "1f3ab",
629
+ ":tokyo_tower:" => "1f5fc",
630
+ ":tractor:" => "1f69c",
631
+ ":traffic_light:" => "1f6a5",
632
+ ":train2:" => "1f686",
633
+ ":tram:" => "1f68a",
634
+ ":triangular_flag_on_post:" => "1f6a9",
635
+ ":trolleybus:" => "1f68e",
636
+ ":truck:" => "1f69a",
637
+ ":vertical_traffic_light:" => "1f6a6",
638
+ ":warning:" => "26a0",
639
+ ":wedding:" => "1f492",
640
+ ":jp:" => "1f1ef-1f1f5",
641
+ ":kr:" => "1f1f0-1f1f7",
642
+ ":cn:" => "1f1e8-1f1f3",
643
+ ":us:" => "1f1fa-1f1f8",
644
+ ":fr:" => "1f1eb-1f1f7",
645
+ ":es:" => "1f1ea-1f1f8",
646
+ ":it:" => "1f1ee-1f1f9",
647
+ ":ru:" => "1f1f7-1f1fa",
648
+ ":gb:" => "1f1ec-1f1e7",
649
+ ":de:" => "1f1e9-1f1ea",
650
+ ":100:" => "1f4af",
651
+ ":1234:" => "1f522",
652
+ ":a:" => "1f170",
653
+ ":ab:" => "1f18e",
654
+ ":abc:" => "1f524",
655
+ ":abcd:" => "1f521",
656
+ ":accept:" => "1f251",
657
+ ":aquarius:" => "2652",
658
+ ":aries:" => "2648",
659
+ ":arrow_backward:" => "25c0",
660
+ ":arrow_double_down:" => "23ec",
661
+ ":arrow_double_up:" => "23eb",
662
+ ":arrow_down:" => "2b07",
663
+ ":arrow_down_small:" => "1f53d",
664
+ ":arrow_forward:" => "25b6",
665
+ ":arrow_heading_down:" => "2935",
666
+ ":arrow_heading_up:" => "2934",
667
+ ":arrow_left:" => "2b05",
668
+ ":arrow_lower_left:" => "2199",
669
+ ":arrow_lower_right:" => "2198",
670
+ ":arrow_right:" => "27a1",
671
+ ":arrow_right_hook:" => "21aa",
672
+ ":arrow_up:" => "2b06",
673
+ ":arrow_up_down:" => "2195",
674
+ ":arrow_up_small:" => "1f53c",
675
+ ":arrow_upper_left:" => "2196",
676
+ ":arrow_upper_right:" => "2197",
677
+ ":arrows_clockwise:" => "1f503",
678
+ ":arrows_counterclockwise:" => "1f504",
679
+ ":b:" => "1f171",
680
+ ":baby_symbol:" => "1f6bc",
681
+ ":baggage_claim:" => "1f6c4",
682
+ ":ballot_box_with_check:" => "2611",
683
+ ":bangbang:" => "203c",
684
+ ":black_circle:" => "26ab",
685
+ ":black_square_button:" => "1f532",
686
+ ":cancer:" => "264b",
687
+ ":capital_abcd:" => "1f520",
688
+ ":capricorn:" => "2651",
689
+ ":chart:" => "1f4b9",
690
+ ":children_crossing:" => "1f6b8",
691
+ ":cinema:" => "1f3a6",
692
+ ":cl:" => "1f191",
693
+ ":clock1:" => "1f550",
694
+ ":clock10:" => "1f559",
695
+ ":clock1030:" => "1f565",
696
+ ":clock11:" => "1f55a",
697
+ ":clock1130:" => "1f566",
698
+ ":clock12:" => "1f55b",
699
+ ":clock1230:" => "1f567",
700
+ ":clock130:" => "1f55c",
701
+ ":clock2:" => "1f551",
702
+ ":clock230:" => "1f55d",
703
+ ":clock3:" => "1f552",
704
+ ":clock330:" => "1f55e",
705
+ ":clock4:" => "1f553",
706
+ ":clock430:" => "1f55f",
707
+ ":clock5:" => "1f554",
708
+ ":clock530:" => "1f560",
709
+ ":clock6:" => "1f555",
710
+ ":clock630:" => "1f561",
711
+ ":clock7:" => "1f556",
712
+ ":clock730:" => "1f562",
713
+ ":clock8:" => "1f557",
714
+ ":clock830:" => "1f563",
715
+ ":clock9:" => "1f558",
716
+ ":clock930:" => "1f564",
717
+ ":congratulations:" => "3297",
718
+ ":cool:" => "1f192",
719
+ ":copyright:" => "a9",
720
+ ":curly_loop:" => "27b0",
721
+ ":currency_exchange:" => "1f4b1",
722
+ ":customs:" => "1f6c3",
723
+ ":diamond_shape_with_a_dot_inside:" => "1f4a0",
724
+ ":do_not_litter:" => "1f6af",
725
+ ":eight:" => "38-20e3",
726
+ ":eight_pointed_black_star:" => "2734",
727
+ ":eight_spoked_asterisk:" => "2733",
728
+ ":end:" => "1f51a",
729
+ ":fast_forward:" => "23e9",
730
+ ":five:" => "35-20e3",
731
+ ":four:" => "34-20e3",
732
+ ":free:" => "1f193",
733
+ ":gemini:" => "264a",
734
+ ":hash:" => "23-20e3",
735
+ ":heart_decoration:" => "1f49f",
736
+ ":heavy_check_mark:" => "2714",
737
+ ":heavy_division_sign:" => "2797",
738
+ ":heavy_dollar_sign:" => "1f4b2",
739
+ ":heavy_minus_sign:" => "2796",
740
+ ":heavy_multiplication_x:" => "2716",
741
+ ":heavy_plus_sign:" => "2795",
742
+ ":id:" => "1f194",
743
+ ":ideograph_advantage:" => "1f250",
744
+ ":information_source:" => "2139",
745
+ ":interrobang:" => "2049",
746
+ ":keycap_ten:" => "1f51f",
747
+ ":koko:" => "1f201",
748
+ ":large_blue_circle:" => "1f535",
749
+ ":large_blue_diamond:" => "1f537",
750
+ ":large_orange_diamond:" => "1f536",
751
+ ":left_luggage:" => "1f6c5",
752
+ ":left_right_arrow:" => "2194",
753
+ ":leftwards_arrow_with_hook:" => "21a9",
754
+ ":leo:" => "264c",
755
+ ":libra:" => "264e",
756
+ ":link:" => "1f517",
757
+ ":m:" => "24c2",
758
+ ":mens:" => "1f6b9",
759
+ ":metro:" => "1f687",
760
+ ":mobile_phone_off:" => "1f4f4",
761
+ ":negative_squared_cross_mark:" => "274e",
762
+ ":new:" => "1f195",
763
+ ":ng:" => "1f196",
764
+ ":nine:" => "39-20e3",
765
+ ":no_bicycles:" => "1f6b3",
766
+ ":no_entry:" => "26d4",
767
+ ":no_entry_sign:" => "1f6ab",
768
+ ":no_mobile_phones:" => "1f4f5",
769
+ ":no_pedestrians:" => "1f6b7",
770
+ ":no_smoking:" => "1f6ad",
771
+ ":non_potable_water:" => "1f6b1",
772
+ ":o:" => "2b55",
773
+ ":o2:" => "1f17e",
774
+ ":ok:" => "1f197",
775
+ ":on:" => "1f51b",
776
+ ":one:" => "31-20e3",
777
+ ":ophiuchus:" => "26ce",
778
+ ":parking:" => "1f17f",
779
+ ":part_alternation_mark:" => "303d",
780
+ ":passport_control:" => "1f6c2",
781
+ ":pisces:" => "2653",
782
+ ":potable_water:" => "1f6b0",
783
+ ":put_litter_in_its_place:" => "1f6ae",
784
+ ":radio_button:" => "1f518",
785
+ ":recycle:" => "267b",
786
+ ":red_circle:" => "1f534",
787
+ ":registered:" => "ae",
788
+ ":repeat:" => "1f501",
789
+ ":repeat_one:" => "1f502",
790
+ ":restroom:" => "1f6bb",
791
+ ":rewind:" => "23ea",
792
+ ":sa:" => "1f202",
793
+ ":sagittarius:" => "2650",
794
+ ":scorpius:" => "264f",
795
+ ":secret:" => "3299",
796
+ ":seven:" => "37-20e3",
797
+ ":signal_strength:" => "1f4f6",
798
+ ":six:" => "36-20e3",
799
+ ":six_pointed_star:" => "1f52f",
800
+ ":small_blue_diamond:" => "1f539",
801
+ ":small_orange_diamond:" => "1f538",
802
+ ":small_red_triangle:" => "1f53a",
803
+ ":small_red_triangle_down:" => "1f53b",
804
+ ":soon:" => "1f51c",
805
+ ":sos:" => "1f198",
806
+ ":symbols:" => "1f523",
807
+ ":taurus:" => "2649",
808
+ ":three:" => "33-20e3",
809
+ ":tm:" => "2122",
810
+ ":top:" => "1f51d",
811
+ ":trident:" => "1f531",
812
+ ":twisted_rightwards_arrows:" => "1f500",
813
+ ":two:" => "32-20e3",
814
+ ":u5272:" => "1f239",
815
+ ":u5408:" => "1f234",
816
+ ":u55b6:" => "1f23a",
817
+ ":u6307:" => "1f22f",
818
+ ":u6708:" => "1f237",
819
+ ":u6709:" => "1f236",
820
+ ":u6e80:" => "1f235",
821
+ ":u7121:" => "1f21a",
822
+ ":u7533:" => "1f238",
823
+ ":u7981:" => "1f232",
824
+ ":u7a7a:" => "1f233",
825
+ ":underage:" => "1f51e",
826
+ ":up:" => "1f199",
827
+ ":vibration_mode:" => "1f4f3",
828
+ ":virgo:" => "264d",
829
+ ":vs:" => "1f19a",
830
+ ":wavy_dash:" => "3030",
831
+ ":wc:" => "1f6be",
832
+ ":wheelchair:" => "267f",
833
+ ":white_check_mark:" => "2705",
834
+ ":white_circle:" => "26aa",
835
+ ":white_flower:" => "1f4ae",
836
+ ":white_square_button:" => "1f533",
837
+ ":womens:" => "1f6ba",
838
+ ":x:" => "274c",
839
+ ":zero:" => "30-20e3"
840
+ }.each { | k, v| k.freeze; v.freeze }.freeze
841
+
842
+ # Hex to string map
843
+ #
844
+ # This hash is frozen.
845
+ #
846
+ # @example Usage
847
+ #
848
+ # ICODES["1f60d"] # => ":heart_eyes:"
849
+ # ICODES["1f4d4"] # => ":notebook_with_decorative_cover:"
850
+ #
851
+ # @return [Hash<String => String>]
852
+ ICODES = CODES.invert.freeze
853
+ end