Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Shortcode search #9

Merged
merged 53 commits into from
Oct 3, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
53 commits
Select commit Hold shift + click to select a range
951b016
Restructured directory for emoji packs
MyriaCore Jun 27, 2020
08c6cd5
Downloaded and added twemoji emoji (all 72x72 pngs)
MyriaCore Jun 27, 2020
56fda08
Added a function for updating the extension icon
MyriaCore Jun 27, 2020
beae69b
Apparently, downgit.github.io only gives you the first 1000 files :sob:
MyriaCore Jun 27, 2020
3205463
Added blobs just for fun, credited emoji repos
MyriaCore Jun 27, 2020
0723d70
Updated icons for noto emoji and twemoji
MyriaCore Jun 27, 2020
11287c8
Added Emoji Style option in settings menu
MyriaCore Jun 27, 2020
72fbbff
Initial Scraper Modifications
MyriaCore Jun 27, 2020
9e9d8a6
Synced existing code & assets w/ database changes
MyriaCore Jun 27, 2020
8115b76
Tested Scraper
MyriaCore Jun 27, 2020
453ad75
implemented changes to twemoji url generation
MyriaCore Jun 28, 2020
4ba63af
Tested EmojiSpider again
MyriaCore Jun 28, 2020
0946e88
Added file/db writing logic back into EmojiSpider
MyriaCore Jun 28, 2020
d111644
Forgot to uncomment the fix for the link generation
MyriaCore Jun 28, 2020
803615d
Image Paths updated, Main now fetches icons properly from db
MyriaCore Jun 28, 2020
3e48cea
Polishing Updates
MyriaCore Jun 28, 2020
64fedbc
Search Icon now dynamically changes with the setting
MyriaCore Jun 28, 2020
2b1c809
Provided more sensible defaults
MyriaCore Jun 28, 2020
dedcb9e
Changed name back (forgot it was 'system emoji' lol)
MyriaCore Jun 28, 2020
94cf9f0
Provided a more user-friendly representation of skin tone settings
MyriaCore Jun 28, 2020
581e3a3
Updated readme with more up-to-date screenshots
MyriaCore Jun 28, 2020
4136e5e
fixed dead link
MyriaCore Jun 28, 2020
2f91feb
improved wording
MyriaCore Jun 28, 2020
ad368f5
Fixed typo
MyriaCore Jun 28, 2020
f583916
Renamed function and edited comments to be more intuitive/informative
MyriaCore Jun 28, 2020
7481b5a
Changed up architecture a bit
MyriaCore Jul 14, 2020
9ae4564
Fixed the issue with multi-line quoting
MyriaCore Jul 14, 2020
2cdd2c8
Tested and Debugged EmojiSpider, fallback emoji styles should work pr…
MyriaCore Jul 14, 2020
a1bf312
Added a function that retrieves emoji codes
MyriaCore Jul 20, 2020
00f5245
Reformatted create table script
MyriaCore Jul 20, 2020
d6974b3
🚧💡 Added shortcodes to name_search column in spider logic
MyriaCore Jul 20, 2020
9685edd
🚧🎨 Improved readability of sqlite query
MyriaCore Jul 20, 2020
8727e9d
🚧🏗 Added a dedicated shortcodes column in the emojis table
MyriaCore Jul 20, 2020
835589e
🚧✨ Added a new search setting
MyriaCore Jul 20, 2020
8898472
🚧✨ Integrated the new search setting with the main logic
MyriaCore Jul 20, 2020
88df330
🚧🐛 Resolving Bugs with current setup
MyriaCore Jul 20, 2020
ee11208
🚧✨ Made the EmojiSpider printouts a bit prettier
MyriaCore Jul 20, 2020
0ee66a5
🚧🍱 Ran Emoji Spider
MyriaCore Jul 20, 2020
1fc31ad
Prepared DB for structure updates
MyriaCore Jul 21, 2020
b7f436b
🐛 Fixed name encoding bug
MyriaCore Jul 21, 2020
d0d8ac4
🎨 Reformatted main search query to be a bit less awful
MyriaCore Jul 21, 2020
1e8a008
✨🎨 Drafted the extension search logic
MyriaCore Jul 21, 2020
29e5b18
🐛 Fixed enough bugs to make a small version run
MyriaCore Jul 21, 2020
c20f4c5
:fire: Removed break statement (used for debugging)
MyriaCore Jul 21, 2020
85f6dd1
Updated DB w/ spider logic
MyriaCore Jul 21, 2020
e119d35
✨ Emoji list is now better ordered
MyriaCore Jul 22, 2020
a10bc58
🐛 This might fix the skin tone bug
MyriaCore Jul 22, 2020
f8b4f92
🚸 Searching w/ shortcodes now filters shortcodes for the same emoji
MyriaCore Jul 23, 2020
5e67599
🗃 Updated DB with modifier emote data
MyriaCore Jul 23, 2020
c24f37c
🍱 Updated images with modifier emotes
MyriaCore Jul 23, 2020
bdcda22
🔥 Removed shortcode search setting
MyriaCore Jul 23, 2020
44ec152
📝 Added shortcode search screenshot to readme
MyriaCore Jul 23, 2020
acc0244
📝 Made readme a bit more presentable
MyriaCore Jul 23, 2020
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
The diff you're trying to view is too large. We only load the first 3000 changed files.
155 changes: 127 additions & 28 deletions EmojiSpider.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,14 @@
import os
import re
import scrapy
import requests
import lxml.html
import sqlite3
import shutil
import base64


ICONS_PATH = 'images/emoji'
EMOJI_STYLES = ['apple', 'twemoji', 'noto', 'blobmoji']
ICONS_PATH = lambda s: 'images/%s/emoji' % s
DB_PATH = 'emoji.sqlite'


Expand All @@ -19,18 +21,38 @@ def rm_r(path):


def cleanup():
rm_r(ICONS_PATH)
for style in EMOJI_STYLES: rm_r(ICONS_PATH(style))
rm_r(DB_PATH)
os.makedirs(ICONS_PATH)

for style in EMOJI_STYLES: os.makedirs(ICONS_PATH(style))

def setup_db():
conn = sqlite3.connect('emoji.sqlite', check_same_thread=False)
conn.executescript('''
CREATE TABLE emoji (name VARCHAR PRIMARY KEY, code VARCHAR,
icon VARCHAR, keywords VARCHAR, name_search VARCHAR);
CREATE TABLE skin_tone (name VARCHAR, code VARCHAR, icon VARCHAR, tone VARCHAR);
CREATE INDEX name_idx ON skin_tone (name);''')
CREATE TABLE emoji (
name VARCHAR PRIMARY KEY,
code VARCHAR,
icon_apple VARCHAR,
icon_twemoji VARCHAR,
icon_noto VARCHAR,
icon_blobmoji VARCHAR,
keywords VARCHAR,
name_search VARCHAR
);
CREATE TABLE skin_tone (
name VARCHAR,
code VARCHAR,
tone VARCHAR,
icon_apple VARCHAR,
icon_twemoji VARCHAR,
icon_noto VARCHAR,
icon_blobmoji VARCHAR
);
CREATE TABLE shortcode (
name VARCHAR,
code VARCHAR
);
CREATE INDEX name_idx ON skin_tone (name);
''')
conn.row_factory = sqlite3.Row

return conn
Expand All @@ -40,56 +62,133 @@ def str_to_unicode_emoji(s):
"""
Converts 'U+FE0E' to u'\U0000FE0E'
"""
return re.sub(r'U\+([0-9a-fA-F]+)', lambda m: unichr(int(m.group(1), 16)), s).replace(' ', '')
return re.sub(r'U\+([0-9a-fA-F]+)', lambda m: chr(int(m.group(1), 16)), s).replace(' ', '')


def codepoint_to_url(codepoint, style):
"""
Given an emoji's codepoint (e.g. 'U+FE0E') and a non-apple emoji style,
returns a url to to the png image of the emoji in that style.

Only works for style = 'twemoji', 'noto', and 'blobmoji'.
"""
base = codepoint.replace('U+', '').lower()
if style == 'twemoji':
# See discussion in commit 8115b76 for more information about
# why the base needs to be patched like this.
patched = re.sub(r'0*([1-9a-f][0-9a-f]*)', lambda m: m.group(1),
base.replace(' ', '-').replace('fe0f-20e3', '20e3').replace('1f441-fe0f-200d-1f5e8-fe0f', '1f441-200d-1f5e8'))
response = requests.get('https://github.com/twitter/twemoji/raw/gh-pages/v/latest')
version = response.text if response.ok else None
if version:
return 'https://github.com/twitter/twemoji/raw/gh-pages/v/%s/72x72/%s.png' \
% (version, patched)
else:
return 'https://github.com/twitter/twemoji/raw/master/assets/72x72/%s.png' \
% patched
elif style == 'noto':
return 'https://github.com/googlefonts/noto-emoji/raw/master/png/128/emoji_u%s.png' \
% base.replace(' ', '_')
elif style == 'blobmoji':
return 'https://github.com/C1710/blobmoji/raw/master/png/128/emoji_u%s.png' \
% base.replace(' ', '_')

def name_to_shortcodes(shortname):
"""
Given an emoji's CLDR Shortname (e.g. 'grinning face with smiling eyes'), returns a list
of common shortcodes used for that emoji.

NOTE: These shortcodes will NOT have colons at the beginning and end, even if they normally
would.
"""
url = 'https://emojipedia.org/%s/' % re.sub(r'[^a-z0-9 ]', '', shortname.lower()).replace(' ', '-')
response = requests.get(url, stream=True)
response.raw.decode_content = True
html = lxml.html.parse(response.raw) if response.ok else None
shortcode_nodes = html.xpath('//ul[@class="shortcodes"]/li/span[@class="shortcode"]') if html else []
return [s.text for s in shortcode_nodes]

cleanup()
conn = setup_db()


class EmojiSpider(scrapy.Spider):
name = 'emojispider'
start_urls = ['http://unicode.org/emoji/charts/emoji-list.html']
start_urls = ['http://unicode.org/emoji/charts/emoji-list.html',
'http://unicode.org/emoji/charts/full-emoji-modifiers.html']
# start_urls = ['http://172.17.0.1:8000/list2.html']

def parse(self, response):
icon = 0
for tr in response.xpath('//tr[.//td[@class="code"]]'):
code = str_to_unicode_emoji(tr.css('.code a::text').extract_first())
emoji_nodes = response.xpath('//tr[.//td[@class="code"]]')
for i in range(0, len(emoji_nodes)):
# Scrape Data from unicode.org
tr = emoji_nodes[i]
code = tr.css('.code a::text').extract_first()
encoded_code = str_to_unicode_emoji(code)
name = ''.join(tr.xpath('(.//td[@class="name"])[1]//text()').extract())
keywords = ''.join(tr.xpath('(.//td[@class="name"])[2]//text()').extract())
keywords = ' '.join([kw.strip() for kw in keywords.split('|') if 'skin tone' not in kw])
icon_b64 = tr.css('.andr img').xpath('@src').extract_first().split('base64,')[1]
name = name.replace(u'⊛', '').strip()
icon_name = name.replace(':', '').replace(' ', '_')
skin_tone = ''
found = re.search(r'(?P<skin_tone>[-\w]+) skin tone', name, re.I)
if found:
skin_tone = found.group('skin_tone')
name = name.replace(': %s skin tone' % skin_tone, '')
shortcodes = name_to_shortcodes(name)

# Prepare emoji data to be inserted into DB
print("Fetching %i/%i: %s %s" % (i+1, len(emoji_nodes), encoded_code, name))
record = {
'name': name,
'icon': '%s/%s.png' % (ICONS_PATH, icon_name.encode('ascii', 'ignore')),
'code': code,
'code': encoded_code,
'shortcodes': ' '.join(shortcodes),
'keywords': keywords,
'tone': skin_tone,
'name_search': ' '.join(set(
[kw.strip() for kw in ('%s %s' % (name, keywords)).split(' ')]
))
[s[1:-1] for s in shortcodes] + [kw.strip() for kw in ('%s %s' % (name, keywords)).split(' ')]
)),
# Merge icon styles into record
**{ 'icon_%s' % style: '%s/%s.png' \
% (ICONS_PATH(style), icon_name) \
for style in EMOJI_STYLES \
}
}

with open(record['icon'], 'w') as f:
f.write(base64.decodestring(icon_b64))

# Download Icons for each emoji
print("🖼 Downloading Icons...")
supported_styles = []
for style in EMOJI_STYLES:
if style == 'apple':
icon_data = tr.css('.andr img').xpath('@src').extract_first().split('base64,')[1]
icon_data = base64.decodestring(icon_data.encode('utf-8'))
else:
link = codepoint_to_url(code, style)
resp = requests.get(link)
icon_data = resp.content if resp.ok else None
print('- %s: %s' % ('✅' if resp.ok else '❎', style))

if icon_data:
with open(record['icon_%s' % style], 'wb') as f:
f.write(icon_data)
supported_styles += [style]

# Prepare emoji insertion query
supported_styles = ['icon_%s' % style for style in supported_styles]
if skin_tone:
query = '''INSERT INTO skin_tone (icon, code, name, tone)
VALUES (:icon, :code, :name, :tone)'''
query = '''INSERT INTO skin_tone (name, code, tone, ''' + ', '.join(supported_styles) + ''')
VALUES (:name, :code, :tone, ''' + ', '.join([':%s' % s for s in supported_styles]) + ''')'''
else:
query = '''INSERT INTO emoji (icon, code, name, keywords, name_search)
VALUES (:icon, :code, :name, :keywords, :name_search)'''
query = '''INSERT INTO emoji (name, code, ''' + ', '.join(supported_styles) + ''',
keywords, name_search)
VALUES (:name, :code, ''' + ', '.join([':%s' % s for s in supported_styles]) + ''',
:keywords, :name_search)'''

# Insert emoji & associated shortcodes into DB
conn.execute(query, record)

yield record
for sc in shortcodes:
squery = '''INSERT INTO shortcode (name, code)
VALUES (:name, "%s")''' % sc
conn.execute(squery, record)

conn.commit()
22 changes: 21 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,23 @@
# Emoji Extension

<img aligh="center" src="http://i.imgur.com/5jaaUQ5.png">
<table>
<tr>
<td><img src="screenshots/search.png"></td>
<td><img src="screenshots/shortcode-search.png"></td>
</tr>
</table>

## Features

- Supports Twemoji, Blobmoji, and Noto emoji preview renders
- Search by emoji name, *or* by shortcode by beginning the search with `:`
- Support for multiple skin tones via settings

### Settings

![](screenshots/preferences.png)

## Credits

- [emojipedia.org](https://emojipedia.org/) for emoji shortcode data
- [twemoji](https://github.com/twitter/twemoji), [noto-emoji](https://github.com/googlefonts/noto-emoji), and [blobmoji](https://github.com/C1710/blobmoji) for emoji styles :heart:.
Binary file modified emoji.sqlite
Binary file not shown.
Binary file added images/apple/emoji/1st_place_medal.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added images/apple/emoji/2nd_place_medal.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added images/apple/emoji/3rd_place_medal.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added images/apple/emoji/AB_button_(blood_type).png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added images/apple/emoji/ATM_sign.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added images/apple/emoji/A_button_(blood_type).png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added images/apple/emoji/Aquarius.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added images/apple/emoji/Aries.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added images/apple/emoji/BACK_arrow.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added images/apple/emoji/B_button_(blood_type).png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added images/apple/emoji/CL_button.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added images/apple/emoji/COOL_button.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added images/apple/emoji/Cancer.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added images/apple/emoji/Capricorn.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added images/apple/emoji/Christmas_tree.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added images/apple/emoji/END_arrow.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added images/apple/emoji/FREE_button.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added images/apple/emoji/Gemini.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added images/apple/emoji/ID_button.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added images/apple/emoji/Japanese_castle.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added images/apple/emoji/Japanese_dolls.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added images/apple/emoji/Japanese_post_office.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added images/apple/emoji/Japanese_“here”_button.png
Binary file added images/apple/emoji/Leo.png
Binary file added images/apple/emoji/Libra.png
Binary file added images/apple/emoji/Mrs._Claus.png
Binary file added images/apple/emoji/Mrs._Claus_dark_skin_tone.png
Binary file added images/apple/emoji/Mrs._Claus_light_skin_tone.png
Binary file added images/apple/emoji/NEW_button.png
Binary file added images/apple/emoji/NG_button.png
Binary file added images/apple/emoji/OK_button.png
Binary file added images/apple/emoji/OK_hand.png
Binary file added images/apple/emoji/OK_hand_dark_skin_tone.png
Binary file added images/apple/emoji/OK_hand_light_skin_tone.png
Binary file added images/apple/emoji/OK_hand_medium_skin_tone.png
Binary file added images/apple/emoji/ON!_arrow.png
Binary file added images/apple/emoji/O_button_(blood_type).png
Binary file added images/apple/emoji/Ophiuchus.png
Binary file added images/apple/emoji/P_button.png
Binary file added images/apple/emoji/Pisces.png
Binary file added images/apple/emoji/SOON_arrow.png
Binary file added images/apple/emoji/SOS_button.png
Binary file added images/apple/emoji/Sagittarius.png
Binary file added images/apple/emoji/Santa_Claus.png
Binary file added images/apple/emoji/Santa_Claus_dark_skin_tone.png
Binary file added images/apple/emoji/Scorpio.png
Binary file added images/apple/emoji/Statue_of_Liberty.png
Binary file added images/apple/emoji/T-Rex.png
Binary file added images/apple/emoji/TOP_arrow.png
Binary file added images/apple/emoji/Taurus.png
Binary file added images/apple/emoji/Tokyo_tower.png
Binary file added images/apple/emoji/UP!_button.png
Binary file added images/apple/emoji/VS_button.png
Binary file added images/apple/emoji/Virgo.png
Binary file added images/apple/emoji/abacus.png
Binary file added images/apple/emoji/accordion.png
Binary file added images/apple/emoji/adhesive_bandage.png
Binary file added images/apple/emoji/admission_tickets.png
Binary file added images/apple/emoji/aerial_tramway.png
Binary file added images/apple/emoji/airplane.png
Binary file added images/apple/emoji/airplane_arrival.png
Binary file added images/apple/emoji/airplane_departure.png
Binary file added images/apple/emoji/alarm_clock.png
Binary file added images/apple/emoji/alembic.png
Binary file added images/apple/emoji/alien.png
Binary file added images/apple/emoji/alien_monster.png
Binary file added images/apple/emoji/ambulance.png
Binary file added images/apple/emoji/american_football.png
Binary file added images/apple/emoji/amphora.png
Binary file added images/apple/emoji/anatomical_heart.png
Binary file added images/apple/emoji/anchor.png
Binary file added images/apple/emoji/anger_symbol.png
Binary file added images/apple/emoji/angry_face.png
Binary file added images/apple/emoji/angry_face_with_horns.png
Binary file added images/apple/emoji/anguished_face.png
Binary file added images/apple/emoji/ant.png
Binary file added images/apple/emoji/antenna_bars.png
Binary file added images/apple/emoji/anxious_face_with_sweat.png
Binary file added images/apple/emoji/articulated_lorry.png
Binary file added images/apple/emoji/artist.png
Binary file added images/apple/emoji/artist_dark_skin_tone.png
Binary file added images/apple/emoji/artist_light_skin_tone.png
Binary file added images/apple/emoji/artist_medium_skin_tone.png
Binary file added images/apple/emoji/artist_palette.png
Binary file added images/apple/emoji/astonished_face.png
Binary file added images/apple/emoji/astronaut.png
Binary file added images/apple/emoji/astronaut_dark_skin_tone.png
Binary file added images/apple/emoji/astronaut_light_skin_tone.png
Binary file added images/apple/emoji/astronaut_medium_skin_tone.png
Binary file added images/apple/emoji/atom_symbol.png
Binary file added images/apple/emoji/auto_rickshaw.png
Binary file added images/apple/emoji/automobile.png
Binary file added images/apple/emoji/avocado.png
Binary file added images/apple/emoji/axe.png
Binary file added images/apple/emoji/baby.png
Binary file added images/apple/emoji/baby_angel.png
Binary file added images/apple/emoji/baby_angel_dark_skin_tone.png
Binary file added images/apple/emoji/baby_angel_light_skin_tone.png
Binary file added images/apple/emoji/baby_bottle.png
Binary file added images/apple/emoji/baby_chick.png
Binary file added images/apple/emoji/baby_dark_skin_tone.png
Binary file added images/apple/emoji/baby_light_skin_tone.png
Binary file added images/apple/emoji/baby_medium-dark_skin_tone.png
Binary file added images/apple/emoji/baby_medium_skin_tone.png
Binary file added images/apple/emoji/baby_symbol.png
Binary file added images/apple/emoji/backhand_index_pointing_left.png
Binary file added images/apple/emoji/backhand_index_pointing_right.png
Binary file added images/apple/emoji/backhand_index_pointing_up.png
Binary file added images/apple/emoji/backpack.png
Binary file added images/apple/emoji/bacon.png
Binary file added images/apple/emoji/badger.png
Binary file added images/apple/emoji/badminton.png
Binary file added images/apple/emoji/bagel.png
Binary file added images/apple/emoji/baggage_claim.png
Binary file added images/apple/emoji/baguette_bread.png
Binary file added images/apple/emoji/balance_scale.png
Binary file added images/apple/emoji/bald.png
Binary file added images/apple/emoji/ballet_shoes.png
Binary file added images/apple/emoji/balloon.png
Binary file added images/apple/emoji/ballot_box_with_ballot.png
Binary file added images/apple/emoji/banana.png
Binary file added images/apple/emoji/banjo.png
Binary file added images/apple/emoji/bank.png
Binary file added images/apple/emoji/bar_chart.png
Binary file added images/apple/emoji/barber_pole.png
Binary file added images/apple/emoji/baseball.png
Binary file added images/apple/emoji/basket.png
Binary file added images/apple/emoji/basketball.png
Binary file added images/apple/emoji/bat.png
Binary file added images/apple/emoji/bathtub.png
Binary file added images/apple/emoji/battery.png
Binary file added images/apple/emoji/beach_with_umbrella.png
Binary file added images/apple/emoji/bear.png
Binary file added images/apple/emoji/beating_heart.png
Binary file added images/apple/emoji/beaver.png
Binary file added images/apple/emoji/bed.png
Binary file added images/apple/emoji/beer_mug.png
Binary file added images/apple/emoji/beetle.png
Binary file added images/apple/emoji/bell.png
Binary file added images/apple/emoji/bell_pepper.png
Binary file added images/apple/emoji/bell_with_slash.png
Binary file added images/apple/emoji/bellhop_bell.png
Binary file added images/apple/emoji/bento_box.png
Binary file added images/apple/emoji/beverage_box.png
Binary file added images/apple/emoji/bicycle.png
Binary file added images/apple/emoji/bikini.png
Binary file added images/apple/emoji/billed_cap.png
Binary file added images/apple/emoji/biohazard.png
Binary file added images/apple/emoji/bird.png
Binary file added images/apple/emoji/birthday_cake.png
Binary file added images/apple/emoji/bison.png
Binary file added images/apple/emoji/black_cat.png
Binary file added images/apple/emoji/black_circle.png
Binary file added images/apple/emoji/black_flag.png
Binary file added images/apple/emoji/black_heart.png
Binary file added images/apple/emoji/black_large_square.png
Binary file added images/apple/emoji/black_medium-small_square.png
Binary file added images/apple/emoji/black_medium_square.png
Binary file added images/apple/emoji/black_nib.png
Binary file added images/apple/emoji/black_small_square.png
Binary file added images/apple/emoji/black_square_button.png
Binary file added images/apple/emoji/blossom.png
Binary file added images/apple/emoji/blowfish.png
Binary file added images/apple/emoji/blue_book.png
Binary file added images/apple/emoji/blue_circle.png
Binary file added images/apple/emoji/blue_heart.png
Binary file added images/apple/emoji/blue_square.png
Binary file added images/apple/emoji/blueberries.png
Binary file added images/apple/emoji/boar.png
Binary file added images/apple/emoji/bomb.png
Binary file added images/apple/emoji/bone.png
Binary file added images/apple/emoji/bookmark.png
Binary file added images/apple/emoji/bookmark_tabs.png
Binary file added images/apple/emoji/books.png
Binary file added images/apple/emoji/boomerang.png
Binary file added images/apple/emoji/bottle_with_popping_cork.png
Binary file added images/apple/emoji/bouquet.png
Binary file added images/apple/emoji/bow_and_arrow.png
Binary file added images/apple/emoji/bowl_with_spoon.png
Binary file added images/apple/emoji/bowling.png
Binary file added images/apple/emoji/boxing_glove.png
Binary file added images/apple/emoji/boy.png
Binary file added images/apple/emoji/boy_dark_skin_tone.png
Binary file added images/apple/emoji/boy_light_skin_tone.png
Binary file added images/apple/emoji/boy_medium-dark_skin_tone.png
Binary file added images/apple/emoji/boy_medium-light_skin_tone.png
Binary file added images/apple/emoji/boy_medium_skin_tone.png
Binary file added images/apple/emoji/brain.png
Binary file added images/apple/emoji/bread.png
Binary file added images/apple/emoji/breast-feeding.png
Binary file added images/apple/emoji/brick.png
Binary file added images/apple/emoji/bridge_at_night.png
Binary file added images/apple/emoji/briefcase.png
Binary file added images/apple/emoji/briefs.png
Binary file added images/apple/emoji/bright_button.png
Binary file added images/apple/emoji/broccoli.png
Binary file added images/apple/emoji/broken_heart.png
Binary file added images/apple/emoji/broom.png
Binary file added images/apple/emoji/brown_circle.png
Binary file added images/apple/emoji/brown_heart.png
Binary file added images/apple/emoji/brown_square.png
Binary file added images/apple/emoji/bubble_tea.png
Binary file added images/apple/emoji/bucket.png
Binary file added images/apple/emoji/bug.png
Binary file added images/apple/emoji/building_construction.png
Binary file added images/apple/emoji/bullet_train.png
Binary file added images/apple/emoji/burrito.png
Binary file added images/apple/emoji/bus.png
Binary file added images/apple/emoji/bus_stop.png
Binary file added images/apple/emoji/bust_in_silhouette.png
Binary file added images/apple/emoji/busts_in_silhouette.png
Binary file added images/apple/emoji/butter.png
Binary file added images/apple/emoji/butterfly.png
Binary file added images/apple/emoji/cactus.png
Binary file added images/apple/emoji/calendar.png
Binary file added images/apple/emoji/call_me_hand.png
Binary file added images/apple/emoji/call_me_hand_dark_skin_tone.png
Binary file added images/apple/emoji/camel.png
Binary file added images/apple/emoji/camera.png
Binary file added images/apple/emoji/camera_with_flash.png
Binary file added images/apple/emoji/camping.png
Binary file added images/apple/emoji/candle.png
Binary file added images/apple/emoji/candy.png
Binary file added images/apple/emoji/canned_food.png
Binary file added images/apple/emoji/canoe.png
Binary file added images/apple/emoji/card_file_box.png
Binary file added images/apple/emoji/card_index.png
Binary file added images/apple/emoji/card_index_dividers.png
Binary file added images/apple/emoji/carousel_horse.png
Binary file added images/apple/emoji/carp_streamer.png
Binary file added images/apple/emoji/carpentry_saw.png
Binary file added images/apple/emoji/carrot.png
Loading