tanuki_emoji 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +14 -0
- data/.gitlab-ci.yml +36 -0
- data/.idea/.gitignore +8 -0
- data/.rspec +3 -0
- data/.rubocop.yml +19 -0
- data/CHANGELOG.md +13 -0
- data/Gemfile +12 -0
- data/Gemfile.lock +69 -0
- data/LICENSE.txt +21 -0
- data/README.md +71 -0
- data/Rakefile +20 -0
- data/bin/console +15 -0
- data/bin/setup +8 -0
- data/lib/tanuki_emoji.rb +54 -0
- data/lib/tanuki_emoji/character.rb +72 -0
- data/lib/tanuki_emoji/db.rb +7 -0
- data/lib/tanuki_emoji/db/gemojione.rb +54 -0
- data/lib/tanuki_emoji/errors.rb +39 -0
- data/lib/tanuki_emoji/index.rb +94 -0
- data/lib/tanuki_emoji/version.rb +5 -0
- data/tanuki_emoji.gemspec +29 -0
- data/vendor/emojione-alpha-codes/CHANGELOG.md +55 -0
- data/vendor/emojione-alpha-codes/LICENSE.md +4 -0
- data/vendor/emojione-alpha-codes/README.md +416 -0
- data/vendor/emojione-alpha-codes/eac.csv +3058 -0
- data/vendor/emojione-alpha-codes/eac.json +18344 -0
- data/vendor/gemojione/LICENSE.txt +24 -0
- data/vendor/gemojione/index-3.3.0.json +33507 -0
- data/vendor/gemojione/index-4.1.0.json +45111 -0
- data/vendor/unicode/ReadMe.txt +21 -0
- data/vendor/unicode/emoji-data.txt +1261 -0
- data/vendor/unicode/emoji-sequences.txt +1403 -0
- data/vendor/unicode/emoji-test.txt +4879 -0
- data/vendor/unicode/emoji-variation-sequences.txt +723 -0
- data/vendor/unicode/emoji-zwj-sequences.txt +1390 -0
- metadata +82 -0
@@ -0,0 +1,54 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'json'
|
4
|
+
|
5
|
+
module TanukiEmoji
|
6
|
+
module Db
|
7
|
+
# Gemojione Emoji database
|
8
|
+
class Gemojione
|
9
|
+
DATA_FILE = 'vendor/gemojione/index-3.3.0.json'
|
10
|
+
|
11
|
+
def self.data_file
|
12
|
+
File.expand_path(File.join(__dir__, '../../../', DATA_FILE))
|
13
|
+
end
|
14
|
+
|
15
|
+
attr_reader :data_file
|
16
|
+
|
17
|
+
def initialize(index:, data_file: self.class.data_file)
|
18
|
+
@data_file = data_file
|
19
|
+
@index = index
|
20
|
+
end
|
21
|
+
|
22
|
+
def load!
|
23
|
+
db = File.open(data_file, 'r:UTF-8') do |file|
|
24
|
+
JSON.parse(file.read, symbolize_names: true)
|
25
|
+
end
|
26
|
+
|
27
|
+
db.each do |emoji_name, emoji_data|
|
28
|
+
emoji = Character.new(emoji_name.to_s,
|
29
|
+
codepoints: emoji_data[:moji],
|
30
|
+
alpha_code: emoji_data[:shortname],
|
31
|
+
description: emoji_data[:name])
|
32
|
+
|
33
|
+
emoji_data[:unicode_alternates].each do |unicode_alternates|
|
34
|
+
codepoints = unicode_hex_to_codepoint(unicode_alternates)
|
35
|
+
|
36
|
+
emoji.add_codepoints(codepoints)
|
37
|
+
end
|
38
|
+
|
39
|
+
emoji_data[:aliases].each do |alpha_code|
|
40
|
+
emoji.add_alias(alpha_code)
|
41
|
+
end
|
42
|
+
|
43
|
+
@index.add(emoji)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
private
|
48
|
+
|
49
|
+
def unicode_hex_to_codepoint(unicode)
|
50
|
+
unicode.split('-').map { |i| i.to_i(16) }.pack('U*')
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module TanukiEmoji
|
4
|
+
class Error < StandardError; end
|
5
|
+
|
6
|
+
# Error: An Emoji with the same alpha code has been previously indexed
|
7
|
+
class AlphaCodeAlreadyIndexedError < Error
|
8
|
+
attr_reader :name, :alpha_code
|
9
|
+
|
10
|
+
# @param [String] name
|
11
|
+
# @param [String] alpha_code
|
12
|
+
def initialize(name, alpha_code)
|
13
|
+
@name = name
|
14
|
+
@alpha_code = alpha_code
|
15
|
+
|
16
|
+
message = "Cannot index Emoji '#{name}' with alpha code '#{alpha_code}'. " \
|
17
|
+
"An Emoji with that alpha code has already been indexed."
|
18
|
+
|
19
|
+
super(message)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
# Error: An Emoji with the same codepoints has been previously indexed
|
24
|
+
class CodepointAlreadyIndexedError < Error
|
25
|
+
attr_reader :name, :codepoints
|
26
|
+
|
27
|
+
# @param [String] name
|
28
|
+
# @param [String] codepoint
|
29
|
+
def initialize(name, codepoint)
|
30
|
+
@name = name
|
31
|
+
@codepoint = codepoint
|
32
|
+
|
33
|
+
message = "Cannot index '#{name}' Emoji with codepoint: '#{codepoint}'. " \
|
34
|
+
"An Emoji with that codepoint has already been indexed."
|
35
|
+
|
36
|
+
super(message)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,94 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'singleton'
|
4
|
+
|
5
|
+
module TanukiEmoji
|
6
|
+
# Index of known Emoji Characters
|
7
|
+
class Index
|
8
|
+
include Singleton
|
9
|
+
include Enumerable
|
10
|
+
|
11
|
+
attr_reader :all
|
12
|
+
|
13
|
+
# Add a new Emoji to the index
|
14
|
+
#
|
15
|
+
# @param [TanukiEmoji::Character] emoji
|
16
|
+
def add(emoji)
|
17
|
+
@name_index ||= {}
|
18
|
+
@alpha_code_index ||= {}
|
19
|
+
@codepoints_index ||= {}
|
20
|
+
|
21
|
+
# Check if exists and index otherwise
|
22
|
+
insertion_mutex.synchronize do
|
23
|
+
raise ::TanukiEmoji::AlphaCodeAlreadyIndexedError.new emoji.name, emoji.alpha_code if @alpha_code_index.key? emoji.alpha_code
|
24
|
+
raise ::TanukiEmoji::CodepointAlreadyIndexedError.new emoji.name, emoji.codepoints if @codepoints_index.key? emoji.codepoints
|
25
|
+
|
26
|
+
emoji.codepoints_alternates.each do |codepoints|
|
27
|
+
raise ::TanukiEmoji::CodepointAlreadyIndexedError.new emoji.name, codepoints if @codepoints_index.key? codepoints
|
28
|
+
end
|
29
|
+
|
30
|
+
@name_index[emoji.name] = emoji
|
31
|
+
@alpha_code_index[emoji.alpha_code] = emoji
|
32
|
+
@codepoints_index[emoji.codepoints] = emoji
|
33
|
+
|
34
|
+
emoji.codepoints_alternates.each do |codepoints|
|
35
|
+
@codepoints_index[codepoints] = emoji
|
36
|
+
end
|
37
|
+
|
38
|
+
emoji.aliases.each do |alpha_code|
|
39
|
+
@alpha_code_index[alpha_code] = emoji
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
all << emoji
|
44
|
+
|
45
|
+
emoji
|
46
|
+
end
|
47
|
+
|
48
|
+
# Find an Emoji by its :alpha_code:
|
49
|
+
#
|
50
|
+
# @param [String] alpha_code
|
51
|
+
# @return [TanukiEmoji::Character]
|
52
|
+
def find_by_alpha_code(alpha_code)
|
53
|
+
@alpha_code_index[Character.format_alpha_code(alpha_code)]
|
54
|
+
end
|
55
|
+
|
56
|
+
# Find an Emoji by its Unicode representation
|
57
|
+
#
|
58
|
+
# @param [String] unicode_codepoints
|
59
|
+
# @return [TanukiEmoji::Character]
|
60
|
+
def find_by_codepoints(unicode_codepoints)
|
61
|
+
@codepoints_index[unicode_codepoints]
|
62
|
+
end
|
63
|
+
|
64
|
+
# Clears the index to start from scratch
|
65
|
+
#
|
66
|
+
# @note This is intended to be used in test and development only
|
67
|
+
# @param [Boolean] reload whether to reload emoji database or leave it empty
|
68
|
+
def reset!(reload: true)
|
69
|
+
@all = []
|
70
|
+
|
71
|
+
load_data_files if reload
|
72
|
+
|
73
|
+
remove_instance_variable :@name_index if defined? @name_index
|
74
|
+
remove_instance_variable :@alpha_code_index if defined? @alpha_code_index
|
75
|
+
remove_instance_variable :@codepoints_index if defined? @codepoints_index
|
76
|
+
end
|
77
|
+
|
78
|
+
private
|
79
|
+
|
80
|
+
def initialize
|
81
|
+
@all = []
|
82
|
+
|
83
|
+
load_data_files
|
84
|
+
end
|
85
|
+
|
86
|
+
def insertion_mutex
|
87
|
+
@insertion_mutex ||= Mutex.new
|
88
|
+
end
|
89
|
+
|
90
|
+
def load_data_files
|
91
|
+
Db::Gemojione.new(index: self).load!
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative 'lib/tanuki_emoji/version'
|
4
|
+
|
5
|
+
Gem::Specification.new do |spec|
|
6
|
+
spec.name = 'tanuki_emoji'
|
7
|
+
spec.version = TanukiEmoji::VERSION
|
8
|
+
spec.authors = ['Gabriel Mazetto']
|
9
|
+
spec.email = ['brodock@gmail.com']
|
10
|
+
|
11
|
+
spec.summary = %q{Tanuki Emoji}
|
12
|
+
spec.description = %q{Tanuki Emoji provides Emoji character information and metadata with support for Noto Emoji resources as fallback}
|
13
|
+
spec.homepage = 'https://gitlab.com/brodock/tanuki_emoji'
|
14
|
+
spec.license = 'MIT'
|
15
|
+
spec.required_ruby_version = Gem::Requirement.new(">= 2.7.0")
|
16
|
+
|
17
|
+
spec.metadata['homepage_uri'] = spec.homepage
|
18
|
+
spec.metadata['source_code_uri'] = 'https://gitlab.com/brodock/tanuki_emoji'
|
19
|
+
spec.metadata['changelog_uri'] = "https://gitlab.com/brodock/tanuki_emoji/-/blob/main/CHANGELOG.md"
|
20
|
+
|
21
|
+
# Specify which files should be added to the gem when it is released.
|
22
|
+
# The `git ls-files -z` loads the files in the RubyGem that have been added into git.
|
23
|
+
spec.files = Dir.chdir(File.expand_path(__dir__)) do
|
24
|
+
`git ls-files -z`.split("\x0").reject { |f| f.match(%r{\A(?:test|spec|features)/}) }
|
25
|
+
end
|
26
|
+
spec.bindir = 'exe'
|
27
|
+
spec.executables = spec.files.grep(%r{\Aexe/}) { |f| File.basename(f) }
|
28
|
+
spec.require_paths = ['lib']
|
29
|
+
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
changelog
|
2
|
+
---------
|
3
|
+
|
4
|
+
####UPDATE 2019-07-22
|
5
|
+
* additions
|
6
|
+
* Unicode 12 charcters
|
7
|
+
|
8
|
+
|
9
|
+
####UPDATE 2017-06-30
|
10
|
+
* additions
|
11
|
+
* Unicode 10 charcters
|
12
|
+
|
13
|
+
* changes
|
14
|
+
* inclusion of output code point attribute, used to generate native Unicode
|
15
|
+
|
16
|
+
|
17
|
+
####UPDATE 2017-04-15
|
18
|
+
* additions
|
19
|
+
* gender based roles
|
20
|
+
* aliases for diversity naming convention (e.g. tone1 = light_skin_tone)
|
21
|
+
|
22
|
+
* changes
|
23
|
+
* in a previous version, csv columns were renamed to more closely match the json attribute labels. now we've updated "alpha code" to "alpha_code" for closer alignment
|
24
|
+
* we've removed the versioning from this data set now that it's part of the JoyPixels repo
|
25
|
+
|
26
|
+
|
27
|
+
####1.1 / 2016-07-19
|
28
|
+
|
29
|
+
* additions
|
30
|
+
* all of unicode 9
|
31
|
+
* :gay_pride_flag:
|
32
|
+
|
33
|
+
* important note
|
34
|
+
* because aliases are pipe-delimited strings, we have removed square bracket encapsulation and replaced with double-quote encapsulation
|
35
|
+
|
36
|
+
####0.9 / 2016-04-05
|
37
|
+
|
38
|
+
* additions
|
39
|
+
* :paw_prints: alias to paw prints
|
40
|
+
* :thumbup: alias to thumbs up sign
|
41
|
+
* :thumbup_tone1: alias to thumbs up sign tone 1
|
42
|
+
* :thumbup_tone2: alias to thumbs up sign tone 2
|
43
|
+
* :thumbup_tone3: alias to thumbs up sign tone 3
|
44
|
+
* :thumbup_tone4: alias to thumbs up sign tone 4
|
45
|
+
* :thumbup_tone5: alias to thumbs up sign tone 5
|
46
|
+
* :thumbdown: alias to thumbs down sign
|
47
|
+
* :thumbdown_tone1: alias to thumbs down sign tone 1
|
48
|
+
* :thumbdown_tone2: alias to thumbs down sign tone 2
|
49
|
+
* :thumbdown_tone3: alias to thumbs down sign tone 3
|
50
|
+
* :thumbdown_tone4: alias to thumbs down sign tone 4
|
51
|
+
* :thumbdown_tone5: alias to thumbs down sign tone 5
|
52
|
+
|
53
|
+
####0.8 / 2015-12-17
|
54
|
+
|
55
|
+
* Initial commit
|
@@ -0,0 +1,416 @@
|
|
1
|
+
# Emoji Alpha Codes
|
2
|
+
|
3
|
+
### WHAT ARE EMOJI ALPHA CODES?
|
4
|
+
|
5
|
+
An EAC (some know them as cheat codes, shortnames, or short codes) are emoji keywords wrapped in colons such as :emoji: as an alternative/convenient method to inserting emoij graphics directly into message forms without having to use a separate emoji picker or pasting the emoji unicode.
|
6
|
+
|
7
|
+
### PURPOSE OF THIS DATA
|
8
|
+
|
9
|
+
The purpose is to unify various alpha code lists into a single table developers could contribute to and share. With a few different tables floating around, we've done our best to organize and de-fragment the tables. To do this, we've divided the codes into a primary and secondary category. The single "primary" EAC code is the main identifier and the "secondary" EAC code(s) are alternatives. This gives the site developer the option to allow either a primary or secondary code to be entered to call a single emoji.
|
10
|
+
|
11
|
+
Our goal here is to help everyone involved and we appreciate contributions to this list. Please know we don't recommend the primary EAC's change unless there's a major reason for it.
|
12
|
+
|
13
|
+
### THE FILES
|
14
|
+
|
15
|
+
We've included the current list of emoji alpha codes in two formats, json and csv. In each file the data is primarily arranged by unicode code point. The files are structured as such.
|
16
|
+
|
17
|
+
##### JSON
|
18
|
+
|
19
|
+
```
|
20
|
+
{
|
21
|
+
"1f600": {
|
22
|
+
"output": "1f601",
|
23
|
+
"name": "grinning face",
|
24
|
+
"alpha_code": ":grinning:",
|
25
|
+
"aliases": ""
|
26
|
+
},
|
27
|
+
"1f642": {
|
28
|
+
"output": "1f642",
|
29
|
+
"name": "slightly smiling face",
|
30
|
+
"alpha_code": ":slight_smile:",
|
31
|
+
"aliases": ":slightly_smiling_face:"
|
32
|
+
},
|
33
|
+
"1f36e": {
|
34
|
+
"output": "1f46e",
|
35
|
+
"name": "custard",
|
36
|
+
"alpha_code": ":custard:",
|
37
|
+
"aliases": ":pudding:|:flan:"
|
38
|
+
}
|
39
|
+
}
|
40
|
+
```
|
41
|
+
|
42
|
+
##### CSV
|
43
|
+
|
44
|
+
```
|
45
|
+
“unicode”, "output", “name”, "alpha_code”, “aliases”
|
46
|
+
```
|
47
|
+
|
48
|
+
### LICENSE
|
49
|
+
|
50
|
+
* License: MIT
|
51
|
+
* Complete Legal Terms: http://opensource.org/licenses/MIT
|
52
|
+
|
53
|
+
### PRIMARY SHORTNAME CHANGES
|
54
|
+
The following is a list of shortnames that have been moved into the ":aliases:" column and replaced by a new primary shortname (alpha code), as of the JoyPixels 3.0 update (April 2017).
|
55
|
+
|
56
|
+
```
|
57
|
+
Previous Shortname,New Shortname
|
58
|
+
|
59
|
+
:golfer:,:person_golfing:
|
60
|
+
|
61
|
+
:man_with_turban:,:person_wearing_turban:
|
62
|
+
|
63
|
+
:man_with_turban_tone1:,:person_wearing_turban_tone1:
|
64
|
+
|
65
|
+
:man_with_turban_tone2:,:person_wearing_turban_tone2:
|
66
|
+
|
67
|
+
:man_with_turban_tone3:,:person_wearing_turban_tone3:
|
68
|
+
|
69
|
+
:man_with_turban_tone4:,:person_wearing_turban_tone4:
|
70
|
+
|
71
|
+
:man_with_turban_tone5:,:person_wearing_turban_tone5:
|
72
|
+
|
73
|
+
:man_with_gua_pi_mao:,:man_with_chinese_cap:
|
74
|
+
|
75
|
+
:man_with_gua_pi_mao_tone1:,:man_with_chinese_cap_tone1:
|
76
|
+
|
77
|
+
:man_with_gua_pi_mao_tone2:,:man_with_chinese_cap_tone2:
|
78
|
+
|
79
|
+
:man_with_gua_pi_mao_tone3:,:man_with_chinese_cap_tone3:
|
80
|
+
|
81
|
+
:man_with_gua_pi_mao_tone4:,:man_with_chinese_cap_tone4:
|
82
|
+
|
83
|
+
:man_with_gua_pi_mao_tone5:,:man_with_chinese_cap_tone5:
|
84
|
+
|
85
|
+
:dancers:,:people_with_bunny_ears_partying:
|
86
|
+
|
87
|
+
:runner:,:person_running:
|
88
|
+
|
89
|
+
:runner_tone1:,:person_running_tone1:
|
90
|
+
|
91
|
+
:runner_tone2:,:person_running_tone2:
|
92
|
+
|
93
|
+
:runner_tone3:,:person_running_tone3:
|
94
|
+
|
95
|
+
:runner_tone4:,:person_running_tone4:
|
96
|
+
|
97
|
+
:runner_tone5:,:person_running_tone5:
|
98
|
+
|
99
|
+
:walking:,:person_walking:
|
100
|
+
|
101
|
+
:walking_tone1:,:person_walking_tone1:
|
102
|
+
|
103
|
+
:walking_tone2:,:person_walking_tone2:
|
104
|
+
|
105
|
+
:walking_tone3:,:person_walking_tone3:
|
106
|
+
|
107
|
+
:walking_tone4:,:person_walking_tone4:
|
108
|
+
|
109
|
+
:walking_tone5:,:person_walking_tone5:
|
110
|
+
|
111
|
+
:haircut:,:person_getting_haircut:
|
112
|
+
|
113
|
+
:haircut_tone1:,:person_getting_haircut_tone1:
|
114
|
+
|
115
|
+
:haircut_tone2:,:person_getting_haircut_tone2:
|
116
|
+
|
117
|
+
:haircut_tone3:,:person_getting_haircut_tone3:
|
118
|
+
|
119
|
+
:haircut_tone4:,:person_getting_haircut_tone4:
|
120
|
+
|
121
|
+
:haircut_tone5:,:person_getting_haircut_tone5:
|
122
|
+
|
123
|
+
:massage:,:person_getting_massage:
|
124
|
+
|
125
|
+
:massage_tone1:,:person_getting_massage_tone1:
|
126
|
+
|
127
|
+
:massage_tone2:,:person_getting_massage_tone2:
|
128
|
+
|
129
|
+
:massage_tone3:,:person_getting_massage_tone3:
|
130
|
+
|
131
|
+
:massage_tone4:,:person_getting_massage_tone4:
|
132
|
+
|
133
|
+
:massage_tone5:,:person_getting_massage_tone5:
|
134
|
+
|
135
|
+
:shrug:,:person_shrugging:
|
136
|
+
|
137
|
+
:shrug_tone1:,:person_shrugging_tone1:
|
138
|
+
|
139
|
+
:shrug_tone2:,:person_shrugging_tone2:
|
140
|
+
|
141
|
+
:shrug_tone3:,:person_shrugging_tone3:
|
142
|
+
|
143
|
+
:shrug_tone4:,:person_shrugging_tone4:
|
144
|
+
|
145
|
+
:shrug_tone5:,:person_shrugging_tone5:
|
146
|
+
|
147
|
+
:face_palm:,:person_facepalming:
|
148
|
+
|
149
|
+
:face_palm_tone1:,:person_facepalming_tone1:
|
150
|
+
|
151
|
+
:face_palm_tone2:,:person_facepalming_tone2:
|
152
|
+
|
153
|
+
:face_palm_tone3:,:person_facepalming_tone3:
|
154
|
+
|
155
|
+
:face_palm_tone4:,:person_facepalming_tone4:
|
156
|
+
|
157
|
+
:face_palm_tone5:,:person_facepalming_tone5:
|
158
|
+
|
159
|
+
:wrestlers:,:people_wrestling:
|
160
|
+
|
161
|
+
:cop:,:police_officer:
|
162
|
+
|
163
|
+
:cop_tone1:,:police_officer_tone1:
|
164
|
+
|
165
|
+
:cop_tone2:,:police_officer_tone2:
|
166
|
+
|
167
|
+
:cop_tone3:,:police_officer_tone3:
|
168
|
+
|
169
|
+
:cop_tone4:,:police_officer_tone4:
|
170
|
+
|
171
|
+
:cop_tone5:,:police_officer_tone5:
|
172
|
+
|
173
|
+
:spy:,:detective:
|
174
|
+
|
175
|
+
:spy_tone1:,:detective_tone1:
|
176
|
+
|
177
|
+
:spy_tone2:,:detective_tone2:
|
178
|
+
|
179
|
+
:spy_tone3:,:detective_tone3:
|
180
|
+
|
181
|
+
:spy_tone4:,:detective_tone4:
|
182
|
+
|
183
|
+
:spy_tone5:,:detective_tone5:
|
184
|
+
|
185
|
+
:guardsman:,:guard:
|
186
|
+
|
187
|
+
:guardsman_tone1:,:guard_tone1:
|
188
|
+
|
189
|
+
:guardsman_tone2:,:guard_tone2:
|
190
|
+
|
191
|
+
:guardsman_tone3:,:guard_tone3:
|
192
|
+
|
193
|
+
:guardsman_tone4:,:guard_tone4:
|
194
|
+
|
195
|
+
:guardsman_tone5:,:guard_tone5:
|
196
|
+
|
197
|
+
:person_with_blond_hair:,:blond_haired_person:
|
198
|
+
|
199
|
+
:person_with_blond_hair_tone1:,:blond_haired_person_tone1:
|
200
|
+
|
201
|
+
:person_with_blond_hair_tone2:,:blond_haired_person_tone2:
|
202
|
+
|
203
|
+
:person_with_blond_hair_tone3:,:blond_haired_person_tone3:
|
204
|
+
|
205
|
+
:person_with_blond_hair_tone4:,:blond_haired_person_tone4:
|
206
|
+
|
207
|
+
:person_with_blond_hair_tone5:,:blond_haired_person_tone5:
|
208
|
+
|
209
|
+
:person_with_pouting_face:,:person_pouting:
|
210
|
+
|
211
|
+
:person_with_pouting_face_tone1:,:person_pouting_tone1:
|
212
|
+
|
213
|
+
:person_with_pouting_face_tone2:,:person_pouting_tone2:
|
214
|
+
|
215
|
+
:person_with_pouting_face_tone3:,:person_pouting_tone3:
|
216
|
+
|
217
|
+
:person_with_pouting_face_tone4:,:person_pouting_tone4:
|
218
|
+
|
219
|
+
:person_with_pouting_face_tone5:,:person_pouting_tone5:
|
220
|
+
|
221
|
+
:no_good:,:person_gesturing_no:
|
222
|
+
|
223
|
+
:no_good_tone1:,:person_gesturing_no_tone1:
|
224
|
+
|
225
|
+
:no_good_tone2:,:person_gesturing_no_tone2:
|
226
|
+
|
227
|
+
:no_good_tone3:,:person_gesturing_no_tone3:
|
228
|
+
|
229
|
+
:no_good_tone4:,:person_gesturing_no_tone4:
|
230
|
+
|
231
|
+
:no_good_tone5:,:person_gesturing_no_tone5:
|
232
|
+
|
233
|
+
:ok_woman:,:person_gesturing_ok:
|
234
|
+
|
235
|
+
:ok_woman_tone1:,:person_gesturing_ok_tone1:
|
236
|
+
|
237
|
+
:ok_woman_tone2:,:person_gesturing_ok_tone2:
|
238
|
+
|
239
|
+
:ok_woman_tone3:,:person_gesturing_ok_tone3:
|
240
|
+
|
241
|
+
:ok_woman_tone4:,:person_gesturing_ok_tone4:
|
242
|
+
|
243
|
+
:ok_woman_tone5:,:person_gesturing_ok_tone5:
|
244
|
+
|
245
|
+
:information_desk_person:,:person_tipping_hand:
|
246
|
+
|
247
|
+
:information_desk_person_tone1:,:person_tipping_hand_tone1:
|
248
|
+
|
249
|
+
:information_desk_person_tone2:,:person_tipping_hand_tone2:
|
250
|
+
|
251
|
+
:information_desk_person_tone3:,:person_tipping_hand_tone3:
|
252
|
+
|
253
|
+
:information_desk_person_tone4:,:person_tipping_hand_tone4:
|
254
|
+
|
255
|
+
:information_desk_person_tone5:,:person_tipping_hand_tone5:
|
256
|
+
|
257
|
+
:raising_hand:,:person_raising_hand:
|
258
|
+
|
259
|
+
:raising_hand_tone1:,:person_raising_hand_tone1:
|
260
|
+
|
261
|
+
:raising_hand_tone2:,:person_raising_hand_tone2:
|
262
|
+
|
263
|
+
:raising_hand_tone3:,:person_raising_hand_tone3:
|
264
|
+
|
265
|
+
:raising_hand_tone4:,:person_raising_hand_tone4:
|
266
|
+
|
267
|
+
:raising_hand_tone5:,:person_raising_hand_tone5:
|
268
|
+
|
269
|
+
:bow:,:person_bowing:
|
270
|
+
|
271
|
+
:bow_tone1:,:person_bowing_tone1:
|
272
|
+
|
273
|
+
:bow_tone2:,:person_bowing_tone2:
|
274
|
+
|
275
|
+
:bow_tone3:,:person_bowing_tone3:
|
276
|
+
|
277
|
+
:bow_tone4:,:person_bowing_tone4:
|
278
|
+
|
279
|
+
:bow_tone5:,:person_bowing_tone5:
|
280
|
+
|
281
|
+
:fencer:,:person_fencing:
|
282
|
+
|
283
|
+
:surfer:,:person_surfing:
|
284
|
+
|
285
|
+
:surfer_tone1:,:person_surfing_tone1:
|
286
|
+
|
287
|
+
:surfer_tone2:,:person_surfing_tone2:
|
288
|
+
|
289
|
+
:surfer_tone3:,:person_surfing_tone3:
|
290
|
+
|
291
|
+
:surfer_tone4:,:person_surfing_tone4:
|
292
|
+
|
293
|
+
:surfer_tone5:,:person_surfing_tone5:
|
294
|
+
|
295
|
+
:rowboat:,:person_rowing_boat:
|
296
|
+
|
297
|
+
:rowboat_tone1:,:person_rowing_boat_tone1:
|
298
|
+
|
299
|
+
:rowboat_tone2:,:person_rowing_boat_tone2:
|
300
|
+
|
301
|
+
:rowboat_tone3:,:person_rowing_boat_tone3:
|
302
|
+
|
303
|
+
:rowboat_tone4:,:person_rowing_boat_tone4:
|
304
|
+
|
305
|
+
:rowboat_tone5:,:person_rowing_boat_tone5:
|
306
|
+
|
307
|
+
:swimmer:,:person_swimming:
|
308
|
+
|
309
|
+
:swimmer_tone1:,:person_swimming_tone1:
|
310
|
+
|
311
|
+
:swimmer_tone2:,:person_swimming_tone2:
|
312
|
+
|
313
|
+
:swimmer_tone3:,:person_swimming_tone3:
|
314
|
+
|
315
|
+
:swimmer_tone4:,:person_swimming_tone4:
|
316
|
+
|
317
|
+
:swimmer_tone5:,:person_swimming_tone5:
|
318
|
+
|
319
|
+
:basketball_player:,:person_bouncing_ball:
|
320
|
+
|
321
|
+
:basketball_player_tone1:,:person_bouncing_ball_tone1:
|
322
|
+
|
323
|
+
:basketball_player_tone2:,:person_bouncing_ball_tone2:
|
324
|
+
|
325
|
+
:basketball_player_tone3:,:person_bouncing_ball_tone3:
|
326
|
+
|
327
|
+
:basketball_player_tone4:,:person_bouncing_ball_tone4:
|
328
|
+
|
329
|
+
:basketball_player_tone5:,:person_bouncing_ball_tone5:
|
330
|
+
|
331
|
+
:lifter:,:person_lifting_weights:
|
332
|
+
|
333
|
+
:lifter_tone1:,:person_lifting_weights_tone1:
|
334
|
+
|
335
|
+
:lifter_tone2:,:person_lifting_weights_tone2:
|
336
|
+
|
337
|
+
:lifter_tone3:,:person_lifting_weights_tone3:
|
338
|
+
|
339
|
+
:lifter_tone4:,:person_lifting_weights_tone4:
|
340
|
+
|
341
|
+
:lifter_tone5:,:person_lifting_weights_tone5:
|
342
|
+
|
343
|
+
:bicyclist:,:person_biking:
|
344
|
+
|
345
|
+
:bicyclist_tone1:,:person_biking_tone1:
|
346
|
+
|
347
|
+
:bicyclist_tone2:,:person_biking_tone2:
|
348
|
+
|
349
|
+
:bicyclist_tone3:,:person_biking_tone3:
|
350
|
+
|
351
|
+
:bicyclist_tone4:,:person_biking_tone4:
|
352
|
+
|
353
|
+
:bicyclist_tone5:,:person_biking_tone5:
|
354
|
+
|
355
|
+
:mountain_bicyclist:,:person_mountain_biking:
|
356
|
+
|
357
|
+
:mountain_bicyclist_tone1:,:person_mountain_biking_tone1:
|
358
|
+
|
359
|
+
:mountain_bicyclist_tone2:,:person_mountain_biking_tone2:
|
360
|
+
|
361
|
+
:mountain_bicyclist_tone3:,:person_mountain_biking_tone3:
|
362
|
+
|
363
|
+
:mountain_bicyclist_tone4:,:person_mountain_biking_tone4:
|
364
|
+
|
365
|
+
:mountain_bicyclist_tone5:,:person_mountain_biking_tone5:
|
366
|
+
|
367
|
+
:water_polo:,:person_playing_water_polo:
|
368
|
+
|
369
|
+
:water_polo_tone1:,:person_playing_water_polo_tone1:
|
370
|
+
|
371
|
+
:water_polo_tone2:,:person_playing_water_polo_tone2:
|
372
|
+
|
373
|
+
:water_polo_tone3:,:person_playing_water_polo_tone3:
|
374
|
+
|
375
|
+
:water_polo_tone4:,:person_playing_water_polo_tone4:
|
376
|
+
|
377
|
+
:water_polo_tone5:,:person_playing_water_polo_tone5:
|
378
|
+
|
379
|
+
:handball:,:person_playing_handball:
|
380
|
+
|
381
|
+
:handball_tone1:,:person_playing_handball_tone1:
|
382
|
+
|
383
|
+
:handball_tone2:,:person_playing_handball_tone2:
|
384
|
+
|
385
|
+
:handball_tone3:,:person_playing_handball_tone3:
|
386
|
+
|
387
|
+
:handball_tone4:,:person_playing_handball_tone4:
|
388
|
+
|
389
|
+
:handball_tone5:,:person_playing_handball_tone5:
|
390
|
+
|
391
|
+
:juggling:,:person_juggling:
|
392
|
+
|
393
|
+
:juggling_tone1:,:person_juggling_tone1:
|
394
|
+
|
395
|
+
:juggling_tone2:,:person_juggling_tone2:
|
396
|
+
|
397
|
+
:juggling_tone3:,:person_juggling_tone3:
|
398
|
+
|
399
|
+
:juggling_tone4:,:person_juggling_tone4:
|
400
|
+
|
401
|
+
:juggling_tone5:,:person_juggling_tone5:
|
402
|
+
|
403
|
+
:levitating:,:man_in_business_suit_levitating:
|
404
|
+
|
405
|
+
:cartwheel:,:person_doing_cartwheel:
|
406
|
+
|
407
|
+
:cartwheel_tone1:,:person_doing_cartwheel_tone1:
|
408
|
+
|
409
|
+
:cartwheel_tone2:,:person_doing_cartwheel_tone2:
|
410
|
+
|
411
|
+
:cartwheel_tone3:,:person_doing_cartwheel_tone3:
|
412
|
+
|
413
|
+
:cartwheel_tone4:,:person_doing_cartwheel_tone4:
|
414
|
+
|
415
|
+
:cartwheel_tone5:,:person_doing_cartwheel_tone5:
|
416
|
+
```
|