From 76831f9a8bbf20118f571fd00032e7e95b685bf0 Mon Sep 17 00:00:00 2001 From: Chris Caron Date: Fri, 15 Dec 2023 21:59:58 -0500 Subject: [PATCH] Apprise Emoji Support Added (#1011) --- apprise/Apprise.py | 18 +- apprise/AppriseAsset.py | 6 + apprise/cli.py | 8 +- apprise/emojis.py | 2262 +++++++++++++++++++++++++++++++++ apprise/plugins/NotifyBase.py | 41 + packaging/man/apprise.md | 5 + test/test_api.py | 2 +- test/test_apprise_cli.py | 17 + test/test_apprise_emojis.py | 56 + test/test_rest_plugins.py | 239 +++- 10 files changed, 2649 insertions(+), 5 deletions(-) create mode 100644 apprise/emojis.py create mode 100644 test/test_apprise_emojis.py diff --git a/apprise/Apprise.py b/apprise/Apprise.py index 4c83c481..312aa001 100644 --- a/apprise/Apprise.py +++ b/apprise/Apprise.py @@ -36,6 +36,7 @@ from .utils import is_exclusive_match from .utils import parse_list from .utils import parse_urls from .utils import cwe312_url +from .emojis import apply_emojis from .logger import logger from .AppriseAsset import AppriseAsset from .AppriseConfig import AppriseConfig @@ -376,7 +377,7 @@ class Apprise: body, title, notify_type=notify_type, body_format=body_format, tag=tag, match_always=match_always, attach=attach, - interpret_escapes=interpret_escapes + interpret_escapes=interpret_escapes, ) except TypeError: @@ -501,6 +502,11 @@ class Apprise: key = server.notify_format if server.title_maxlen > 0\ else f'_{server.notify_format}' + if server.interpret_emojis: + # alter our key slightly to handle emojis since their value is + # pulled out of the notification + key += "-emojis" + if key not in conversion_title_map: # Prepare our title @@ -542,6 +548,16 @@ class Apprise: logger.error(msg) raise TypeError(msg) + if server.interpret_emojis: + # + # Convert our :emoji: definitions + # + + conversion_body_map[key] = \ + apply_emojis(conversion_body_map[key]) + conversion_title_map[key] = \ + apply_emojis(conversion_title_map[key]) + kwargs = dict( body=conversion_body_map[key], title=conversion_title_map[key], diff --git a/apprise/AppriseAsset.py b/apprise/AppriseAsset.py index 835c3b6a..e8c360a6 100644 --- a/apprise/AppriseAsset.py +++ b/apprise/AppriseAsset.py @@ -121,6 +121,12 @@ class AppriseAsset: # notifications are sent sequentially (one after another) async_mode = True + # Support :smile:, and other alike keywords swapping them for their + # unicode value. A value of None leaves the interpretation up to the + # end user to control (allowing them to specify emojis=yes on the + # URL) + interpret_emojis = None + # Whether or not to interpret escapes found within the input text prior # to passing it upstream. Such as converting \t to an actual tab and \n # to a new line. diff --git a/apprise/cli.py b/apprise/cli.py index 13035180..316cf991 100644 --- a/apprise/cli.py +++ b/apprise/cli.py @@ -213,6 +213,8 @@ def print_version_msg(): 'increase the verbosity. I.e.: -vvvv') @click.option('--interpret-escapes', '-e', is_flag=True, help='Enable interpretation of backslash escapes') +@click.option('--interpret-emojis', '-j', is_flag=True, + help='Enable interpretation of :emoji: definitions') @click.option('--debug', '-D', is_flag=True, help='Debug mode') @click.option('--version', '-V', is_flag=True, help='Display the apprise version and exit.') @@ -220,7 +222,8 @@ def print_version_msg(): metavar='SERVER_URL [SERVER_URL2 [SERVER_URL3]]',) def main(body, title, config, attach, urls, notification_type, theme, tag, input_format, dry_run, recursion_depth, verbose, disable_async, - details, interpret_escapes, plugin_path, debug, version): + details, interpret_escapes, interpret_emojis, plugin_path, debug, + version): """ Send a notification to all of the specified servers identified by their URLs the content provided within the title, body and notification-type. @@ -308,6 +311,9 @@ def main(body, title, config, attach, urls, notification_type, theme, tag, # Interpret Escapes interpret_escapes=interpret_escapes, + # Interpret Emojis + interpret_emojis=None if not interpret_emojis else True, + # Set the theme theme=theme, diff --git a/apprise/emojis.py b/apprise/emojis.py new file mode 100644 index 00000000..49a17a34 --- /dev/null +++ b/apprise/emojis.py @@ -0,0 +1,2262 @@ +# -*- coding: utf-8 -*- +# BSD 2-Clause License +# +# Apprise - Push Notification Library. +# Copyright (c) 2023, Chris Caron +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# 1. Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# +# 2. Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. + +import re + +# All Emoji's are wrapped in this character +DELIM = ':' + +# the map simply contains the emoji that should be mapped to the regular +# expression it should be swapped on. +# This list was based on: https://github.com/ikatyang/emoji-cheat-sheet +EMOJI_MAP = { + # + # Face Smiling + # + DELIM + r'grinning' + DELIM: '๐Ÿ˜„', + DELIM + r'smile' + DELIM: '๐Ÿ˜„', + DELIM + r'(laughing|satisfied)' + DELIM: '๐Ÿ˜†', + DELIM + r'rofl' + DELIM: '๐Ÿคฃ', + DELIM + r'slightly_smiling_face' + DELIM: '๐Ÿ™‚', + DELIM + r'wink' + DELIM: '๐Ÿ˜‰', + DELIM + r'innocent' + DELIM: '๐Ÿ˜‡', + DELIM + r'smiley' + DELIM: '๐Ÿ˜ƒ', + DELIM + r'grin' + DELIM: '๐Ÿ˜ƒ', + DELIM + r'sweat_smile' + DELIM: '๐Ÿ˜…', + DELIM + r'joy' + DELIM: '๐Ÿ˜‚', + DELIM + r'upside_down_face' + DELIM: '๐Ÿ™ƒ', + DELIM + r'blush' + DELIM: '๐Ÿ˜Š', + + # + # Face Affection + # + DELIM + r'smiling_face_with_three_hearts' + DELIM: '๐Ÿฅฐ', + DELIM + r'star_struck' + DELIM: '๐Ÿคฉ', + DELIM + r'kissing' + DELIM: '๐Ÿ˜—', + DELIM + r'kissing_closed_eyes' + DELIM: '๐Ÿ˜š', + DELIM + r'smiling_face_with_tear' + DELIM: '๐Ÿฅฒ', + DELIM + r'heart_eyes' + DELIM: '๐Ÿ˜', + DELIM + r'kissing_heart' + DELIM: '๐Ÿ˜˜', + DELIM + r'relaxed' + DELIM: 'โ˜บ๏ธ', + DELIM + r'kissing_smiling_eyes' + DELIM: '๐Ÿ˜™', + + # + # Face Tongue + # + DELIM + r'yum' + DELIM: '๐Ÿ˜‹', + DELIM + r'stuck_out_tongue_winking_eye' + DELIM: '๐Ÿ˜œ', + DELIM + r'stuck_out_tongue_closed_eyes' + DELIM: '๐Ÿ˜', + DELIM + r'stuck_out_tongue' + DELIM: '๐Ÿ˜›', + DELIM + r'zany_face' + DELIM: '๐Ÿคช', + DELIM + r'money_mouth_face' + DELIM: '๐Ÿค‘', + + # + # Face Hand + # + DELIM + r'hugs' + DELIM: '๐Ÿค—', + DELIM + r'shushing_face' + DELIM: '๐Ÿคซ', + DELIM + r'hand_over_mouth' + DELIM: '๐Ÿคญ', + DELIM + r'thinking' + DELIM: '๐Ÿค”', + + # + # Face Neutral Skeptical + # + DELIM + r'zipper_mouth_face' + DELIM: '๐Ÿค', + DELIM + r'neutral_face' + DELIM: '๐Ÿ˜', + DELIM + r'no_mouth' + DELIM: '๐Ÿ˜ถ', + DELIM + r'smirk' + DELIM: '๐Ÿ˜', + DELIM + r'roll_eyes' + DELIM: '๐Ÿ™„', + DELIM + r'face_exhaling' + DELIM: '๐Ÿ˜ฎโ€๐Ÿ’จ', + DELIM + r'raised_eyebrow' + DELIM: '๐Ÿคจ', + DELIM + r'expressionless' + DELIM: '๐Ÿ˜‘', + DELIM + r'face_in_clouds' + DELIM: '๐Ÿ˜ถโ€๐ŸŒซ๏ธ', + DELIM + r'unamused' + DELIM: '๐Ÿ˜’', + DELIM + r'grimacing' + DELIM: '๐Ÿ˜ฌ', + DELIM + r'lying_face' + DELIM: '๐Ÿคฅ', + + # + # Face Sleepy + # + DELIM + r'relieved' + DELIM: '๐Ÿ˜Œ', + DELIM + r'sleepy' + DELIM: '๐Ÿ˜ช', + DELIM + r'sleeping' + DELIM: '๐Ÿ˜ด', + DELIM + r'pensive' + DELIM: '๐Ÿ˜”', + DELIM + r'drooling_face' + DELIM: '๐Ÿคค', + + # + # Face Unwell + # + DELIM + r'mask' + DELIM: '๐Ÿ˜ท', + DELIM + r'face_with_head_bandage' + DELIM: '๐Ÿค•', + DELIM + r'vomiting_face' + DELIM: '๐Ÿคฎ', + DELIM + r'hot_face' + DELIM: '๐Ÿฅต', + DELIM + r'woozy_face' + DELIM: '๐Ÿฅด', + DELIM + r'face_with_spiral_eyes' + DELIM: '๐Ÿ˜ตโ€๐Ÿ’ซ', + DELIM + r'face_with_thermometer' + DELIM: '๐Ÿค’', + DELIM + r'nauseated_face' + DELIM: '๐Ÿคข', + DELIM + r'sneezing_face' + DELIM: '๐Ÿคง', + DELIM + r'cold_face' + DELIM: '๐Ÿฅถ', + DELIM + r'dizzy_face' + DELIM: '๐Ÿ˜ต', + DELIM + r'exploding_head' + DELIM: '๐Ÿคฏ', + + # + # Face Hat + # + DELIM + r'cowboy_hat_face' + DELIM: '๐Ÿค ', + DELIM + r'disguised_face' + DELIM: '๐Ÿฅธ', + DELIM + r'partying_face' + DELIM: '๐Ÿฅณ', + + # + # Face Glasses + # + DELIM + r'sunglasses' + DELIM: '๐Ÿ˜Ž', + DELIM + r'monocle_face' + DELIM: '๐Ÿง', + DELIM + r'nerd_face' + DELIM: '๐Ÿค“', + + # + # Face Concerned + # + DELIM + r'confused' + DELIM: '๐Ÿ˜•', + DELIM + r'slightly_frowning_face' + DELIM: '๐Ÿ™', + DELIM + r'open_mouth' + DELIM: '๐Ÿ˜ฎ', + DELIM + r'astonished' + DELIM: '๐Ÿ˜ฒ', + DELIM + r'pleading_face' + DELIM: '๐Ÿฅบ', + DELIM + r'anguished' + DELIM: '๐Ÿ˜ง', + DELIM + r'cold_sweat' + DELIM: '๐Ÿ˜ฐ', + DELIM + r'cry' + DELIM: '๐Ÿ˜ข', + DELIM + r'scream' + DELIM: '๐Ÿ˜ฑ', + DELIM + r'persevere' + DELIM: '๐Ÿ˜ฃ', + DELIM + r'sweat' + DELIM: '๐Ÿ˜“', + DELIM + r'tired_face' + DELIM: '๐Ÿ˜ซ', + DELIM + r'worried' + DELIM: '๐Ÿ˜Ÿ', + DELIM + r'frowning_face' + DELIM: 'โ˜น๏ธ', + DELIM + r'hushed' + DELIM: '๐Ÿ˜ฏ', + DELIM + r'flushed' + DELIM: '๐Ÿ˜ณ', + DELIM + r'frowning' + DELIM: '๐Ÿ˜ฆ', + DELIM + r'fearful' + DELIM: '๐Ÿ˜จ', + DELIM + r'disappointed_relieved' + DELIM: '๐Ÿ˜ฅ', + DELIM + r'sob' + DELIM: '๐Ÿ˜ญ', + DELIM + r'confounded' + DELIM: '๐Ÿ˜–', + DELIM + r'disappointed' + DELIM: '๐Ÿ˜ž', + DELIM + r'weary' + DELIM: '๐Ÿ˜ฉ', + DELIM + r'yawning_face' + DELIM: '๐Ÿฅฑ', + + # + # Face Negative + # + DELIM + r'triumph' + DELIM: '๐Ÿ˜ค', + DELIM + r'angry' + DELIM: '๐Ÿ˜ ', + DELIM + r'smiling_imp' + DELIM: '๐Ÿ˜ˆ', + DELIM + r'skull' + DELIM: '๐Ÿ’€', + DELIM + r'(pout|rage)' + DELIM: '๐Ÿ˜ก', + DELIM + r'cursing_face' + DELIM: '๐Ÿคฌ', + DELIM + r'imp' + DELIM: '๐Ÿ‘ฟ', + DELIM + r'skull_and_crossbones' + DELIM: 'โ˜ ๏ธ', + + # + # Face Costume + # + DELIM + r'(hankey|poop|shit)' + DELIM: '๐Ÿ’ฉ', + DELIM + r'japanese_ogre' + DELIM: '๐Ÿ‘น', + DELIM + r'ghost' + DELIM: '๐Ÿ‘ป', + DELIM + r'space_invader' + DELIM: '๐Ÿ‘พ', + DELIM + r'clown_face' + DELIM: '๐Ÿคก', + DELIM + r'japanese_goblin' + DELIM: '๐Ÿ‘บ', + DELIM + r'alien' + DELIM: '๐Ÿ‘ฝ', + DELIM + r'robot' + DELIM: '๐Ÿค–', + + # + # Cat Face + # + DELIM + r'smiley_cat' + DELIM: '๐Ÿ˜บ', + DELIM + r'joy_cat' + DELIM: '๐Ÿ˜น', + DELIM + r'smirk_cat' + DELIM: '๐Ÿ˜ผ', + DELIM + r'scream_cat' + DELIM: '๐Ÿ™€', + DELIM + r'pouting_cat' + DELIM: '๐Ÿ˜พ', + DELIM + r'smile_cat' + DELIM: '๐Ÿ˜ธ', + DELIM + r'heart_eyes_cat' + DELIM: '๐Ÿ˜ป', + DELIM + r'kissing_cat' + DELIM: '๐Ÿ˜ฝ', + DELIM + r'crying_cat_face' + DELIM: '๐Ÿ˜ฟ', + + # + # Monkey Face + # + DELIM + r'see_no_evil' + DELIM: '๐Ÿ™ˆ', + DELIM + r'speak_no_evil' + DELIM: '๐Ÿ™Š', + DELIM + r'hear_no_evil' + DELIM: '๐Ÿ™‰', + + # + # Heart + # + DELIM + r'love_letter' + DELIM: '๐Ÿ’Œ', + DELIM + r'gift_heart' + DELIM: '๐Ÿ’', + DELIM + r'heartpulse' + DELIM: '๐Ÿ’—', + DELIM + r'revolving_hearts' + DELIM: '๐Ÿ’ž', + DELIM + r'heart_decoration' + DELIM: '๐Ÿ’Ÿ', + DELIM + r'broken_heart' + DELIM: '๐Ÿ’”', + DELIM + r'mending_heart' + DELIM: 'โค๏ธโ€๐Ÿฉน', + DELIM + r'orange_heart' + DELIM: '๐Ÿงก', + DELIM + r'green_heart' + DELIM: '๐Ÿ’š', + DELIM + r'purple_heart' + DELIM: '๐Ÿ’œ', + DELIM + r'black_heart' + DELIM: '๐Ÿ–ค', + DELIM + r'cupid' + DELIM: '๐Ÿ’˜', + DELIM + r'sparkling_heart' + DELIM: '๐Ÿ’–', + DELIM + r'heartbeat' + DELIM: '๐Ÿ’“', + DELIM + r'two_hearts' + DELIM: '๐Ÿ’•', + DELIM + r'heavy_heart_exclamation' + DELIM: 'โฃ๏ธ', + DELIM + r'heart_on_fire' + DELIM: 'โค๏ธโ€๐Ÿ”ฅ', + DELIM + r'heart' + DELIM: 'โค๏ธ', + DELIM + r'yellow_heart' + DELIM: '๐Ÿ’›', + DELIM + r'blue_heart' + DELIM: '๐Ÿ’™', + DELIM + r'brown_heart' + DELIM: '๐ŸคŽ', + DELIM + r'white_heart' + DELIM: '๐Ÿค', + + # + # Emotion + # + DELIM + r'kiss' + DELIM: '๐Ÿ’‹', + DELIM + r'anger' + DELIM: '๐Ÿ’ข', + DELIM + r'dizzy' + DELIM: '๐Ÿ’ซ', + DELIM + r'dash' + DELIM: '๐Ÿ’จ', + DELIM + r'speech_balloon' + DELIM: '๐Ÿ’ฌ', + DELIM + r'left_speech_bubble' + DELIM: '๐Ÿ—จ๏ธ', + DELIM + r'thought_balloon' + DELIM: '๐Ÿ’ญ', + DELIM + r'100' + DELIM: '๐Ÿ’ฏ', + DELIM + r'(boom|collision)' + DELIM: '๐Ÿ’ฅ', + DELIM + r'sweat_drops' + DELIM: '๐Ÿ’ฆ', + DELIM + r'hole' + DELIM: '๐Ÿ•ณ๏ธ', + DELIM + r'eye_speech_bubble' + DELIM: '๐Ÿ‘๏ธโ€๐Ÿ—จ๏ธ', + DELIM + r'right_anger_bubble' + DELIM: '๐Ÿ—ฏ๏ธ', + DELIM + r'zzz' + DELIM: '๐Ÿ’ค', + + # + # Hand Fingers Open + # + DELIM + r'wave' + DELIM: '๐Ÿ‘‹', + DELIM + r'raised_hand_with_fingers_splayed' + DELIM: '๐Ÿ–๏ธ', + DELIM + r'vulcan_salute' + DELIM: '๐Ÿ––', + DELIM + r'raised_back_of_hand' + DELIM: '๐Ÿคš', + DELIM + r'(raised_)?hand' + DELIM: 'โœ‹', + + # + # Hand Fingers Partial + # + DELIM + r'ok_hand' + DELIM: '๐Ÿ‘Œ', + DELIM + r'pinched_fingers' + DELIM: '๐ŸคŒ', + DELIM + r'pinching_hand' + DELIM: '๐Ÿค', + DELIM + r'v' + DELIM: 'โœŒ๏ธ', + DELIM + r'crossed_fingers' + DELIM: '๐Ÿคž', + DELIM + r'love_you_gesture' + DELIM: '๐ŸคŸ', + DELIM + r'metal' + DELIM: '๐Ÿค˜', + DELIM + r'call_me_hand' + DELIM: '๐Ÿค™', + + # + # Hand Single Finger + # + DELIM + r'point_left' + DELIM: '๐Ÿ‘ˆ', + DELIM + r'point_right' + DELIM: '๐Ÿ‘‰', + DELIM + r'point_up_2' + DELIM: '๐Ÿ‘†', + DELIM + r'(fu|middle_finger)' + DELIM: '๐Ÿ–•', + DELIM + r'point_down' + DELIM: '๐Ÿ‘‡', + DELIM + r'point_up' + DELIM: 'โ˜๏ธ', + + # + # Hand Fingers Closed + # + DELIM + r'(\+1|thumbsup)' + DELIM: '๐Ÿ‘', + DELIM + r'(-1|thumbsdown)' + DELIM: '๐Ÿ‘Ž', + DELIM + r'fist' + DELIM: 'โœŠ', + DELIM + r'(fist_(raised|oncoming)|(face)?punch)' + DELIM: '๐Ÿ‘Š', + DELIM + r'fist_left' + DELIM: '๐Ÿค›', + DELIM + r'fist_right' + DELIM: '๐Ÿคœ', + + # + # Hands + # + DELIM + r'clap' + DELIM: '๐Ÿ‘', + DELIM + r'raised_hands' + DELIM: '๐Ÿ™Œ', + DELIM + r'open_hands' + DELIM: '๐Ÿ‘', + DELIM + r'palms_up_together' + DELIM: '๐Ÿคฒ', + DELIM + r'handshake' + DELIM: '๐Ÿค', + DELIM + r'pray' + DELIM: '๐Ÿ™', + + # + # Hand Prop + # + DELIM + r'writing_hand' + DELIM: 'โœ๏ธ', + DELIM + r'nail_care' + DELIM: '๐Ÿ’…', + DELIM + r'selfie' + DELIM: '๐Ÿคณ', + + # + # Body Parts + # + DELIM + r'muscle' + DELIM: '๐Ÿ’ช', + DELIM + r'mechanical_arm' + DELIM: '๐Ÿฆพ', + DELIM + r'mechanical_leg' + DELIM: '๐Ÿฆฟ', + DELIM + r'leg' + DELIM: '๐Ÿฆต', + DELIM + r'foot' + DELIM: '๐Ÿฆถ', + DELIM + r'ear' + DELIM: '๐Ÿ‘‚', + DELIM + r'ear_with_hearing_aid' + DELIM: '๐Ÿฆป', + DELIM + r'nose' + DELIM: '๐Ÿ‘ƒ', + DELIM + r'brain' + DELIM: '๐Ÿง ', + DELIM + r'anatomical_heart' + DELIM: '๐Ÿซ€', + DELIM + r'lungs' + DELIM: '๐Ÿซ', + DELIM + r'tooth' + DELIM: '๐Ÿฆท', + DELIM + r'bone' + DELIM: '๐Ÿฆด', + DELIM + r'eyes' + DELIM: '๐Ÿ‘€', + DELIM + r'eye' + DELIM: '๐Ÿ‘๏ธ', + DELIM + r'tongue' + DELIM: '๐Ÿ‘…', + DELIM + r'lips' + DELIM: '๐Ÿ‘„', + + # + # Person + # + DELIM + r'baby' + DELIM: '๐Ÿ‘ถ', + DELIM + r'child' + DELIM: '๐Ÿง’', + DELIM + r'boy' + DELIM: '๐Ÿ‘ฆ', + DELIM + r'girl' + DELIM: '๐Ÿ‘ง', + DELIM + r'adult' + DELIM: '๐Ÿง‘', + DELIM + r'blond_haired_person' + DELIM: '๐Ÿ‘ฑ', + DELIM + r'man' + DELIM: '๐Ÿ‘จ', + DELIM + r'bearded_person' + DELIM: '๐Ÿง”', + DELIM + r'man_beard' + DELIM: '๐Ÿง”โ€โ™‚๏ธ', + DELIM + r'woman_beard' + DELIM: '๐Ÿง”โ€โ™€๏ธ', + DELIM + r'red_haired_man' + DELIM: '๐Ÿ‘จโ€๐Ÿฆฐ', + DELIM + r'curly_haired_man' + DELIM: '๐Ÿ‘จโ€๐Ÿฆฑ', + DELIM + r'white_haired_man' + DELIM: '๐Ÿ‘จโ€๐Ÿฆณ', + DELIM + r'bald_man' + DELIM: '๐Ÿ‘จโ€๐Ÿฆฒ', + DELIM + r'woman' + DELIM: '๐Ÿ‘ฉ', + DELIM + r'red_haired_woman' + DELIM: '๐Ÿ‘ฉโ€๐Ÿฆฐ', + DELIM + r'person_red_hair' + DELIM: '๐Ÿง‘โ€๐Ÿฆฐ', + DELIM + r'curly_haired_woman' + DELIM: '๐Ÿ‘ฉโ€๐Ÿฆฑ', + DELIM + r'person_curly_hair' + DELIM: '๐Ÿง‘โ€๐Ÿฆฑ', + DELIM + r'white_haired_woman' + DELIM: '๐Ÿ‘ฉโ€๐Ÿฆณ', + DELIM + r'person_white_hair' + DELIM: '๐Ÿง‘โ€๐Ÿฆณ', + DELIM + r'bald_woman' + DELIM: '๐Ÿ‘ฉโ€๐Ÿฆฒ', + DELIM + r'person_bald' + DELIM: '๐Ÿง‘โ€๐Ÿฆฒ', + DELIM + r'blond_(haired_)?woman' + DELIM: '๐Ÿ‘ฑโ€โ™€๏ธ', + DELIM + r'blond_haired_man' + DELIM: '๐Ÿ‘ฑโ€โ™‚๏ธ', + DELIM + r'older_adult' + DELIM: '๐Ÿง“', + DELIM + r'older_man' + DELIM: '๐Ÿ‘ด', + DELIM + r'older_woman' + DELIM: '๐Ÿ‘ต', + + # + # Person Gesture + # + DELIM + r'frowning_person' + DELIM: '๐Ÿ™', + DELIM + r'frowning_man' + DELIM: '๐Ÿ™โ€โ™‚๏ธ', + DELIM + r'frowning_woman' + DELIM: '๐Ÿ™โ€โ™€๏ธ', + DELIM + r'pouting_face' + DELIM: '๐Ÿ™Ž', + DELIM + r'pouting_man' + DELIM: '๐Ÿ™Žโ€โ™‚๏ธ', + DELIM + r'pouting_woman' + DELIM: '๐Ÿ™Žโ€โ™€๏ธ', + DELIM + r'no_good' + DELIM: '๐Ÿ™…', + DELIM + r'(ng|no_good)_man' + DELIM: '๐Ÿ™…โ€โ™‚๏ธ', + DELIM + r'(ng_woman|no_good_woman)' + DELIM: '๐Ÿ™…โ€โ™€๏ธ', + DELIM + r'ok_person' + DELIM: '๐Ÿ™†', + DELIM + r'ok_man' + DELIM: '๐Ÿ™†โ€โ™‚๏ธ', + DELIM + r'ok_woman' + DELIM: '๐Ÿ™†โ€โ™€๏ธ', + DELIM + r'(information_desk|tipping_hand_)person' + DELIM: '๐Ÿ’', + DELIM + r'(sassy_man|tipping_hand_man)' + DELIM: '๐Ÿ’โ€โ™‚๏ธ', + DELIM + r'(sassy_woman|tipping_hand_woman)' + DELIM: '๐Ÿ’โ€โ™€๏ธ', + DELIM + r'raising_hand' + DELIM: '๐Ÿ™‹', + DELIM + r'raising_hand_man' + DELIM: '๐Ÿ™‹โ€โ™‚๏ธ', + DELIM + r'raising_hand_woman' + DELIM: '๐Ÿ™‹โ€โ™€๏ธ', + DELIM + r'deaf_person' + DELIM: '๐Ÿง', + DELIM + r'deaf_man' + DELIM: '๐Ÿงโ€โ™‚๏ธ', + DELIM + r'deaf_woman' + DELIM: '๐Ÿงโ€โ™€๏ธ', + DELIM + r'bow' + DELIM: '๐Ÿ™‡', + DELIM + r'bowing_man' + DELIM: '๐Ÿ™‡โ€โ™‚๏ธ', + DELIM + r'bowing_woman' + DELIM: '๐Ÿ™‡โ€โ™€๏ธ', + DELIM + r'facepalm' + DELIM: '๐Ÿคฆ', + DELIM + r'man_facepalming' + DELIM: '๐Ÿคฆโ€โ™‚๏ธ', + DELIM + r'woman_facepalming' + DELIM: '๐Ÿคฆโ€โ™€๏ธ', + DELIM + r'shrug' + DELIM: '๐Ÿคท', + DELIM + r'man_shrugging' + DELIM: '๐Ÿคทโ€โ™‚๏ธ', + DELIM + r'woman_shrugging' + DELIM: '๐Ÿคทโ€โ™€๏ธ', + + # + # Person Role + # + DELIM + r'health_worker' + DELIM: '๐Ÿง‘โ€โš•๏ธ', + DELIM + r'man_health_worker' + DELIM: '๐Ÿ‘จโ€โš•๏ธ', + DELIM + r'woman_health_worker' + DELIM: '๐Ÿ‘ฉโ€โš•๏ธ', + DELIM + r'student' + DELIM: '๐Ÿง‘โ€๐ŸŽ“', + DELIM + r'man_student' + DELIM: '๐Ÿ‘จโ€๐ŸŽ“', + DELIM + r'woman_student' + DELIM: '๐Ÿ‘ฉโ€๐ŸŽ“', + DELIM + r'teacher' + DELIM: '๐Ÿง‘โ€๐Ÿซ', + DELIM + r'man_teacher' + DELIM: '๐Ÿ‘จโ€๐Ÿซ', + DELIM + r'woman_teacher' + DELIM: '๐Ÿ‘ฉโ€๐Ÿซ', + DELIM + r'judge' + DELIM: '๐Ÿง‘โ€โš–๏ธ', + DELIM + r'man_judge' + DELIM: '๐Ÿ‘จโ€โš–๏ธ', + DELIM + r'woman_judge' + DELIM: '๐Ÿ‘ฉโ€โš–๏ธ', + DELIM + r'farmer' + DELIM: '๐Ÿง‘โ€๐ŸŒพ', + DELIM + r'man_farmer' + DELIM: '๐Ÿ‘จโ€๐ŸŒพ', + DELIM + r'woman_farmer' + DELIM: '๐Ÿ‘ฉโ€๐ŸŒพ', + DELIM + r'cook' + DELIM: '๐Ÿง‘โ€๐Ÿณ', + DELIM + r'man_cook' + DELIM: '๐Ÿ‘จโ€๐Ÿณ', + DELIM + r'woman_cook' + DELIM: '๐Ÿ‘ฉโ€๐Ÿณ', + DELIM + r'mechanic' + DELIM: '๐Ÿง‘โ€๐Ÿ”ง', + DELIM + r'man_mechanic' + DELIM: '๐Ÿ‘จโ€๐Ÿ”ง', + DELIM + r'woman_mechanic' + DELIM: '๐Ÿ‘ฉโ€๐Ÿ”ง', + DELIM + r'factory_worker' + DELIM: '๐Ÿง‘โ€๐Ÿญ', + DELIM + r'man_factory_worker' + DELIM: '๐Ÿ‘จโ€๐Ÿญ', + DELIM + r'woman_factory_worker' + DELIM: '๐Ÿ‘ฉโ€๐Ÿญ', + DELIM + r'office_worker' + DELIM: '๐Ÿง‘โ€๐Ÿ’ผ', + DELIM + r'man_office_worker' + DELIM: '๐Ÿ‘จโ€๐Ÿ’ผ', + DELIM + r'woman_office_worker' + DELIM: '๐Ÿ‘ฉโ€๐Ÿ’ผ', + DELIM + r'scientist' + DELIM: '๐Ÿง‘โ€๐Ÿ”ฌ', + DELIM + r'man_scientist' + DELIM: '๐Ÿ‘จโ€๐Ÿ”ฌ', + DELIM + r'woman_scientist' + DELIM: '๐Ÿ‘ฉโ€๐Ÿ”ฌ', + DELIM + r'technologist' + DELIM: '๐Ÿง‘โ€๐Ÿ’ป', + DELIM + r'man_technologist' + DELIM: '๐Ÿ‘จโ€๐Ÿ’ป', + DELIM + r'woman_technologist' + DELIM: '๐Ÿ‘ฉโ€๐Ÿ’ป', + DELIM + r'singer' + DELIM: '๐Ÿง‘โ€๐ŸŽค', + DELIM + r'man_singer' + DELIM: '๐Ÿ‘จโ€๐ŸŽค', + DELIM + r'woman_singer' + DELIM: '๐Ÿ‘ฉโ€๐ŸŽค', + DELIM + r'artist' + DELIM: '๐Ÿง‘โ€๐ŸŽจ', + DELIM + r'man_artist' + DELIM: '๐Ÿ‘จโ€๐ŸŽจ', + DELIM + r'woman_artist' + DELIM: '๐Ÿ‘ฉโ€๐ŸŽจ', + DELIM + r'pilot' + DELIM: '๐Ÿง‘โ€โœˆ๏ธ', + DELIM + r'man_pilot' + DELIM: '๐Ÿ‘จโ€โœˆ๏ธ', + DELIM + r'woman_pilot' + DELIM: '๐Ÿ‘ฉโ€โœˆ๏ธ', + DELIM + r'astronaut' + DELIM: '๐Ÿง‘โ€๐Ÿš€', + DELIM + r'man_astronaut' + DELIM: '๐Ÿ‘จโ€๐Ÿš€', + DELIM + r'woman_astronaut' + DELIM: '๐Ÿ‘ฉโ€๐Ÿš€', + DELIM + r'firefighter' + DELIM: '๐Ÿง‘โ€๐Ÿš’', + DELIM + r'man_firefighter' + DELIM: '๐Ÿ‘จโ€๐Ÿš’', + DELIM + r'woman_firefighter' + DELIM: '๐Ÿ‘ฉโ€๐Ÿš’', + DELIM + r'cop' + DELIM: '๐Ÿ‘ฎ', + DELIM + r'police(_officer|man)' + DELIM: '๐Ÿ‘ฎโ€โ™‚๏ธ', + DELIM + r'policewoman' + DELIM: '๐Ÿ‘ฎโ€โ™€๏ธ', + DELIM + r'detective' + DELIM: '๐Ÿ•ต๏ธ', + DELIM + r'male_detective' + DELIM: '๐Ÿ•ต๏ธโ€โ™‚๏ธ', + DELIM + r'female_detective' + DELIM: '๐Ÿ•ต๏ธโ€โ™€๏ธ', + DELIM + r'guard' + DELIM: '๐Ÿ’‚', + DELIM + r'guardsman' + DELIM: '๐Ÿ’‚โ€โ™‚๏ธ', + DELIM + r'guardswoman' + DELIM: '๐Ÿ’‚โ€โ™€๏ธ', + DELIM + r'ninja' + DELIM: '๐Ÿฅท', + DELIM + r'construction_worker' + DELIM: '๐Ÿ‘ท', + DELIM + r'construction_worker_man' + DELIM: '๐Ÿ‘ทโ€โ™‚๏ธ', + DELIM + r'construction_worker_woman' + DELIM: '๐Ÿ‘ทโ€โ™€๏ธ', + DELIM + r'prince' + DELIM: '๐Ÿคด', + DELIM + r'princess' + DELIM: '๐Ÿ‘ธ', + DELIM + r'person_with_turban' + DELIM: '๐Ÿ‘ณ', + DELIM + r'man_with_turban' + DELIM: '๐Ÿ‘ณโ€โ™‚๏ธ', + DELIM + r'woman_with_turban' + DELIM: '๐Ÿ‘ณโ€โ™€๏ธ', + DELIM + r'man_with_gua_pi_mao' + DELIM: '๐Ÿ‘ฒ', + DELIM + r'woman_with_headscarf' + DELIM: '๐Ÿง•', + DELIM + r'person_in_tuxedo' + DELIM: '๐Ÿคต', + DELIM + r'man_in_tuxedo' + DELIM: '๐Ÿคตโ€โ™‚๏ธ', + DELIM + r'woman_in_tuxedo' + DELIM: '๐Ÿคตโ€โ™€๏ธ', + DELIM + r'person_with_veil' + DELIM: '๐Ÿ‘ฐ', + DELIM + r'man_with_veil' + DELIM: '๐Ÿ‘ฐโ€โ™‚๏ธ', + DELIM + r'(bride|woman)_with_veil' + DELIM: '๐Ÿ‘ฐโ€โ™€๏ธ', + DELIM + r'pregnant_woman' + DELIM: '๐Ÿคฐ', + DELIM + r'breast_feeding' + DELIM: '๐Ÿคฑ', + DELIM + r'woman_feeding_baby' + DELIM: '๐Ÿ‘ฉโ€๐Ÿผ', + DELIM + r'man_feeding_baby' + DELIM: '๐Ÿ‘จโ€๐Ÿผ', + DELIM + r'person_feeding_baby' + DELIM: '๐Ÿง‘โ€๐Ÿผ', + + # + # Person Fantasy + # + DELIM + r'angel' + DELIM: '๐Ÿ‘ผ', + DELIM + r'santa' + DELIM: '๐ŸŽ…', + DELIM + r'mrs_claus' + DELIM: '๐Ÿคถ', + DELIM + r'mx_claus' + DELIM: '๐Ÿง‘โ€๐ŸŽ„', + DELIM + r'superhero' + DELIM: '๐Ÿฆธ', + DELIM + r'superhero_man' + DELIM: '๐Ÿฆธโ€โ™‚๏ธ', + DELIM + r'superhero_woman' + DELIM: '๐Ÿฆธโ€โ™€๏ธ', + DELIM + r'supervillain' + DELIM: '๐Ÿฆน', + DELIM + r'supervillain_man' + DELIM: '๐Ÿฆนโ€โ™‚๏ธ', + DELIM + r'supervillain_woman' + DELIM: '๐Ÿฆนโ€โ™€๏ธ', + DELIM + r'mage' + DELIM: '๐Ÿง™', + DELIM + r'mage_man' + DELIM: '๐Ÿง™โ€โ™‚๏ธ', + DELIM + r'mage_woman' + DELIM: '๐Ÿง™โ€โ™€๏ธ', + DELIM + r'fairy' + DELIM: '๐Ÿงš', + DELIM + r'fairy_man' + DELIM: '๐Ÿงšโ€โ™‚๏ธ', + DELIM + r'fairy_woman' + DELIM: '๐Ÿงšโ€โ™€๏ธ', + DELIM + r'vampire' + DELIM: '๐Ÿง›', + DELIM + r'vampire_man' + DELIM: '๐Ÿง›โ€โ™‚๏ธ', + DELIM + r'vampire_woman' + DELIM: '๐Ÿง›โ€โ™€๏ธ', + DELIM + r'merperson' + DELIM: '๐Ÿงœ', + DELIM + r'merman' + DELIM: '๐Ÿงœโ€โ™‚๏ธ', + DELIM + r'mermaid' + DELIM: '๐Ÿงœโ€โ™€๏ธ', + DELIM + r'elf' + DELIM: '๐Ÿง', + DELIM + r'elf_man' + DELIM: '๐Ÿงโ€โ™‚๏ธ', + DELIM + r'elf_woman' + DELIM: '๐Ÿงโ€โ™€๏ธ', + DELIM + r'genie' + DELIM: '๐Ÿงž', + DELIM + r'genie_man' + DELIM: '๐Ÿงžโ€โ™‚๏ธ', + DELIM + r'genie_woman' + DELIM: '๐Ÿงžโ€โ™€๏ธ', + DELIM + r'zombie' + DELIM: '๐ŸงŸ', + DELIM + r'zombie_man' + DELIM: '๐ŸงŸโ€โ™‚๏ธ', + DELIM + r'zombie_woman' + DELIM: '๐ŸงŸโ€โ™€๏ธ', + + # + # Person Activity + # + DELIM + r'massage' + DELIM: '๐Ÿ’†', + DELIM + r'massage_man' + DELIM: '๐Ÿ’†โ€โ™‚๏ธ', + DELIM + r'massage_woman' + DELIM: '๐Ÿ’†โ€โ™€๏ธ', + DELIM + r'haircut' + DELIM: '๐Ÿ’‡', + DELIM + r'haircut_man' + DELIM: '๐Ÿ’‡โ€โ™‚๏ธ', + DELIM + r'haircut_woman' + DELIM: '๐Ÿ’‡โ€โ™€๏ธ', + DELIM + r'walking' + DELIM: '๐Ÿšถ', + DELIM + r'walking_man' + DELIM: '๐Ÿšถโ€โ™‚๏ธ', + DELIM + r'walking_woman' + DELIM: '๐Ÿšถโ€โ™€๏ธ', + DELIM + r'standing_person' + DELIM: '๐Ÿง', + DELIM + r'standing_man' + DELIM: '๐Ÿงโ€โ™‚๏ธ', + DELIM + r'standing_woman' + DELIM: '๐Ÿงโ€โ™€๏ธ', + DELIM + r'kneeling_person' + DELIM: '๐ŸงŽ', + DELIM + r'kneeling_man' + DELIM: '๐ŸงŽโ€โ™‚๏ธ', + DELIM + r'kneeling_woman' + DELIM: '๐ŸงŽโ€โ™€๏ธ', + DELIM + r'person_with_probing_cane' + DELIM: '๐Ÿง‘โ€๐Ÿฆฏ', + DELIM + r'man_with_probing_cane' + DELIM: '๐Ÿ‘จโ€๐Ÿฆฏ', + DELIM + r'woman_with_probing_cane' + DELIM: '๐Ÿ‘ฉโ€๐Ÿฆฏ', + DELIM + r'person_in_motorized_wheelchair' + DELIM: '๐Ÿง‘โ€๐Ÿฆผ', + DELIM + r'man_in_motorized_wheelchair' + DELIM: '๐Ÿ‘จโ€๐Ÿฆผ', + DELIM + r'woman_in_motorized_wheelchair' + DELIM: '๐Ÿ‘ฉโ€๐Ÿฆผ', + DELIM + r'person_in_manual_wheelchair' + DELIM: '๐Ÿง‘โ€๐Ÿฆฝ', + DELIM + r'man_in_manual_wheelchair' + DELIM: '๐Ÿ‘จโ€๐Ÿฆฝ', + DELIM + r'woman_in_manual_wheelchair' + DELIM: '๐Ÿ‘ฉโ€๐Ÿฆฝ', + DELIM + r'runn(er|ing)' + DELIM: '๐Ÿƒ', + DELIM + r'running_man' + DELIM: '๐Ÿƒโ€โ™‚๏ธ', + DELIM + r'running_woman' + DELIM: '๐Ÿƒโ€โ™€๏ธ', + DELIM + r'(dancer|woman_dancing)' + DELIM: '๐Ÿ’ƒ', + DELIM + r'man_dancing' + DELIM: '๐Ÿ•บ', + DELIM + r'business_suit_levitating' + DELIM: '๐Ÿ•ด๏ธ', + DELIM + r'dancers' + DELIM: '๐Ÿ‘ฏ', + DELIM + r'dancing_men' + DELIM: '๐Ÿ‘ฏโ€โ™‚๏ธ', + DELIM + r'dancing_women' + DELIM: '๐Ÿ‘ฏโ€โ™€๏ธ', + DELIM + r'sauna_person' + DELIM: '๐Ÿง–', + DELIM + r'sauna_man' + DELIM: '๐Ÿง–โ€โ™‚๏ธ', + DELIM + r'sauna_woman' + DELIM: '๐Ÿง–โ€โ™€๏ธ', + DELIM + r'climbing' + DELIM: '๐Ÿง—', + DELIM + r'climbing_man' + DELIM: '๐Ÿง—โ€โ™‚๏ธ', + DELIM + r'climbing_woman' + DELIM: '๐Ÿง—โ€โ™€๏ธ', + + # + # Person Sport + # + DELIM + r'person_fencing' + DELIM: '๐Ÿคบ', + DELIM + r'horse_racing' + DELIM: '๐Ÿ‡', + DELIM + r'skier' + DELIM: 'โ›ท๏ธ', + DELIM + r'snowboarder' + DELIM: '๐Ÿ‚', + DELIM + r'golfing' + DELIM: '๐ŸŒ๏ธ', + DELIM + r'golfing_man' + DELIM: '๐ŸŒ๏ธโ€โ™‚๏ธ', + DELIM + r'golfing_woman' + DELIM: '๐ŸŒ๏ธโ€โ™€๏ธ', + DELIM + r'surfer' + DELIM: '๐Ÿ„', + DELIM + r'surfing_man' + DELIM: '๐Ÿ„โ€โ™‚๏ธ', + DELIM + r'surfing_woman' + DELIM: '๐Ÿ„โ€โ™€๏ธ', + DELIM + r'rowboat' + DELIM: '๐Ÿšฃ', + DELIM + r'rowing_man' + DELIM: '๐Ÿšฃโ€โ™‚๏ธ', + DELIM + r'rowing_woman' + DELIM: '๐Ÿšฃโ€โ™€๏ธ', + DELIM + r'swimmer' + DELIM: '๐ŸŠ', + DELIM + r'swimming_man' + DELIM: '๐ŸŠโ€โ™‚๏ธ', + DELIM + r'swimming_woman' + DELIM: '๐ŸŠโ€โ™€๏ธ', + DELIM + r'bouncing_ball_person' + DELIM: 'โ›น๏ธ', + DELIM + r'(basketball|bouncing_ball)_man' + DELIM: 'โ›น๏ธโ€โ™‚๏ธ', + DELIM + r'(basketball|bouncing_ball)_woman' + DELIM: 'โ›น๏ธโ€โ™€๏ธ', + DELIM + r'weight_lifting' + DELIM: '๐Ÿ‹๏ธ', + DELIM + r'weight_lifting_man' + DELIM: '๐Ÿ‹๏ธโ€โ™‚๏ธ', + DELIM + r'weight_lifting_woman' + DELIM: '๐Ÿ‹๏ธโ€โ™€๏ธ', + DELIM + r'bicyclist' + DELIM: '๐Ÿšด', + DELIM + r'biking_man' + DELIM: '๐Ÿšดโ€โ™‚๏ธ', + DELIM + r'biking_woman' + DELIM: '๐Ÿšดโ€โ™€๏ธ', + DELIM + r'mountain_bicyclist' + DELIM: '๐Ÿšต', + DELIM + r'mountain_biking_man' + DELIM: '๐Ÿšตโ€โ™‚๏ธ', + DELIM + r'mountain_biking_woman' + DELIM: '๐Ÿšตโ€โ™€๏ธ', + DELIM + r'cartwheeling' + DELIM: '๐Ÿคธ', + DELIM + r'man_cartwheeling' + DELIM: '๐Ÿคธโ€โ™‚๏ธ', + DELIM + r'woman_cartwheeling' + DELIM: '๐Ÿคธโ€โ™€๏ธ', + DELIM + r'wrestling' + DELIM: '๐Ÿคผ', + DELIM + r'men_wrestling' + DELIM: '๐Ÿคผโ€โ™‚๏ธ', + DELIM + r'women_wrestling' + DELIM: '๐Ÿคผโ€โ™€๏ธ', + DELIM + r'water_polo' + DELIM: '๐Ÿคฝ', + DELIM + r'man_playing_water_polo' + DELIM: '๐Ÿคฝโ€โ™‚๏ธ', + DELIM + r'woman_playing_water_polo' + DELIM: '๐Ÿคฝโ€โ™€๏ธ', + DELIM + r'handball_person' + DELIM: '๐Ÿคพ', + DELIM + r'man_playing_handball' + DELIM: '๐Ÿคพโ€โ™‚๏ธ', + DELIM + r'woman_playing_handball' + DELIM: '๐Ÿคพโ€โ™€๏ธ', + DELIM + r'juggling_person' + DELIM: '๐Ÿคน', + DELIM + r'man_juggling' + DELIM: '๐Ÿคนโ€โ™‚๏ธ', + DELIM + r'woman_juggling' + DELIM: '๐Ÿคนโ€โ™€๏ธ', + + # + # Person Resting + # + DELIM + r'lotus_position' + DELIM: '๐Ÿง˜', + DELIM + r'lotus_position_man' + DELIM: '๐Ÿง˜โ€โ™‚๏ธ', + DELIM + r'lotus_position_woman' + DELIM: '๐Ÿง˜โ€โ™€๏ธ', + DELIM + r'bath' + DELIM: '๐Ÿ›€', + DELIM + r'sleeping_bed' + DELIM: '๐Ÿ›Œ', + + # + # Family + # + DELIM + r'people_holding_hands' + DELIM: '๐Ÿง‘โ€๐Ÿคโ€๐Ÿง‘', + DELIM + r'two_women_holding_hands' + DELIM: '๐Ÿ‘ญ', + DELIM + r'couple' + DELIM: '๐Ÿ‘ซ', + DELIM + r'two_men_holding_hands' + DELIM: '๐Ÿ‘ฌ', + DELIM + r'couplekiss' + DELIM: '๐Ÿ’', + DELIM + r'couplekiss_man_woman' + DELIM: '๐Ÿ‘ฉโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ', + DELIM + r'couplekiss_man_man' + DELIM: '๐Ÿ‘จโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ', + DELIM + r'couplekiss_woman_woman' + DELIM: '๐Ÿ‘ฉโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘ฉ', + DELIM + r'couple_with_heart' + DELIM: '๐Ÿ’‘', + DELIM + r'couple_with_heart_woman_man' + DELIM: '๐Ÿ‘ฉโ€โค๏ธโ€๐Ÿ‘จ', + DELIM + r'couple_with_heart_man_man' + DELIM: '๐Ÿ‘จโ€โค๏ธโ€๐Ÿ‘จ', + DELIM + r'couple_with_heart_woman_woman' + DELIM: '๐Ÿ‘ฉโ€โค๏ธโ€๐Ÿ‘ฉ', + DELIM + r'family_man_woman_boy' + DELIM: '๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘ฆ', + DELIM + r'family_man_woman_girl' + DELIM: '๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘ง', + DELIM + r'family_man_woman_girl_boy' + DELIM: '๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ฆ', + DELIM + r'family_man_woman_boy_boy' + DELIM: '๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘ฆโ€๐Ÿ‘ฆ', + DELIM + r'family_man_woman_girl_girl' + DELIM: '๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ง', + DELIM + r'family_man_man_boy' + DELIM: '๐Ÿ‘จโ€๐Ÿ‘จโ€๐Ÿ‘ฆ', + DELIM + r'family_man_man_girl' + DELIM: '๐Ÿ‘จโ€๐Ÿ‘จโ€๐Ÿ‘ง', + DELIM + r'family_man_man_girl_boy' + DELIM: '๐Ÿ‘จโ€๐Ÿ‘จโ€๐Ÿ‘งโ€๐Ÿ‘ฆ', + DELIM + r'family_man_man_boy_boy' + DELIM: '๐Ÿ‘จโ€๐Ÿ‘จโ€๐Ÿ‘ฆโ€๐Ÿ‘ฆ', + DELIM + r'family_man_man_girl_girl' + DELIM: '๐Ÿ‘จโ€๐Ÿ‘จโ€๐Ÿ‘งโ€๐Ÿ‘ง', + DELIM + r'family_woman_woman_boy' + DELIM: '๐Ÿ‘ฉโ€๐Ÿ‘ฉโ€๐Ÿ‘ฆ', + DELIM + r'family_woman_woman_girl' + DELIM: '๐Ÿ‘ฉโ€๐Ÿ‘ฉโ€๐Ÿ‘ง', + DELIM + r'family_woman_woman_girl_boy' + DELIM: '๐Ÿ‘ฉโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ฆ', + DELIM + r'family_woman_woman_boy_boy' + DELIM: '๐Ÿ‘ฉโ€๐Ÿ‘ฉโ€๐Ÿ‘ฆโ€๐Ÿ‘ฆ', + DELIM + r'family_woman_woman_girl_girl' + DELIM: '๐Ÿ‘ฉโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ง', + DELIM + r'family_man_boy' + DELIM: '๐Ÿ‘จโ€๐Ÿ‘ฆ', + DELIM + r'family_man_boy_boy' + DELIM: '๐Ÿ‘จโ€๐Ÿ‘ฆโ€๐Ÿ‘ฆ', + DELIM + r'family_man_girl' + DELIM: '๐Ÿ‘จโ€๐Ÿ‘ง', + DELIM + r'family_man_girl_boy' + DELIM: '๐Ÿ‘จโ€๐Ÿ‘งโ€๐Ÿ‘ฆ', + DELIM + r'family_man_girl_girl' + DELIM: '๐Ÿ‘จโ€๐Ÿ‘งโ€๐Ÿ‘ง', + DELIM + r'family_woman_boy' + DELIM: '๐Ÿ‘ฉโ€๐Ÿ‘ฆ', + DELIM + r'family_woman_boy_boy' + DELIM: '๐Ÿ‘ฉโ€๐Ÿ‘ฆโ€๐Ÿ‘ฆ', + DELIM + r'family_woman_girl' + DELIM: '๐Ÿ‘ฉโ€๐Ÿ‘ง', + DELIM + r'family_woman_girl_boy' + DELIM: '๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ฆ', + DELIM + r'family_woman_girl_girl' + DELIM: '๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ง', + + # + # Person Symbol + # + DELIM + r'speaking_head' + DELIM: '๐Ÿ—ฃ๏ธ', + DELIM + r'bust_in_silhouette' + DELIM: '๐Ÿ‘ค', + DELIM + r'busts_in_silhouette' + DELIM: '๐Ÿ‘ฅ', + DELIM + r'people_hugging' + DELIM: '๐Ÿซ‚', + DELIM + r'family' + DELIM: '๐Ÿ‘ช', + DELIM + r'footprints' + DELIM: '๐Ÿ‘ฃ', + + # + # Animal Mammal + # + DELIM + r'monkey_face' + DELIM: '๐Ÿต', + DELIM + r'monkey' + DELIM: '๐Ÿ’', + DELIM + r'gorilla' + DELIM: '๐Ÿฆ', + DELIM + r'orangutan' + DELIM: '๐Ÿฆง', + DELIM + r'dog' + DELIM: '๐Ÿถ', + DELIM + r'dog2' + DELIM: '๐Ÿ•', + DELIM + r'guide_dog' + DELIM: '๐Ÿฆฎ', + DELIM + r'service_dog' + DELIM: '๐Ÿ•โ€๐Ÿฆบ', + DELIM + r'poodle' + DELIM: '๐Ÿฉ', + DELIM + r'wolf' + DELIM: '๐Ÿบ', + DELIM + r'fox_face' + DELIM: '๐ŸฆŠ', + DELIM + r'raccoon' + DELIM: '๐Ÿฆ', + DELIM + r'cat' + DELIM: '๐Ÿฑ', + DELIM + r'cat2' + DELIM: '๐Ÿˆ', + DELIM + r'black_cat' + DELIM: '๐Ÿˆโ€โฌ›', + DELIM + r'lion' + DELIM: '๐Ÿฆ', + DELIM + r'tiger' + DELIM: '๐Ÿฏ', + DELIM + r'tiger2' + DELIM: '๐Ÿ…', + DELIM + r'leopard' + DELIM: '๐Ÿ†', + DELIM + r'horse' + DELIM: '๐Ÿด', + DELIM + r'racehorse' + DELIM: '๐ŸŽ', + DELIM + r'unicorn' + DELIM: '๐Ÿฆ„', + DELIM + r'zebra' + DELIM: '๐Ÿฆ“', + DELIM + r'deer' + DELIM: '๐ŸฆŒ', + DELIM + r'bison' + DELIM: '๐Ÿฆฌ', + DELIM + r'cow' + DELIM: '๐Ÿฎ', + DELIM + r'ox' + DELIM: '๐Ÿ‚', + DELIM + r'water_buffalo' + DELIM: '๐Ÿƒ', + DELIM + r'cow2' + DELIM: '๐Ÿ„', + DELIM + r'pig' + DELIM: '๐Ÿท', + DELIM + r'pig2' + DELIM: '๐Ÿ–', + DELIM + r'boar' + DELIM: '๐Ÿ—', + DELIM + r'pig_nose' + DELIM: '๐Ÿฝ', + DELIM + r'ram' + DELIM: '๐Ÿ', + DELIM + r'sheep' + DELIM: '๐Ÿ‘', + DELIM + r'goat' + DELIM: '๐Ÿ', + DELIM + r'dromedary_camel' + DELIM: '๐Ÿช', + DELIM + r'camel' + DELIM: '๐Ÿซ', + DELIM + r'llama' + DELIM: '๐Ÿฆ™', + DELIM + r'giraffe' + DELIM: '๐Ÿฆ’', + DELIM + r'elephant' + DELIM: '๐Ÿ˜', + DELIM + r'mammoth' + DELIM: '๐Ÿฆฃ', + DELIM + r'rhinoceros' + DELIM: '๐Ÿฆ', + DELIM + r'hippopotamus' + DELIM: '๐Ÿฆ›', + DELIM + r'mouse' + DELIM: '๐Ÿญ', + DELIM + r'mouse2' + DELIM: '๐Ÿ', + DELIM + r'rat' + DELIM: '๐Ÿ€', + DELIM + r'hamster' + DELIM: '๐Ÿน', + DELIM + r'rabbit' + DELIM: '๐Ÿฐ', + DELIM + r'rabbit2' + DELIM: '๐Ÿ‡', + DELIM + r'chipmunk' + DELIM: '๐Ÿฟ๏ธ', + DELIM + r'beaver' + DELIM: '๐Ÿฆซ', + DELIM + r'hedgehog' + DELIM: '๐Ÿฆ”', + DELIM + r'bat' + DELIM: '๐Ÿฆ‡', + DELIM + r'bear' + DELIM: '๐Ÿป', + DELIM + r'polar_bear' + DELIM: '๐Ÿปโ€โ„๏ธ', + DELIM + r'koala' + DELIM: '๐Ÿจ', + DELIM + r'panda_face' + DELIM: '๐Ÿผ', + DELIM + r'sloth' + DELIM: '๐Ÿฆฅ', + DELIM + r'otter' + DELIM: '๐Ÿฆฆ', + DELIM + r'skunk' + DELIM: '๐Ÿฆจ', + DELIM + r'kangaroo' + DELIM: '๐Ÿฆ˜', + DELIM + r'badger' + DELIM: '๐Ÿฆก', + DELIM + r'(feet|paw_prints)' + DELIM: '๐Ÿพ', + + # + # Animal Bird + # + DELIM + r'turkey' + DELIM: '๐Ÿฆƒ', + DELIM + r'chicken' + DELIM: '๐Ÿ”', + DELIM + r'rooster' + DELIM: '๐Ÿ“', + DELIM + r'hatching_chick' + DELIM: '๐Ÿฃ', + DELIM + r'baby_chick' + DELIM: '๐Ÿค', + DELIM + r'hatched_chick' + DELIM: '๐Ÿฅ', + DELIM + r'bird' + DELIM: '๐Ÿฆ', + DELIM + r'penguin' + DELIM: '๐Ÿง', + DELIM + r'dove' + DELIM: '๐Ÿ•Š๏ธ', + DELIM + r'eagle' + DELIM: '๐Ÿฆ…', + DELIM + r'duck' + DELIM: '๐Ÿฆ†', + DELIM + r'swan' + DELIM: '๐Ÿฆข', + DELIM + r'owl' + DELIM: '๐Ÿฆ‰', + DELIM + r'dodo' + DELIM: '๐Ÿฆค', + DELIM + r'feather' + DELIM: '๐Ÿชถ', + DELIM + r'flamingo' + DELIM: '๐Ÿฆฉ', + DELIM + r'peacock' + DELIM: '๐Ÿฆš', + DELIM + r'parrot' + DELIM: '๐Ÿฆœ', + + # + # Animal Amphibian + # + DELIM + r'frog' + DELIM: '๐Ÿธ', + + # + # Animal Reptile + # + DELIM + r'crocodile' + DELIM: '๐ŸŠ', + DELIM + r'turtle' + DELIM: '๐Ÿข', + DELIM + r'lizard' + DELIM: '๐ŸฆŽ', + DELIM + r'snake' + DELIM: '๐Ÿ', + DELIM + r'dragon_face' + DELIM: '๐Ÿฒ', + DELIM + r'dragon' + DELIM: '๐Ÿ‰', + DELIM + r'sauropod' + DELIM: '๐Ÿฆ•', + DELIM + r't-rex' + DELIM: '๐Ÿฆ–', + + # + # Animal Marine + # + DELIM + r'whale' + DELIM: '๐Ÿณ', + DELIM + r'whale2' + DELIM: '๐Ÿ‹', + DELIM + r'dolphin' + DELIM: '๐Ÿฌ', + DELIM + r'(seal|flipper)' + DELIM: '๐Ÿฆญ', + DELIM + r'fish' + DELIM: '๐ŸŸ', + DELIM + r'tropical_fish' + DELIM: '๐Ÿ ', + DELIM + r'blowfish' + DELIM: '๐Ÿก', + DELIM + r'shark' + DELIM: '๐Ÿฆˆ', + DELIM + r'octopus' + DELIM: '๐Ÿ™', + DELIM + r'shell' + DELIM: '๐Ÿš', + + # + # Animal Bug + # + DELIM + r'snail' + DELIM: '๐ŸŒ', + DELIM + r'butterfly' + DELIM: '๐Ÿฆ‹', + DELIM + r'bug' + DELIM: '๐Ÿ›', + DELIM + r'ant' + DELIM: '๐Ÿœ', + DELIM + r'bee' + DELIM: '๐Ÿ', + DELIM + r'honeybee' + DELIM: '๐Ÿชฒ', + DELIM + r'(lady_)?beetle' + DELIM: '๐Ÿž', + DELIM + r'cricket' + DELIM: '๐Ÿฆ—', + DELIM + r'cockroach' + DELIM: '๐Ÿชณ', + DELIM + r'spider' + DELIM: '๐Ÿ•ท๏ธ', + DELIM + r'spider_web' + DELIM: '๐Ÿ•ธ๏ธ', + DELIM + r'scorpion' + DELIM: '๐Ÿฆ‚', + DELIM + r'mosquito' + DELIM: '๐ŸฆŸ', + DELIM + r'fly' + DELIM: '๐Ÿชฐ', + DELIM + r'worm' + DELIM: '๐Ÿชฑ', + DELIM + r'microbe' + DELIM: '๐Ÿฆ ', + + # + # Plant Flower + # + DELIM + r'bouquet' + DELIM: '๐Ÿ’', + DELIM + r'cherry_blossom' + DELIM: '๐ŸŒธ', + DELIM + r'white_flower' + DELIM: '๐Ÿ’ฎ', + DELIM + r'rosette' + DELIM: '๐Ÿต๏ธ', + DELIM + r'rose' + DELIM: '๐ŸŒน', + DELIM + r'wilted_flower' + DELIM: '๐Ÿฅ€', + DELIM + r'hibiscus' + DELIM: '๐ŸŒบ', + DELIM + r'sunflower' + DELIM: '๐ŸŒป', + DELIM + r'blossom' + DELIM: '๐ŸŒผ', + DELIM + r'tulip' + DELIM: '๐ŸŒท', + + # + # Plant Other + # + DELIM + r'seedling' + DELIM: '๐ŸŒฑ', + DELIM + r'potted_plant' + DELIM: '๐Ÿชด', + DELIM + r'evergreen_tree' + DELIM: '๐ŸŒฒ', + DELIM + r'deciduous_tree' + DELIM: '๐ŸŒณ', + DELIM + r'palm_tree' + DELIM: '๐ŸŒด', + DELIM + r'cactus' + DELIM: '๐ŸŒต', + DELIM + r'ear_of_rice' + DELIM: '๐ŸŒพ', + DELIM + r'herb' + DELIM: '๐ŸŒฟ', + DELIM + r'shamrock' + DELIM: 'โ˜˜๏ธ', + DELIM + r'four_leaf_clover' + DELIM: '๐Ÿ€', + DELIM + r'maple_leaf' + DELIM: '๐Ÿ', + DELIM + r'fallen_leaf' + DELIM: '๐Ÿ‚', + DELIM + r'leaves' + DELIM: '๐Ÿƒ', + DELIM + r'mushroom' + DELIM: '๐Ÿ„', + + # + # Food Fruit + # + DELIM + r'grapes' + DELIM: '๐Ÿ‡', + DELIM + r'melon' + DELIM: '๐Ÿˆ', + DELIM + r'watermelon' + DELIM: '๐Ÿ‰', + DELIM + r'(orange|mandarin|tangerine)' + DELIM: '๐ŸŠ', + DELIM + r'lemon' + DELIM: '๐Ÿ‹', + DELIM + r'banana' + DELIM: '๐ŸŒ', + DELIM + r'pineapple' + DELIM: '๐Ÿ', + DELIM + r'mango' + DELIM: '๐Ÿฅญ', + DELIM + r'apple' + DELIM: '๐ŸŽ', + DELIM + r'green_apple' + DELIM: '๐Ÿ', + DELIM + r'pear' + DELIM: '๐Ÿ', + DELIM + r'peach' + DELIM: '๐Ÿ‘', + DELIM + r'cherries' + DELIM: '๐Ÿ’', + DELIM + r'strawberry' + DELIM: '๐Ÿ“', + DELIM + r'blueberries' + DELIM: '๐Ÿซ', + DELIM + r'kiwi_fruit' + DELIM: '๐Ÿฅ', + DELIM + r'tomato' + DELIM: '๐Ÿ…', + DELIM + r'olive' + DELIM: '๐Ÿซ’', + DELIM + r'coconut' + DELIM: '๐Ÿฅฅ', + + # + # Food Vegetable + # + DELIM + r'avocado' + DELIM: '๐Ÿฅ‘', + DELIM + r'eggplant' + DELIM: '๐Ÿ†', + DELIM + r'potato' + DELIM: '๐Ÿฅ”', + DELIM + r'carrot' + DELIM: '๐Ÿฅ•', + DELIM + r'corn' + DELIM: '๐ŸŒฝ', + DELIM + r'hot_pepper' + DELIM: '๐ŸŒถ๏ธ', + DELIM + r'bell_pepper' + DELIM: '๐Ÿซ‘', + DELIM + r'cucumber' + DELIM: '๐Ÿฅ’', + DELIM + r'leafy_green' + DELIM: '๐Ÿฅฌ', + DELIM + r'broccoli' + DELIM: '๐Ÿฅฆ', + DELIM + r'garlic' + DELIM: '๐Ÿง„', + DELIM + r'onion' + DELIM: '๐Ÿง…', + DELIM + r'peanuts' + DELIM: '๐Ÿฅœ', + DELIM + r'chestnut' + DELIM: '๐ŸŒฐ', + + # + # Food Prepared + # + DELIM + r'bread' + DELIM: '๐Ÿž', + DELIM + r'croissant' + DELIM: '๐Ÿฅ', + DELIM + r'baguette_bread' + DELIM: '๐Ÿฅ–', + DELIM + r'flatbread' + DELIM: '๐Ÿซ“', + DELIM + r'pretzel' + DELIM: '๐Ÿฅจ', + DELIM + r'bagel' + DELIM: '๐Ÿฅฏ', + DELIM + r'pancakes' + DELIM: '๐Ÿฅž', + DELIM + r'waffle' + DELIM: '๐Ÿง‡', + DELIM + r'cheese' + DELIM: '๐Ÿง€', + DELIM + r'meat_on_bone' + DELIM: '๐Ÿ–', + DELIM + r'poultry_leg' + DELIM: '๐Ÿ—', + DELIM + r'cut_of_meat' + DELIM: '๐Ÿฅฉ', + DELIM + r'bacon' + DELIM: '๐Ÿฅ“', + DELIM + r'hamburger' + DELIM: '๐Ÿ”', + DELIM + r'fries' + DELIM: '๐ŸŸ', + DELIM + r'pizza' + DELIM: '๐Ÿ•', + DELIM + r'hotdog' + DELIM: '๐ŸŒญ', + DELIM + r'sandwich' + DELIM: '๐Ÿฅช', + DELIM + r'taco' + DELIM: '๐ŸŒฎ', + DELIM + r'burrito' + DELIM: '๐ŸŒฏ', + DELIM + r'tamale' + DELIM: '๐Ÿซ”', + DELIM + r'stuffed_flatbread' + DELIM: '๐Ÿฅ™', + DELIM + r'falafel' + DELIM: '๐Ÿง†', + DELIM + r'egg' + DELIM: '๐Ÿฅš', + DELIM + r'fried_egg' + DELIM: '๐Ÿณ', + DELIM + r'shallow_pan_of_food' + DELIM: '๐Ÿฅ˜', + DELIM + r'stew' + DELIM: '๐Ÿฒ', + DELIM + r'fondue' + DELIM: '๐Ÿซ•', + DELIM + r'bowl_with_spoon' + DELIM: '๐Ÿฅฃ', + DELIM + r'green_salad' + DELIM: '๐Ÿฅ—', + DELIM + r'popcorn' + DELIM: '๐Ÿฟ', + DELIM + r'butter' + DELIM: '๐Ÿงˆ', + DELIM + r'salt' + DELIM: '๐Ÿง‚', + DELIM + r'canned_food' + DELIM: '๐Ÿฅซ', + + # + # Food Asian + # + DELIM + r'bento' + DELIM: '๐Ÿฑ', + DELIM + r'rice_cracker' + DELIM: '๐Ÿ˜', + DELIM + r'rice_ball' + DELIM: '๐Ÿ™', + DELIM + r'rice' + DELIM: '๐Ÿš', + DELIM + r'curry' + DELIM: '๐Ÿ›', + DELIM + r'ramen' + DELIM: '๐Ÿœ', + DELIM + r'spaghetti' + DELIM: '๐Ÿ', + DELIM + r'sweet_potato' + DELIM: '๐Ÿ ', + DELIM + r'oden' + DELIM: '๐Ÿข', + DELIM + r'sushi' + DELIM: '๐Ÿฃ', + DELIM + r'fried_shrimp' + DELIM: '๐Ÿค', + DELIM + r'fish_cake' + DELIM: '๐Ÿฅ', + DELIM + r'moon_cake' + DELIM: '๐Ÿฅฎ', + DELIM + r'dango' + DELIM: '๐Ÿก', + DELIM + r'dumpling' + DELIM: '๐ŸฅŸ', + DELIM + r'fortune_cookie' + DELIM: '๐Ÿฅ ', + DELIM + r'takeout_box' + DELIM: '๐Ÿฅก', + + # + # Food Marine + # + DELIM + r'crab' + DELIM: '๐Ÿฆ€', + DELIM + r'lobster' + DELIM: '๐Ÿฆž', + DELIM + r'shrimp' + DELIM: '๐Ÿฆ', + DELIM + r'squid' + DELIM: '๐Ÿฆ‘', + DELIM + r'oyster' + DELIM: '๐Ÿฆช', + + # + # Food Sweet + # + DELIM + r'icecream' + DELIM: '๐Ÿฆ', + DELIM + r'shaved_ice' + DELIM: '๐Ÿง', + DELIM + r'ice_cream' + DELIM: '๐Ÿจ', + DELIM + r'doughnut' + DELIM: '๐Ÿฉ', + DELIM + r'cookie' + DELIM: '๐Ÿช', + DELIM + r'birthday' + DELIM: '๐ŸŽ‚', + DELIM + r'cake' + DELIM: '๐Ÿฐ', + DELIM + r'cupcake' + DELIM: '๐Ÿง', + DELIM + r'pie' + DELIM: '๐Ÿฅง', + DELIM + r'chocolate_bar' + DELIM: '๐Ÿซ', + DELIM + r'candy' + DELIM: '๐Ÿฌ', + DELIM + r'lollipop' + DELIM: '๐Ÿญ', + DELIM + r'custard' + DELIM: '๐Ÿฎ', + DELIM + r'honey_pot' + DELIM: '๐Ÿฏ', + + # + # Drink + # + DELIM + r'baby_bottle' + DELIM: '๐Ÿผ', + DELIM + r'milk_glass' + DELIM: '๐Ÿฅ›', + DELIM + r'coffee' + DELIM: 'โ˜•', + DELIM + r'teapot' + DELIM: '๐Ÿซ–', + DELIM + r'tea' + DELIM: '๐Ÿต', + DELIM + r'sake' + DELIM: '๐Ÿถ', + DELIM + r'champagne' + DELIM: '๐Ÿพ', + DELIM + r'wine_glass' + DELIM: '๐Ÿท', + DELIM + r'cocktail' + DELIM: '๐Ÿธ', + DELIM + r'tropical_drink' + DELIM: '๐Ÿน', + DELIM + r'beer' + DELIM: '๐Ÿบ', + DELIM + r'beers' + DELIM: '๐Ÿป', + DELIM + r'clinking_glasses' + DELIM: '๐Ÿฅ‚', + DELIM + r'tumbler_glass' + DELIM: '๐Ÿฅƒ', + DELIM + r'cup_with_straw' + DELIM: '๐Ÿฅค', + DELIM + r'bubble_tea' + DELIM: '๐Ÿง‹', + DELIM + r'beverage_box' + DELIM: '๐Ÿงƒ', + DELIM + r'mate' + DELIM: '๐Ÿง‰', + DELIM + r'ice_cube' + DELIM: '๐ŸงŠ', + + # + # Dishware + # + DELIM + r'chopsticks' + DELIM: '๐Ÿฅข', + DELIM + r'plate_with_cutlery' + DELIM: '๐Ÿฝ๏ธ', + DELIM + r'fork_and_knife' + DELIM: '๐Ÿด', + DELIM + r'spoon' + DELIM: '๐Ÿฅ„', + DELIM + r'(hocho|knife)' + DELIM: '๐Ÿ”ช', + DELIM + r'amphora' + DELIM: '๐Ÿบ', + + # + # Place Map + # + DELIM + r'earth_africa' + DELIM: '๐ŸŒ', + DELIM + r'earth_americas' + DELIM: '๐ŸŒŽ', + DELIM + r'earth_asia' + DELIM: '๐ŸŒ', + DELIM + r'globe_with_meridians' + DELIM: '๐ŸŒ', + DELIM + r'world_map' + DELIM: '๐Ÿ—บ๏ธ', + DELIM + r'japan' + DELIM: '๐Ÿ—พ', + DELIM + r'compass' + DELIM: '๐Ÿงญ', + + # + # Place Geographic + # + DELIM + r'mountain_snow' + DELIM: '๐Ÿ”๏ธ', + DELIM + r'mountain' + DELIM: 'โ›ฐ๏ธ', + DELIM + r'volcano' + DELIM: '๐ŸŒ‹', + DELIM + r'mount_fuji' + DELIM: '๐Ÿ—ป', + DELIM + r'camping' + DELIM: '๐Ÿ•๏ธ', + DELIM + r'beach_umbrella' + DELIM: '๐Ÿ–๏ธ', + DELIM + r'desert' + DELIM: '๐Ÿœ๏ธ', + DELIM + r'desert_island' + DELIM: '๐Ÿ๏ธ', + DELIM + r'national_park' + DELIM: '๐Ÿž๏ธ', + + # + # Place Building + # + DELIM + r'stadium' + DELIM: '๐ŸŸ๏ธ', + DELIM + r'classical_building' + DELIM: '๐Ÿ›๏ธ', + DELIM + r'building_construction' + DELIM: '๐Ÿ—๏ธ', + DELIM + r'bricks' + DELIM: '๐Ÿงฑ', + DELIM + r'rock' + DELIM: '๐Ÿชจ', + DELIM + r'wood' + DELIM: '๐Ÿชต', + DELIM + r'hut' + DELIM: '๐Ÿ›–', + DELIM + r'houses' + DELIM: '๐Ÿ˜๏ธ', + DELIM + r'derelict_house' + DELIM: '๐Ÿš๏ธ', + DELIM + r'house' + DELIM: '๐Ÿ ', + DELIM + r'house_with_garden' + DELIM: '๐Ÿก', + DELIM + r'office' + DELIM: '๐Ÿข', + DELIM + r'post_office' + DELIM: '๐Ÿฃ', + DELIM + r'european_post_office' + DELIM: '๐Ÿค', + DELIM + r'hospital' + DELIM: '๐Ÿฅ', + DELIM + r'bank' + DELIM: '๐Ÿฆ', + DELIM + r'hotel' + DELIM: '๐Ÿจ', + DELIM + r'love_hotel' + DELIM: '๐Ÿฉ', + DELIM + r'convenience_store' + DELIM: '๐Ÿช', + DELIM + r'school' + DELIM: '๐Ÿซ', + DELIM + r'department_store' + DELIM: '๐Ÿฌ', + DELIM + r'factory' + DELIM: '๐Ÿญ', + DELIM + r'japanese_castle' + DELIM: '๐Ÿฏ', + DELIM + r'european_castle' + DELIM: '๐Ÿฐ', + DELIM + r'wedding' + DELIM: '๐Ÿ’’', + DELIM + r'tokyo_tower' + DELIM: '๐Ÿ—ผ', + DELIM + r'statue_of_liberty' + DELIM: '๐Ÿ—ฝ', + + # + # Place Religious + # + DELIM + r'church' + DELIM: 'โ›ช', + DELIM + r'mosque' + DELIM: '๐Ÿ•Œ', + DELIM + r'hindu_temple' + DELIM: '๐Ÿ›•', + DELIM + r'synagogue' + DELIM: '๐Ÿ•', + DELIM + r'shinto_shrine' + DELIM: 'โ›ฉ๏ธ', + DELIM + r'kaaba' + DELIM: '๐Ÿ•‹', + + # + # Place Other + # + DELIM + r'fountain' + DELIM: 'โ›ฒ', + DELIM + r'tent' + DELIM: 'โ›บ', + DELIM + r'foggy' + DELIM: '๐ŸŒ', + DELIM + r'night_with_stars' + DELIM: '๐ŸŒƒ', + DELIM + r'cityscape' + DELIM: '๐Ÿ™๏ธ', + DELIM + r'sunrise_over_mountains' + DELIM: '๐ŸŒ„', + DELIM + r'sunrise' + DELIM: '๐ŸŒ…', + DELIM + r'city_sunset' + DELIM: '๐ŸŒ†', + DELIM + r'city_sunrise' + DELIM: '๐ŸŒ‡', + DELIM + r'bridge_at_night' + DELIM: '๐ŸŒ‰', + DELIM + r'hotsprings' + DELIM: 'โ™จ๏ธ', + DELIM + r'carousel_horse' + DELIM: '๐ŸŽ ', + DELIM + r'ferris_wheel' + DELIM: '๐ŸŽก', + DELIM + r'roller_coaster' + DELIM: '๐ŸŽข', + DELIM + r'barber' + DELIM: '๐Ÿ’ˆ', + DELIM + r'circus_tent' + DELIM: '๐ŸŽช', + + # + # Transport Ground + # + DELIM + r'steam_locomotive' + DELIM: '๐Ÿš‚', + DELIM + r'railway_car' + DELIM: '๐Ÿšƒ', + DELIM + r'bullettrain_side' + DELIM: '๐Ÿš„', + DELIM + r'bullettrain_front' + DELIM: '๐Ÿš…', + DELIM + r'train2' + DELIM: '๐Ÿš†', + DELIM + r'metro' + DELIM: '๐Ÿš‡', + DELIM + r'light_rail' + DELIM: '๐Ÿšˆ', + DELIM + r'station' + DELIM: '๐Ÿš‰', + DELIM + r'tram' + DELIM: '๐ŸšŠ', + DELIM + r'monorail' + DELIM: '๐Ÿš', + DELIM + r'mountain_railway' + DELIM: '๐Ÿšž', + DELIM + r'train' + DELIM: '๐Ÿš‹', + DELIM + r'bus' + DELIM: '๐ŸšŒ', + DELIM + r'oncoming_bus' + DELIM: '๐Ÿš', + DELIM + r'trolleybus' + DELIM: '๐ŸšŽ', + DELIM + r'minibus' + DELIM: '๐Ÿš', + DELIM + r'ambulance' + DELIM: '๐Ÿš‘', + DELIM + r'fire_engine' + DELIM: '๐Ÿš’', + DELIM + r'police_car' + DELIM: '๐Ÿš“', + DELIM + r'oncoming_police_car' + DELIM: '๐Ÿš”', + DELIM + r'taxi' + DELIM: '๐Ÿš•', + DELIM + r'oncoming_taxi' + DELIM: '๐Ÿš–', + DELIM + r'car' + DELIM: '๐Ÿš—', + DELIM + r'(red_car|oncoming_automobile)' + DELIM: '๐Ÿš˜', + DELIM + r'blue_car' + DELIM: '๐Ÿš™', + DELIM + r'pickup_truck' + DELIM: '๐Ÿ›ป', + DELIM + r'truck' + DELIM: '๐Ÿšš', + DELIM + r'articulated_lorry' + DELIM: '๐Ÿš›', + DELIM + r'tractor' + DELIM: '๐Ÿšœ', + DELIM + r'racing_car' + DELIM: '๐ŸŽ๏ธ', + DELIM + r'motorcycle' + DELIM: '๐Ÿ๏ธ', + DELIM + r'motor_scooter' + DELIM: '๐Ÿ›ต', + DELIM + r'manual_wheelchair' + DELIM: '๐Ÿฆฝ', + DELIM + r'motorized_wheelchair' + DELIM: '๐Ÿฆผ', + DELIM + r'auto_rickshaw' + DELIM: '๐Ÿ›บ', + DELIM + r'bike' + DELIM: '๐Ÿšฒ', + DELIM + r'kick_scooter' + DELIM: '๐Ÿ›ด', + DELIM + r'skateboard' + DELIM: '๐Ÿ›น', + DELIM + r'roller_skate' + DELIM: '๐Ÿ›ผ', + DELIM + r'busstop' + DELIM: '๐Ÿš', + DELIM + r'motorway' + DELIM: '๐Ÿ›ฃ๏ธ', + DELIM + r'railway_track' + DELIM: '๐Ÿ›ค๏ธ', + DELIM + r'oil_drum' + DELIM: '๐Ÿ›ข๏ธ', + DELIM + r'fuelpump' + DELIM: 'โ›ฝ', + DELIM + r'rotating_light' + DELIM: '๐Ÿšจ', + DELIM + r'traffic_light' + DELIM: '๐Ÿšฅ', + DELIM + r'vertical_traffic_light' + DELIM: '๐Ÿšฆ', + DELIM + r'stop_sign' + DELIM: '๐Ÿ›‘', + DELIM + r'construction' + DELIM: '๐Ÿšง', + + # + # Transport Water + # + DELIM + r'anchor' + DELIM: 'โš“', + DELIM + r'(sailboat|boat)' + DELIM: 'โ›ต', + DELIM + r'canoe' + DELIM: '๐Ÿ›ถ', + DELIM + r'speedboat' + DELIM: '๐Ÿšค', + DELIM + r'passenger_ship' + DELIM: '๐Ÿ›ณ๏ธ', + DELIM + r'ferry' + DELIM: 'โ›ด๏ธ', + DELIM + r'motor_boat' + DELIM: '๐Ÿ›ฅ๏ธ', + DELIM + r'ship' + DELIM: '๐Ÿšข', + + # + # Transport Air + # + DELIM + r'airplane' + DELIM: 'โœˆ๏ธ', + DELIM + r'small_airplane' + DELIM: '๐Ÿ›ฉ๏ธ', + DELIM + r'flight_departure' + DELIM: '๐Ÿ›ซ', + DELIM + r'flight_arrival' + DELIM: '๐Ÿ›ฌ', + DELIM + r'parachute' + DELIM: '๐Ÿช‚', + DELIM + r'seat' + DELIM: '๐Ÿ’บ', + DELIM + r'helicopter' + DELIM: '๐Ÿš', + DELIM + r'suspension_railway' + DELIM: '๐ŸšŸ', + DELIM + r'mountain_cableway' + DELIM: '๐Ÿš ', + DELIM + r'aerial_tramway' + DELIM: '๐Ÿšก', + DELIM + r'artificial_satellite' + DELIM: '๐Ÿ›ฐ๏ธ', + DELIM + r'rocket' + DELIM: '๐Ÿš€', + DELIM + r'flying_saucer' + DELIM: '๐Ÿ›ธ', + + # + # Hotel + # + DELIM + r'bellhop_bell' + DELIM: '๐Ÿ›Ž๏ธ', + DELIM + r'luggage' + DELIM: '๐Ÿงณ', + + # + # Time + # + DELIM + r'hourglass' + DELIM: 'โŒ›', + DELIM + r'hourglass_flowing_sand' + DELIM: 'โณ', + DELIM + r'watch' + DELIM: 'โŒš', + DELIM + r'alarm_clock' + DELIM: 'โฐ', + DELIM + r'stopwatch' + DELIM: 'โฑ๏ธ', + DELIM + r'timer_clock' + DELIM: 'โฒ๏ธ', + DELIM + r'mantelpiece_clock' + DELIM: '๐Ÿ•ฐ๏ธ', + DELIM + r'clock12' + DELIM: '๐Ÿ•›', + DELIM + r'clock1230' + DELIM: '๐Ÿ•ง', + DELIM + r'clock1' + DELIM: '๐Ÿ•', + DELIM + r'clock130' + DELIM: '๐Ÿ•œ', + DELIM + r'clock2' + DELIM: '๐Ÿ•‘', + DELIM + r'clock230' + DELIM: '๐Ÿ•', + DELIM + r'clock3' + DELIM: '๐Ÿ•’', + DELIM + r'clock330' + DELIM: '๐Ÿ•ž', + DELIM + r'clock4' + DELIM: '๐Ÿ•“', + DELIM + r'clock430' + DELIM: '๐Ÿ•Ÿ', + DELIM + r'clock5' + DELIM: '๐Ÿ•”', + DELIM + r'clock530' + DELIM: '๐Ÿ• ', + DELIM + r'clock6' + DELIM: '๐Ÿ••', + DELIM + r'clock630' + DELIM: '๐Ÿ•ก', + DELIM + r'clock7' + DELIM: '๐Ÿ•–', + DELIM + r'clock730' + DELIM: '๐Ÿ•ข', + DELIM + r'clock8' + DELIM: '๐Ÿ•—', + DELIM + r'clock830' + DELIM: '๐Ÿ•ฃ', + DELIM + r'clock9' + DELIM: '๐Ÿ•˜', + DELIM + r'clock930' + DELIM: '๐Ÿ•ค', + DELIM + r'clock10' + DELIM: '๐Ÿ•™', + DELIM + r'clock1030' + DELIM: '๐Ÿ•ฅ', + DELIM + r'clock11' + DELIM: '๐Ÿ•š', + DELIM + r'clock1130' + DELIM: '๐Ÿ•ฆ', + + # Sky & Weather + DELIM + r'new_moon' + DELIM: '๐ŸŒ‘', + DELIM + r'waxing_crescent_moon' + DELIM: '๐ŸŒ’', + DELIM + r'first_quarter_moon' + DELIM: '๐ŸŒ“', + DELIM + r'moon' + DELIM: '๐ŸŒ”', + DELIM + r'(waxing_gibbous_moon|full_moon)' + DELIM: '๐ŸŒ•', + DELIM + r'waning_gibbous_moon' + DELIM: '๐ŸŒ–', + DELIM + r'last_quarter_moon' + DELIM: '๐ŸŒ—', + DELIM + r'waning_crescent_moon' + DELIM: '๐ŸŒ˜', + DELIM + r'crescent_moon' + DELIM: '๐ŸŒ™', + DELIM + r'new_moon_with_face' + DELIM: '๐ŸŒš', + DELIM + r'first_quarter_moon_with_face' + DELIM: '๐ŸŒ›', + DELIM + r'last_quarter_moon_with_face' + DELIM: '๐ŸŒœ', + DELIM + r'thermometer' + DELIM: '๐ŸŒก๏ธ', + DELIM + r'sunny' + DELIM: 'โ˜€๏ธ', + DELIM + r'full_moon_with_face' + DELIM: '๐ŸŒ', + DELIM + r'sun_with_face' + DELIM: '๐ŸŒž', + DELIM + r'ringed_planet' + DELIM: '๐Ÿช', + DELIM + r'star' + DELIM: 'โญ', + DELIM + r'star2' + DELIM: '๐ŸŒŸ', + DELIM + r'stars' + DELIM: '๐ŸŒ ', + DELIM + r'milky_way' + DELIM: '๐ŸŒŒ', + DELIM + r'cloud' + DELIM: 'โ˜๏ธ', + DELIM + r'partly_sunny' + DELIM: 'โ›…', + DELIM + r'cloud_with_lightning_and_rain' + DELIM: 'โ›ˆ๏ธ', + DELIM + r'sun_behind_small_cloud' + DELIM: '๐ŸŒค๏ธ', + DELIM + r'sun_behind_large_cloud' + DELIM: '๐ŸŒฅ๏ธ', + DELIM + r'sun_behind_rain_cloud' + DELIM: '๐ŸŒฆ๏ธ', + DELIM + r'cloud_with_rain' + DELIM: '๐ŸŒง๏ธ', + DELIM + r'cloud_with_snow' + DELIM: '๐ŸŒจ๏ธ', + DELIM + r'cloud_with_lightning' + DELIM: '๐ŸŒฉ๏ธ', + DELIM + r'tornado' + DELIM: '๐ŸŒช๏ธ', + DELIM + r'fog' + DELIM: '๐ŸŒซ๏ธ', + DELIM + r'wind_face' + DELIM: '๐ŸŒฌ๏ธ', + DELIM + r'cyclone' + DELIM: '๐ŸŒ€', + DELIM + r'rainbow' + DELIM: '๐ŸŒˆ', + DELIM + r'closed_umbrella' + DELIM: '๐ŸŒ‚', + DELIM + r'open_umbrella' + DELIM: 'โ˜‚๏ธ', + DELIM + r'umbrella' + DELIM: 'โ˜”', + DELIM + r'parasol_on_ground' + DELIM: 'โ›ฑ๏ธ', + DELIM + r'zap' + DELIM: 'โšก', + DELIM + r'snowflake' + DELIM: 'โ„๏ธ', + DELIM + r'snowman_with_snow' + DELIM: 'โ˜ƒ๏ธ', + DELIM + r'snowman' + DELIM: 'โ›„', + DELIM + r'comet' + DELIM: 'โ˜„๏ธ', + DELIM + r'fire' + DELIM: '๐Ÿ”ฅ', + DELIM + r'droplet' + DELIM: '๐Ÿ’ง', + DELIM + r'ocean' + DELIM: '๐ŸŒŠ', + + # + # Event + # + DELIM + r'jack_o_lantern' + DELIM: '๐ŸŽƒ', + DELIM + r'christmas_tree' + DELIM: '๐ŸŽ„', + DELIM + r'fireworks' + DELIM: '๐ŸŽ†', + DELIM + r'sparkler' + DELIM: '๐ŸŽ‡', + DELIM + r'firecracker' + DELIM: '๐Ÿงจ', + DELIM + r'sparkles' + DELIM: 'โœจ', + DELIM + r'balloon' + DELIM: '๐ŸŽˆ', + DELIM + r'tada' + DELIM: '๐ŸŽ‰', + DELIM + r'confetti_ball' + DELIM: '๐ŸŽŠ', + DELIM + r'tanabata_tree' + DELIM: '๐ŸŽ‹', + DELIM + r'bamboo' + DELIM: '๐ŸŽ', + DELIM + r'dolls' + DELIM: '๐ŸŽŽ', + DELIM + r'flags' + DELIM: '๐ŸŽ', + DELIM + r'wind_chime' + DELIM: '๐ŸŽ', + DELIM + r'rice_scene' + DELIM: '๐ŸŽ‘', + DELIM + r'red_envelope' + DELIM: '๐Ÿงง', + DELIM + r'ribbon' + DELIM: '๐ŸŽ€', + DELIM + r'gift' + DELIM: '๐ŸŽ', + DELIM + r'reminder_ribbon' + DELIM: '๐ŸŽ—๏ธ', + DELIM + r'tickets' + DELIM: '๐ŸŽŸ๏ธ', + DELIM + r'ticket' + DELIM: '๐ŸŽซ', + + # + # Award Medal + # + DELIM + r'medal_military' + DELIM: '๐ŸŽ–๏ธ', + DELIM + r'trophy' + DELIM: '๐Ÿ†', + DELIM + r'medal_sports' + DELIM: '๐Ÿ…', + DELIM + r'1st_place_medal' + DELIM: '๐Ÿฅ‡', + DELIM + r'2nd_place_medal' + DELIM: '๐Ÿฅˆ', + DELIM + r'3rd_place_medal' + DELIM: '๐Ÿฅ‰', + + # + # Sport + # + DELIM + r'soccer' + DELIM: 'โšฝ', + DELIM + r'baseball' + DELIM: 'โšพ', + DELIM + r'softball' + DELIM: '๐ŸฅŽ', + DELIM + r'basketball' + DELIM: '๐Ÿ€', + DELIM + r'volleyball' + DELIM: '๐Ÿ', + DELIM + r'football' + DELIM: '๐Ÿˆ', + DELIM + r'rugby_football' + DELIM: '๐Ÿ‰', + DELIM + r'tennis' + DELIM: '๐ŸŽพ', + DELIM + r'flying_disc' + DELIM: '๐Ÿฅ', + DELIM + r'bowling' + DELIM: '๐ŸŽณ', + DELIM + r'cricket_game' + DELIM: '๐Ÿ', + DELIM + r'field_hockey' + DELIM: '๐Ÿ‘', + DELIM + r'ice_hockey' + DELIM: '๐Ÿ’', + DELIM + r'lacrosse' + DELIM: '๐Ÿฅ', + DELIM + r'ping_pong' + DELIM: '๐Ÿ“', + DELIM + r'badminton' + DELIM: '๐Ÿธ', + DELIM + r'boxing_glove' + DELIM: '๐ŸฅŠ', + DELIM + r'martial_arts_uniform' + DELIM: '๐Ÿฅ‹', + DELIM + r'goal_net' + DELIM: '๐Ÿฅ…', + DELIM + r'golf' + DELIM: 'โ›ณ', + DELIM + r'ice_skate' + DELIM: 'โ›ธ๏ธ', + DELIM + r'fishing_pole_and_fish' + DELIM: '๐ŸŽฃ', + DELIM + r'diving_mask' + DELIM: '๐Ÿคฟ', + DELIM + r'running_shirt_with_sash' + DELIM: '๐ŸŽฝ', + DELIM + r'ski' + DELIM: '๐ŸŽฟ', + DELIM + r'sled' + DELIM: '๐Ÿ›ท', + DELIM + r'curling_stone' + DELIM: '๐ŸฅŒ', + + # + # Game + # + DELIM + r'dart' + DELIM: '๐ŸŽฏ', + DELIM + r'yo_yo' + DELIM: '๐Ÿช€', + DELIM + r'kite' + DELIM: '๐Ÿช', + DELIM + r'gun' + DELIM: '๐Ÿ”ซ', + DELIM + r'8ball' + DELIM: '๐ŸŽฑ', + DELIM + r'crystal_ball' + DELIM: '๐Ÿ”ฎ', + DELIM + r'magic_wand' + DELIM: '๐Ÿช„', + DELIM + r'video_game' + DELIM: '๐ŸŽฎ', + DELIM + r'joystick' + DELIM: '๐Ÿ•น๏ธ', + DELIM + r'slot_machine' + DELIM: '๐ŸŽฐ', + DELIM + r'game_die' + DELIM: '๐ŸŽฒ', + DELIM + r'jigsaw' + DELIM: '๐Ÿงฉ', + DELIM + r'teddy_bear' + DELIM: '๐Ÿงธ', + DELIM + r'pinata' + DELIM: '๐Ÿช…', + DELIM + r'nesting_dolls' + DELIM: '๐Ÿช†', + DELIM + r'spades' + DELIM: 'โ™ ๏ธ', + DELIM + r'hearts' + DELIM: 'โ™ฅ๏ธ', + DELIM + r'diamonds' + DELIM: 'โ™ฆ๏ธ', + DELIM + r'clubs' + DELIM: 'โ™ฃ๏ธ', + DELIM + r'chess_pawn' + DELIM: 'โ™Ÿ๏ธ', + DELIM + r'black_joker' + DELIM: '๐Ÿƒ', + DELIM + r'mahjong' + DELIM: '๐Ÿ€„', + DELIM + r'flower_playing_cards' + DELIM: '๐ŸŽด', + + # + # Arts & Crafts + # + DELIM + r'performing_arts' + DELIM: '๐ŸŽญ', + DELIM + r'framed_picture' + DELIM: '๐Ÿ–ผ๏ธ', + DELIM + r'art' + DELIM: '๐ŸŽจ', + DELIM + r'thread' + DELIM: '๐Ÿงต', + DELIM + r'sewing_needle' + DELIM: '๐Ÿชก', + DELIM + r'yarn' + DELIM: '๐Ÿงถ', + DELIM + r'knot' + DELIM: '๐Ÿชข', + + # + # Clothing + # + DELIM + r'eyeglasses' + DELIM: '๐Ÿ‘“', + DELIM + r'dark_sunglasses' + DELIM: '๐Ÿ•ถ๏ธ', + DELIM + r'goggles' + DELIM: '๐Ÿฅฝ', + DELIM + r'lab_coat' + DELIM: '๐Ÿฅผ', + DELIM + r'safety_vest' + DELIM: '๐Ÿฆบ', + DELIM + r'necktie' + DELIM: '๐Ÿ‘”', + DELIM + r't?shirt' + DELIM: '๐Ÿ‘•', + DELIM + r'jeans' + DELIM: '๐Ÿ‘–', + DELIM + r'scarf' + DELIM: '๐Ÿงฃ', + DELIM + r'gloves' + DELIM: '๐Ÿงค', + DELIM + r'coat' + DELIM: '๐Ÿงฅ', + DELIM + r'socks' + DELIM: '๐Ÿงฆ', + DELIM + r'dress' + DELIM: '๐Ÿ‘—', + DELIM + r'kimono' + DELIM: '๐Ÿ‘˜', + DELIM + r'sari' + DELIM: '๐Ÿฅป', + DELIM + r'one_piece_swimsuit' + DELIM: '๐Ÿฉฑ', + DELIM + r'swim_brief' + DELIM: '๐Ÿฉฒ', + DELIM + r'shorts' + DELIM: '๐Ÿฉณ', + DELIM + r'bikini' + DELIM: '๐Ÿ‘™', + DELIM + r'womans_clothes' + DELIM: '๐Ÿ‘š', + DELIM + r'purse' + DELIM: '๐Ÿ‘›', + DELIM + r'handbag' + DELIM: '๐Ÿ‘œ', + DELIM + r'pouch' + DELIM: '๐Ÿ‘', + DELIM + r'shopping' + DELIM: '๐Ÿ›๏ธ', + DELIM + r'school_satchel' + DELIM: '๐ŸŽ’', + DELIM + r'thong_sandal' + DELIM: '๐Ÿฉด', + DELIM + r'(mans_)?shoe' + DELIM: '๐Ÿ‘ž', + DELIM + r'athletic_shoe' + DELIM: '๐Ÿ‘Ÿ', + DELIM + r'hiking_boot' + DELIM: '๐Ÿฅพ', + DELIM + r'flat_shoe' + DELIM: '๐Ÿฅฟ', + DELIM + r'high_heel' + DELIM: '๐Ÿ‘ ', + DELIM + r'sandal' + DELIM: '๐Ÿ‘ก', + DELIM + r'ballet_shoes' + DELIM: '๐Ÿฉฐ', + DELIM + r'boot' + DELIM: '๐Ÿ‘ข', + DELIM + r'crown' + DELIM: '๐Ÿ‘‘', + DELIM + r'womans_hat' + DELIM: '๐Ÿ‘’', + DELIM + r'tophat' + DELIM: '๐ŸŽฉ', + DELIM + r'mortar_board' + DELIM: '๐ŸŽ“', + DELIM + r'billed_cap' + DELIM: '๐Ÿงข', + DELIM + r'military_helmet' + DELIM: '๐Ÿช–', + DELIM + r'rescue_worker_helmet' + DELIM: 'โ›‘๏ธ', + DELIM + r'prayer_beads' + DELIM: '๐Ÿ“ฟ', + DELIM + r'lipstick' + DELIM: '๐Ÿ’„', + DELIM + r'ring' + DELIM: '๐Ÿ’', + DELIM + r'gem' + DELIM: '๐Ÿ’Ž', + + # + # Sound + # + DELIM + r'mute' + DELIM: '๐Ÿ”‡', + DELIM + r'speaker' + DELIM: '๐Ÿ”ˆ', + DELIM + r'sound' + DELIM: '๐Ÿ”‰', + DELIM + r'loud_sound' + DELIM: '๐Ÿ”Š', + DELIM + r'loudspeaker' + DELIM: '๐Ÿ“ข', + DELIM + r'mega' + DELIM: '๐Ÿ“ฃ', + DELIM + r'postal_horn' + DELIM: '๐Ÿ“ฏ', + DELIM + r'bell' + DELIM: '๐Ÿ””', + DELIM + r'no_bell' + DELIM: '๐Ÿ”•', + + # + # Music + # + DELIM + r'musical_score' + DELIM: '๐ŸŽผ', + DELIM + r'musical_note' + DELIM: '๐ŸŽต', + DELIM + r'notes' + DELIM: '๐ŸŽถ', + DELIM + r'studio_microphone' + DELIM: '๐ŸŽ™๏ธ', + DELIM + r'level_slider' + DELIM: '๐ŸŽš๏ธ', + DELIM + r'control_knobs' + DELIM: '๐ŸŽ›๏ธ', + DELIM + r'microphone' + DELIM: '๐ŸŽค', + DELIM + r'headphones' + DELIM: '๐ŸŽง', + DELIM + r'radio' + DELIM: '๐Ÿ“ป', + + # + # Musical Instrument + # + DELIM + r'saxophone' + DELIM: '๐ŸŽท', + DELIM + r'accordion' + DELIM: '๐Ÿช—', + DELIM + r'guitar' + DELIM: '๐ŸŽธ', + DELIM + r'musical_keyboard' + DELIM: '๐ŸŽน', + DELIM + r'trumpet' + DELIM: '๐ŸŽบ', + DELIM + r'violin' + DELIM: '๐ŸŽป', + DELIM + r'banjo' + DELIM: '๐Ÿช•', + DELIM + r'drum' + DELIM: '๐Ÿฅ', + DELIM + r'long_drum' + DELIM: '๐Ÿช˜', + + # + # Phone + # + DELIM + r'iphone' + DELIM: '๐Ÿ“ฑ', + DELIM + r'calling' + DELIM: '๐Ÿ“ฒ', + DELIM + r'phone' + DELIM: 'โ˜Ž๏ธ', + DELIM + r'telephone(_receiver)?' + DELIM: '๐Ÿ“ž', + DELIM + r'pager' + DELIM: '๐Ÿ“Ÿ', + DELIM + r'fax' + DELIM: '๐Ÿ“ ', + + # + # Computer + # + DELIM + r'battery' + DELIM: '๐Ÿ”‹', + DELIM + r'electric_plug' + DELIM: '๐Ÿ”Œ', + DELIM + r'computer' + DELIM: '๐Ÿ’ป', + DELIM + r'desktop_computer' + DELIM: '๐Ÿ–ฅ๏ธ', + DELIM + r'printer' + DELIM: '๐Ÿ–จ๏ธ', + DELIM + r'keyboard' + DELIM: 'โŒจ๏ธ', + DELIM + r'computer_mouse' + DELIM: '๐Ÿ–ฑ๏ธ', + DELIM + r'trackball' + DELIM: '๐Ÿ–ฒ๏ธ', + DELIM + r'minidisc' + DELIM: '๐Ÿ’ฝ', + DELIM + r'floppy_disk' + DELIM: '๐Ÿ’พ', + DELIM + r'cd' + DELIM: '๐Ÿ’ฟ', + DELIM + r'dvd' + DELIM: '๐Ÿ“€', + DELIM + r'abacus' + DELIM: '๐Ÿงฎ', + + # + # Light & Video + # + DELIM + r'movie_camera' + DELIM: '๐ŸŽฅ', + DELIM + r'film_strip' + DELIM: '๐ŸŽž๏ธ', + DELIM + r'film_projector' + DELIM: '๐Ÿ“ฝ๏ธ', + DELIM + r'clapper' + DELIM: '๐ŸŽฌ', + DELIM + r'tv' + DELIM: '๐Ÿ“บ', + DELIM + r'camera' + DELIM: '๐Ÿ“ท', + DELIM + r'camera_flash' + DELIM: '๐Ÿ“ธ', + DELIM + r'video_camera' + DELIM: '๐Ÿ“น', + DELIM + r'vhs' + DELIM: '๐Ÿ“ผ', + DELIM + r'mag' + DELIM: '๐Ÿ”', + DELIM + r'mag_right' + DELIM: '๐Ÿ”Ž', + DELIM + r'candle' + DELIM: '๐Ÿ•ฏ๏ธ', + DELIM + r'bulb' + DELIM: '๐Ÿ’ก', + DELIM + r'flashlight' + DELIM: '๐Ÿ”ฆ', + DELIM + r'(izakaya_)?lantern' + DELIM: '๐Ÿฎ', + DELIM + r'diya_lamp' + DELIM: '๐Ÿช”', + + # + # Book Paper + # + DELIM + r'notebook_with_decorative_cover' + DELIM: '๐Ÿ“”', + DELIM + r'closed_book' + DELIM: '๐Ÿ“•', + DELIM + r'(open_)?book' + DELIM: '๐Ÿ“–', + DELIM + r'green_book' + DELIM: '๐Ÿ“—', + DELIM + r'blue_book' + DELIM: '๐Ÿ“˜', + DELIM + r'orange_book' + DELIM: '๐Ÿ“™', + DELIM + r'books' + DELIM: '๐Ÿ“š', + DELIM + r'notebook' + DELIM: '๐Ÿ““', + DELIM + r'ledger' + DELIM: '๐Ÿ“’', + DELIM + r'page_with_curl' + DELIM: '๐Ÿ“ƒ', + DELIM + r'scroll' + DELIM: '๐Ÿ“œ', + DELIM + r'page_facing_up' + DELIM: '๐Ÿ“„', + DELIM + r'newspaper' + DELIM: '๐Ÿ“ฐ', + DELIM + r'newspaper_roll' + DELIM: '๐Ÿ—ž๏ธ', + DELIM + r'bookmark_tabs' + DELIM: '๐Ÿ“‘', + DELIM + r'bookmark' + DELIM: '๐Ÿ”–', + DELIM + r'label' + DELIM: '๐Ÿท๏ธ', + + # + # Money + # + DELIM + r'moneybag' + DELIM: '๐Ÿ’ฐ', + DELIM + r'coin' + DELIM: '๐Ÿช™', + DELIM + r'yen' + DELIM: '๐Ÿ’ด', + DELIM + r'dollar' + DELIM: '๐Ÿ’ต', + DELIM + r'euro' + DELIM: '๐Ÿ’ถ', + DELIM + r'pound' + DELIM: '๐Ÿ’ท', + DELIM + r'money_with_wings' + DELIM: '๐Ÿ’ธ', + DELIM + r'credit_card' + DELIM: '๐Ÿ’ณ', + DELIM + r'receipt' + DELIM: '๐Ÿงพ', + DELIM + r'chart' + DELIM: '๐Ÿ’น', + + # + # Mail + # + DELIM + r'envelope' + DELIM: 'โœ‰๏ธ', + DELIM + r'e-?mail' + DELIM: '๐Ÿ“ง', + DELIM + r'incoming_envelope' + DELIM: '๐Ÿ“จ', + DELIM + r'envelope_with_arrow' + DELIM: '๐Ÿ“ฉ', + DELIM + r'outbox_tray' + DELIM: '๐Ÿ“ค', + DELIM + r'inbox_tray' + DELIM: '๐Ÿ“ฅ', + DELIM + r'package' + DELIM: '๐Ÿ“ฆ', + DELIM + r'mailbox' + DELIM: '๐Ÿ“ซ', + DELIM + r'mailbox_closed' + DELIM: '๐Ÿ“ช', + DELIM + r'mailbox_with_mail' + DELIM: '๐Ÿ“ฌ', + DELIM + r'mailbox_with_no_mail' + DELIM: '๐Ÿ“ญ', + DELIM + r'postbox' + DELIM: '๐Ÿ“ฎ', + DELIM + r'ballot_box' + DELIM: '๐Ÿ—ณ๏ธ', + + # + # Writing + # + DELIM + r'pencil2' + DELIM: 'โœ๏ธ', + DELIM + r'black_nib' + DELIM: 'โœ’๏ธ', + DELIM + r'fountain_pen' + DELIM: '๐Ÿ–‹๏ธ', + DELIM + r'pen' + DELIM: '๐Ÿ–Š๏ธ', + DELIM + r'paintbrush' + DELIM: '๐Ÿ–Œ๏ธ', + DELIM + r'crayon' + DELIM: '๐Ÿ–๏ธ', + DELIM + r'(memo|pencil)' + DELIM: '๐Ÿ“', + + # + # Office + # + DELIM + r'briefcase' + DELIM: '๐Ÿ’ผ', + DELIM + r'file_folder' + DELIM: '๐Ÿ“', + DELIM + r'open_file_folder' + DELIM: '๐Ÿ“‚', + DELIM + r'card_index_dividers' + DELIM: '๐Ÿ—‚๏ธ', + DELIM + r'date' + DELIM: '๐Ÿ“…', + DELIM + r'calendar' + DELIM: '๐Ÿ“†', + DELIM + r'spiral_notepad' + DELIM: '๐Ÿ—’๏ธ', + DELIM + r'spiral_calendar' + DELIM: '๐Ÿ—“๏ธ', + DELIM + r'card_index' + DELIM: '๐Ÿ“‡', + DELIM + r'chart_with_upwards_trend' + DELIM: '๐Ÿ“ˆ', + DELIM + r'chart_with_downwards_trend' + DELIM: '๐Ÿ“‰', + DELIM + r'bar_chart' + DELIM: '๐Ÿ“Š', + DELIM + r'clipboard' + DELIM: '๐Ÿ“‹', + DELIM + r'pushpin' + DELIM: '๐Ÿ“Œ', + DELIM + r'round_pushpin' + DELIM: '๐Ÿ“', + DELIM + r'paperclip' + DELIM: '๐Ÿ“Ž', + DELIM + r'paperclips' + DELIM: '๐Ÿ–‡๏ธ', + DELIM + r'straight_ruler' + DELIM: '๐Ÿ“', + DELIM + r'triangular_ruler' + DELIM: '๐Ÿ“', + DELIM + r'scissors' + DELIM: 'โœ‚๏ธ', + DELIM + r'card_file_box' + DELIM: '๐Ÿ—ƒ๏ธ', + DELIM + r'file_cabinet' + DELIM: '๐Ÿ—„๏ธ', + DELIM + r'wastebasket' + DELIM: '๐Ÿ—‘๏ธ', + + # + # Lock + # + DELIM + r'lock' + DELIM: '๐Ÿ”’', + DELIM + r'unlock' + DELIM: '๐Ÿ”“', + DELIM + r'lock_with_ink_pen' + DELIM: '๐Ÿ”', + DELIM + r'closed_lock_with_key' + DELIM: '๐Ÿ”', + DELIM + r'key' + DELIM: '๐Ÿ”‘', + DELIM + r'old_key' + DELIM: '๐Ÿ—๏ธ', + + # + # Tool + # + DELIM + r'hammer' + DELIM: '๐Ÿ”จ', + DELIM + r'axe' + DELIM: '๐Ÿช“', + DELIM + r'pick' + DELIM: 'โ›๏ธ', + DELIM + r'hammer_and_pick' + DELIM: 'โš’๏ธ', + DELIM + r'hammer_and_wrench' + DELIM: '๐Ÿ› ๏ธ', + DELIM + r'dagger' + DELIM: '๐Ÿ—ก๏ธ', + DELIM + r'crossed_swords' + DELIM: 'โš”๏ธ', + DELIM + r'bomb' + DELIM: '๐Ÿ’ฃ', + DELIM + r'boomerang' + DELIM: '๐Ÿชƒ', + DELIM + r'bow_and_arrow' + DELIM: '๐Ÿน', + DELIM + r'shield' + DELIM: '๐Ÿ›ก๏ธ', + DELIM + r'carpentry_saw' + DELIM: '๐Ÿชš', + DELIM + r'wrench' + DELIM: '๐Ÿ”ง', + DELIM + r'screwdriver' + DELIM: '๐Ÿช›', + DELIM + r'nut_and_bolt' + DELIM: '๐Ÿ”ฉ', + DELIM + r'gear' + DELIM: 'โš™๏ธ', + DELIM + r'clamp' + DELIM: '๐Ÿ—œ๏ธ', + DELIM + r'balance_scale' + DELIM: 'โš–๏ธ', + DELIM + r'probing_cane' + DELIM: '๐Ÿฆฏ', + DELIM + r'link' + DELIM: '๐Ÿ”—', + DELIM + r'chains' + DELIM: 'โ›“๏ธ', + DELIM + r'hook' + DELIM: '๐Ÿช', + DELIM + r'toolbox' + DELIM: '๐Ÿงฐ', + DELIM + r'magnet' + DELIM: '๐Ÿงฒ', + DELIM + r'ladder' + DELIM: '๐Ÿชœ', + + # + # Science + # + DELIM + r'alembic' + DELIM: 'โš—๏ธ', + DELIM + r'test_tube' + DELIM: '๐Ÿงช', + DELIM + r'petri_dish' + DELIM: '๐Ÿงซ', + DELIM + r'dna' + DELIM: '๐Ÿงฌ', + DELIM + r'microscope' + DELIM: '๐Ÿ”ฌ', + DELIM + r'telescope' + DELIM: '๐Ÿ”ญ', + DELIM + r'satellite' + DELIM: '๐Ÿ“ก', + + # + # Medical + # + DELIM + r'syringe' + DELIM: '๐Ÿ’‰', + DELIM + r'drop_of_blood' + DELIM: '๐Ÿฉธ', + DELIM + r'pill' + DELIM: '๐Ÿ’Š', + DELIM + r'adhesive_bandage' + DELIM: '๐Ÿฉน', + DELIM + r'stethoscope' + DELIM: '๐Ÿฉบ', + + # + # Household + # + DELIM + r'door' + DELIM: '๐Ÿšช', + DELIM + r'elevator' + DELIM: '๐Ÿ›—', + DELIM + r'mirror' + DELIM: '๐Ÿชž', + DELIM + r'window' + DELIM: '๐ŸชŸ', + DELIM + r'bed' + DELIM: '๐Ÿ›๏ธ', + DELIM + r'couch_and_lamp' + DELIM: '๐Ÿ›‹๏ธ', + DELIM + r'chair' + DELIM: '๐Ÿช‘', + DELIM + r'toilet' + DELIM: '๐Ÿšฝ', + DELIM + r'plunger' + DELIM: '๐Ÿช ', + DELIM + r'shower' + DELIM: '๐Ÿšฟ', + DELIM + r'bathtub' + DELIM: '๐Ÿ›', + DELIM + r'mouse_trap' + DELIM: '๐Ÿชค', + DELIM + r'razor' + DELIM: '๐Ÿช’', + DELIM + r'lotion_bottle' + DELIM: '๐Ÿงด', + DELIM + r'safety_pin' + DELIM: '๐Ÿงท', + DELIM + r'broom' + DELIM: '๐Ÿงน', + DELIM + r'basket' + DELIM: '๐Ÿงบ', + DELIM + r'roll_of_paper' + DELIM: '๐Ÿงป', + DELIM + r'bucket' + DELIM: '๐Ÿชฃ', + DELIM + r'soap' + DELIM: '๐Ÿงผ', + DELIM + r'toothbrush' + DELIM: '๐Ÿชฅ', + DELIM + r'sponge' + DELIM: '๐Ÿงฝ', + DELIM + r'fire_extinguisher' + DELIM: '๐Ÿงฏ', + DELIM + r'shopping_cart' + DELIM: '๐Ÿ›’', + + # + # Other Object + # + DELIM + r'smoking' + DELIM: '๐Ÿšฌ', + DELIM + r'coffin' + DELIM: 'โšฐ๏ธ', + DELIM + r'headstone' + DELIM: '๐Ÿชฆ', + DELIM + r'funeral_urn' + DELIM: 'โšฑ๏ธ', + DELIM + r'nazar_amulet' + DELIM: '๐Ÿงฟ', + DELIM + r'moyai' + DELIM: '๐Ÿ—ฟ', + DELIM + r'placard' + DELIM: '๐Ÿชง', + + # + # Transport Sign + # + DELIM + r'atm' + DELIM: '๐Ÿง', + DELIM + r'put_litter_in_its_place' + DELIM: '๐Ÿšฎ', + DELIM + r'potable_water' + DELIM: '๐Ÿšฐ', + DELIM + r'wheelchair' + DELIM: 'โ™ฟ', + DELIM + r'mens' + DELIM: '๐Ÿšน', + DELIM + r'womens' + DELIM: '๐Ÿšบ', + DELIM + r'restroom' + DELIM: '๐Ÿšป', + DELIM + r'baby_symbol' + DELIM: '๐Ÿšผ', + DELIM + r'wc' + DELIM: '๐Ÿšพ', + DELIM + r'passport_control' + DELIM: '๐Ÿ›‚', + DELIM + r'customs' + DELIM: '๐Ÿ›ƒ', + DELIM + r'baggage_claim' + DELIM: '๐Ÿ›„', + DELIM + r'left_luggage' + DELIM: '๐Ÿ›…', + + # + # Warning + # + DELIM + r'warning' + DELIM: 'โš ๏ธ', + DELIM + r'children_crossing' + DELIM: '๐Ÿšธ', + DELIM + r'no_entry' + DELIM: 'โ›”', + DELIM + r'no_entry_sign' + DELIM: '๐Ÿšซ', + DELIM + r'no_bicycles' + DELIM: '๐Ÿšณ', + DELIM + r'no_smoking' + DELIM: '๐Ÿšญ', + DELIM + r'do_not_litter' + DELIM: '๐Ÿšฏ', + DELIM + r'non-potable_water' + DELIM: '๐Ÿšฑ', + DELIM + r'no_pedestrians' + DELIM: '๐Ÿšท', + DELIM + r'no_mobile_phones' + DELIM: '๐Ÿ“ต', + DELIM + r'underage' + DELIM: '๐Ÿ”ž', + DELIM + r'radioactive' + DELIM: 'โ˜ข๏ธ', + DELIM + r'biohazard' + DELIM: 'โ˜ฃ๏ธ', + + # + # Arrow + # + DELIM + r'arrow_up' + DELIM: 'โฌ†๏ธ', + DELIM + r'arrow_upper_right' + DELIM: 'โ†—๏ธ', + DELIM + r'arrow_right' + DELIM: 'โžก๏ธ', + DELIM + r'arrow_lower_right' + DELIM: 'โ†˜๏ธ', + DELIM + r'arrow_down' + DELIM: 'โฌ‡๏ธ', + DELIM + r'arrow_lower_left' + DELIM: 'โ†™๏ธ', + DELIM + r'arrow_left' + DELIM: 'โฌ…๏ธ', + DELIM + r'arrow_upper_left' + DELIM: 'โ†–๏ธ', + DELIM + r'arrow_up_down' + DELIM: 'โ†•๏ธ', + DELIM + r'left_right_arrow' + DELIM: 'โ†”๏ธ', + DELIM + r'leftwards_arrow_with_hook' + DELIM: 'โ†ฉ๏ธ', + DELIM + r'arrow_right_hook' + DELIM: 'โ†ช๏ธ', + DELIM + r'arrow_heading_up' + DELIM: 'โคด๏ธ', + DELIM + r'arrow_heading_down' + DELIM: 'โคต๏ธ', + DELIM + r'arrows_clockwise' + DELIM: '๐Ÿ”ƒ', + DELIM + r'arrows_counterclockwise' + DELIM: '๐Ÿ”„', + DELIM + r'back' + DELIM: '๐Ÿ”™', + DELIM + r'end' + DELIM: '๐Ÿ”š', + DELIM + r'on' + DELIM: '๐Ÿ”›', + DELIM + r'soon' + DELIM: '๐Ÿ”œ', + DELIM + r'top' + DELIM: '๐Ÿ”', + + # + # Religion + # + DELIM + r'place_of_worship' + DELIM: '๐Ÿ›', + DELIM + r'atom_symbol' + DELIM: 'โš›๏ธ', + DELIM + r'om' + DELIM: '๐Ÿ•‰๏ธ', + DELIM + r'star_of_david' + DELIM: 'โœก๏ธ', + DELIM + r'wheel_of_dharma' + DELIM: 'โ˜ธ๏ธ', + DELIM + r'yin_yang' + DELIM: 'โ˜ฏ๏ธ', + DELIM + r'latin_cross' + DELIM: 'โœ๏ธ', + DELIM + r'orthodox_cross' + DELIM: 'โ˜ฆ๏ธ', + DELIM + r'star_and_crescent' + DELIM: 'โ˜ช๏ธ', + DELIM + r'peace_symbol' + DELIM: 'โ˜ฎ๏ธ', + DELIM + r'menorah' + DELIM: '๐Ÿ•Ž', + DELIM + r'six_pointed_star' + DELIM: '๐Ÿ”ฏ', + + # + # Zodiac + # + DELIM + r'aries' + DELIM: 'โ™ˆ', + DELIM + r'taurus' + DELIM: 'โ™‰', + DELIM + r'gemini' + DELIM: 'โ™Š', + DELIM + r'cancer' + DELIM: 'โ™‹', + DELIM + r'leo' + DELIM: 'โ™Œ', + DELIM + r'virgo' + DELIM: 'โ™', + DELIM + r'libra' + DELIM: 'โ™Ž', + DELIM + r'scorpius' + DELIM: 'โ™', + DELIM + r'sagittarius' + DELIM: 'โ™', + DELIM + r'capricorn' + DELIM: 'โ™‘', + DELIM + r'aquarius' + DELIM: 'โ™’', + DELIM + r'pisces' + DELIM: 'โ™“', + DELIM + r'ophiuchus' + DELIM: 'โ›Ž', + + # + # Av Symbol + # + DELIM + r'twisted_rightwards_arrows' + DELIM: '๐Ÿ”€', + DELIM + r'repeat' + DELIM: '๐Ÿ”', + DELIM + r'repeat_one' + DELIM: '๐Ÿ”‚', + DELIM + r'arrow_forward' + DELIM: 'โ–ถ๏ธ', + DELIM + r'fast_forward' + DELIM: 'โฉ', + DELIM + r'next_track_button' + DELIM: 'โญ๏ธ', + DELIM + r'play_or_pause_button' + DELIM: 'โฏ๏ธ', + DELIM + r'arrow_backward' + DELIM: 'โ—€๏ธ', + DELIM + r'rewind' + DELIM: 'โช', + DELIM + r'previous_track_button' + DELIM: 'โฎ๏ธ', + DELIM + r'arrow_up_small' + DELIM: '๐Ÿ”ผ', + DELIM + r'arrow_double_up' + DELIM: 'โซ', + DELIM + r'arrow_down_small' + DELIM: '๐Ÿ”ฝ', + DELIM + r'arrow_double_down' + DELIM: 'โฌ', + DELIM + r'pause_button' + DELIM: 'โธ๏ธ', + DELIM + r'stop_button' + DELIM: 'โน๏ธ', + DELIM + r'record_button' + DELIM: 'โบ๏ธ', + DELIM + r'eject_button' + DELIM: 'โ๏ธ', + DELIM + r'cinema' + DELIM: '๐ŸŽฆ', + DELIM + r'low_brightness' + DELIM: '๐Ÿ”…', + DELIM + r'high_brightness' + DELIM: '๐Ÿ”†', + DELIM + r'signal_strength' + DELIM: '๐Ÿ“ถ', + DELIM + r'vibration_mode' + DELIM: '๐Ÿ“ณ', + DELIM + r'mobile_phone_off' + DELIM: '๐Ÿ“ด', + + # + # Gender + # + DELIM + r'female_sign' + DELIM: 'โ™€๏ธ', + DELIM + r'male_sign' + DELIM: 'โ™‚๏ธ', + DELIM + r'transgender_symbol' + DELIM: 'โšง๏ธ', + + # + # Math + # + DELIM + r'heavy_multiplication_x' + DELIM: 'โœ–๏ธ', + DELIM + r'heavy_plus_sign' + DELIM: 'โž•', + DELIM + r'heavy_minus_sign' + DELIM: 'โž–', + DELIM + r'heavy_division_sign' + DELIM: 'โž—', + DELIM + r'infinity' + DELIM: 'โ™พ๏ธ', + + # + # Punctuation + # + DELIM + r'bangbang' + DELIM: 'โ€ผ๏ธ', + DELIM + r'interrobang' + DELIM: 'โ‰๏ธ', + DELIM + r'question' + DELIM: 'โ“', + DELIM + r'grey_question' + DELIM: 'โ”', + DELIM + r'grey_exclamation' + DELIM: 'โ•', + DELIM + r'(heavy_exclamation_mark|exclamation)' + DELIM: 'โ—', + DELIM + r'wavy_dash' + DELIM: 'ใ€ฐ๏ธ', + + # + # Currency + # + DELIM + r'currency_exchange' + DELIM: '๐Ÿ’ฑ', + DELIM + r'heavy_dollar_sign' + DELIM: '๐Ÿ’ฒ', + + # + # Other Symbol + # + DELIM + r'medical_symbol' + DELIM: 'โš•๏ธ', + DELIM + r'recycle' + DELIM: 'โ™ป๏ธ', + DELIM + r'fleur_de_lis' + DELIM: 'โšœ๏ธ', + DELIM + r'trident' + DELIM: '๐Ÿ”ฑ', + DELIM + r'name_badge' + DELIM: '๐Ÿ“›', + DELIM + r'beginner' + DELIM: '๐Ÿ”ฐ', + DELIM + r'o' + DELIM: 'โญ•', + DELIM + r'white_check_mark' + DELIM: 'โœ…', + DELIM + r'ballot_box_with_check' + DELIM: 'โ˜‘๏ธ', + DELIM + r'heavy_check_mark' + DELIM: 'โœ”๏ธ', + DELIM + r'x' + DELIM: 'โŒ', + DELIM + r'negative_squared_cross_mark' + DELIM: 'โŽ', + DELIM + r'curly_loop' + DELIM: 'โžฐ', + DELIM + r'loop' + DELIM: 'โžฟ', + DELIM + r'part_alternation_mark' + DELIM: 'ใ€ฝ๏ธ', + DELIM + r'eight_spoked_asterisk' + DELIM: 'โœณ๏ธ', + DELIM + r'eight_pointed_black_star' + DELIM: 'โœด๏ธ', + DELIM + r'sparkle' + DELIM: 'โ‡๏ธ', + DELIM + r'copyright' + DELIM: 'ยฉ๏ธ', + DELIM + r'registered' + DELIM: 'ยฎ๏ธ', + DELIM + r'tm' + DELIM: 'โ„ข๏ธ', + + # + # Keycap + # + DELIM + r'hash' + DELIM: '#๏ธโƒฃ', + DELIM + r'asterisk' + DELIM: '*๏ธโƒฃ', + DELIM + r'zero' + DELIM: '0๏ธโƒฃ', + DELIM + r'one' + DELIM: '1๏ธโƒฃ', + DELIM + r'two' + DELIM: '2๏ธโƒฃ', + DELIM + r'three' + DELIM: '3๏ธโƒฃ', + DELIM + r'four' + DELIM: '4๏ธโƒฃ', + DELIM + r'five' + DELIM: '5๏ธโƒฃ', + DELIM + r'six' + DELIM: '6๏ธโƒฃ', + DELIM + r'seven' + DELIM: '7๏ธโƒฃ', + DELIM + r'eight' + DELIM: '8๏ธโƒฃ', + DELIM + r'nine' + DELIM: '9๏ธโƒฃ', + DELIM + r'keycap_ten' + DELIM: '๐Ÿ”Ÿ', + + # + # Alphanum + # + DELIM + r'capital_abcd' + DELIM: '๐Ÿ” ', + DELIM + r'abcd' + DELIM: '๐Ÿ”ก', + DELIM + r'1234' + DELIM: '๐Ÿ”ข', + DELIM + r'symbols' + DELIM: '๐Ÿ”ฃ', + DELIM + r'abc' + DELIM: '๐Ÿ”ค', + DELIM + r'a' + DELIM: '๐Ÿ…ฐ๏ธ', + DELIM + r'ab' + DELIM: '๐Ÿ†Ž', + DELIM + r'b' + DELIM: '๐Ÿ…ฑ๏ธ', + DELIM + r'cl' + DELIM: '๐Ÿ†‘', + DELIM + r'cool' + DELIM: '๐Ÿ†’', + DELIM + r'free' + DELIM: '๐Ÿ†“', + DELIM + r'information_source' + DELIM: 'โ„น๏ธ', + DELIM + r'id' + DELIM: '๐Ÿ†”', + DELIM + r'm' + DELIM: 'โ“‚๏ธ', + DELIM + r'new' + DELIM: '๐Ÿ†•', + DELIM + r'ng' + DELIM: '๐Ÿ†–', + DELIM + r'o2' + DELIM: '๐Ÿ…พ๏ธ', + DELIM + r'ok' + DELIM: '๐Ÿ†—', + DELIM + r'parking' + DELIM: '๐Ÿ…ฟ๏ธ', + DELIM + r'sos' + DELIM: '๐Ÿ†˜', + DELIM + r'up' + DELIM: '๐Ÿ†™', + DELIM + r'vs' + DELIM: '๐Ÿ†š', + DELIM + r'koko' + DELIM: '๐Ÿˆ', + DELIM + r'sa' + DELIM: '๐Ÿˆ‚๏ธ', + DELIM + r'u6708' + DELIM: '๐Ÿˆท๏ธ', + DELIM + r'u6709' + DELIM: '๐Ÿˆถ', + DELIM + r'u6307' + DELIM: '๐Ÿˆฏ', + DELIM + r'ideograph_advantage' + DELIM: '๐Ÿ‰', + DELIM + r'u5272' + DELIM: '๐Ÿˆน', + DELIM + r'u7121' + DELIM: '๐Ÿˆš', + DELIM + r'u7981' + DELIM: '๐Ÿˆฒ', + DELIM + r'accept' + DELIM: '๐Ÿ‰‘', + DELIM + r'u7533' + DELIM: '๐Ÿˆธ', + DELIM + r'u5408' + DELIM: '๐Ÿˆด', + DELIM + r'u7a7a' + DELIM: '๐Ÿˆณ', + DELIM + r'congratulations' + DELIM: 'ใŠ—๏ธ', + DELIM + r'secret' + DELIM: 'ใŠ™๏ธ', + DELIM + r'u55b6' + DELIM: '๐Ÿˆบ', + DELIM + r'u6e80' + DELIM: '๐Ÿˆต', + + # + # Geometric + # + DELIM + r'red_circle' + DELIM: '๐Ÿ”ด', + DELIM + r'orange_circle' + DELIM: '๐ŸŸ ', + DELIM + r'yellow_circle' + DELIM: '๐ŸŸก', + DELIM + r'green_circle' + DELIM: '๐ŸŸข', + DELIM + r'large_blue_circle' + DELIM: '๐Ÿ”ต', + DELIM + r'purple_circle' + DELIM: '๐ŸŸฃ', + DELIM + r'brown_circle' + DELIM: '๐ŸŸค', + DELIM + r'black_circle' + DELIM: 'โšซ', + DELIM + r'white_circle' + DELIM: 'โšช', + DELIM + r'red_square' + DELIM: '๐ŸŸฅ', + DELIM + r'orange_square' + DELIM: '๐ŸŸง', + DELIM + r'yellow_square' + DELIM: '๐ŸŸจ', + DELIM + r'green_square' + DELIM: '๐ŸŸฉ', + DELIM + r'blue_square' + DELIM: '๐ŸŸฆ', + DELIM + r'purple_square' + DELIM: '๐ŸŸช', + DELIM + r'brown_square' + DELIM: '๐ŸŸซ', + DELIM + r'black_large_square' + DELIM: 'โฌ›', + DELIM + r'white_large_square' + DELIM: 'โฌœ', + DELIM + r'black_medium_square' + DELIM: 'โ—ผ๏ธ', + DELIM + r'white_medium_square' + DELIM: 'โ—ป๏ธ', + DELIM + r'black_medium_small_square' + DELIM: 'โ—พ', + DELIM + r'white_medium_small_square' + DELIM: 'โ—ฝ', + DELIM + r'black_small_square' + DELIM: 'โ–ช๏ธ', + DELIM + r'white_small_square' + DELIM: 'โ–ซ๏ธ', + DELIM + r'large_orange_diamond' + DELIM: '๐Ÿ”ถ', + DELIM + r'large_blue_diamond' + DELIM: '๐Ÿ”ท', + DELIM + r'small_orange_diamond' + DELIM: '๐Ÿ”ธ', + DELIM + r'small_blue_diamond' + DELIM: '๐Ÿ”น', + DELIM + r'small_red_triangle' + DELIM: '๐Ÿ”บ', + DELIM + r'small_red_triangle_down' + DELIM: '๐Ÿ”ป', + DELIM + r'diamond_shape_with_a_dot_inside' + DELIM: '๐Ÿ’ ', + DELIM + r'radio_button' + DELIM: '๐Ÿ”˜', + DELIM + r'white_square_button' + DELIM: '๐Ÿ”ณ', + DELIM + r'black_square_button' + DELIM: '๐Ÿ”ฒ', + + # + # Flag + # + DELIM + r'checkered_flag' + DELIM: '๐Ÿ', + DELIM + r'triangular_flag_on_post' + DELIM: '๐Ÿšฉ', + DELIM + r'crossed_flags' + DELIM: '๐ŸŽŒ', + DELIM + r'black_flag' + DELIM: '๐Ÿด', + DELIM + r'white_flag' + DELIM: '๐Ÿณ๏ธ', + DELIM + r'rainbow_flag' + DELIM: '๐Ÿณ๏ธโ€๐ŸŒˆ', + DELIM + r'transgender_flag' + DELIM: '๐Ÿณ๏ธโ€โšง๏ธ', + DELIM + r'pirate_flag' + DELIM: '๐Ÿดโ€โ˜ ๏ธ', + + # + # Country Flag + # + DELIM + r'ascension_island' + DELIM: '๐Ÿ‡ฆ๐Ÿ‡จ', + DELIM + r'andorra' + DELIM: '๐Ÿ‡ฆ๐Ÿ‡ฉ', + DELIM + r'united_arab_emirates' + DELIM: '๐Ÿ‡ฆ๐Ÿ‡ช', + DELIM + r'afghanistan' + DELIM: '๐Ÿ‡ฆ๐Ÿ‡ซ', + DELIM + r'antigua_barbuda' + DELIM: '๐Ÿ‡ฆ๐Ÿ‡ฌ', + DELIM + r'anguilla' + DELIM: '๐Ÿ‡ฆ๐Ÿ‡ฎ', + DELIM + r'albania' + DELIM: '๐Ÿ‡ฆ๐Ÿ‡ฑ', + DELIM + r'armenia' + DELIM: '๐Ÿ‡ฆ๐Ÿ‡ฒ', + DELIM + r'angola' + DELIM: '๐Ÿ‡ฆ๐Ÿ‡ด', + DELIM + r'antarctica' + DELIM: '๐Ÿ‡ฆ๐Ÿ‡ถ', + DELIM + r'argentina' + DELIM: '๐Ÿ‡ฆ๐Ÿ‡ท', + DELIM + r'american_samoa' + DELIM: '๐Ÿ‡ฆ๐Ÿ‡ธ', + DELIM + r'austria' + DELIM: '๐Ÿ‡ฆ๐Ÿ‡น', + DELIM + r'australia' + DELIM: '๐Ÿ‡ฆ๐Ÿ‡บ', + DELIM + r'aruba' + DELIM: '๐Ÿ‡ฆ๐Ÿ‡ผ', + DELIM + r'aland_islands' + DELIM: '๐Ÿ‡ฆ๐Ÿ‡ฝ', + DELIM + r'azerbaijan' + DELIM: '๐Ÿ‡ฆ๐Ÿ‡ฟ', + DELIM + r'bosnia_herzegovina' + DELIM: '๐Ÿ‡ง๐Ÿ‡ฆ', + DELIM + r'barbados' + DELIM: '๐Ÿ‡ง๐Ÿ‡ง', + DELIM + r'bangladesh' + DELIM: '๐Ÿ‡ง๐Ÿ‡ฉ', + DELIM + r'belgium' + DELIM: '๐Ÿ‡ง๐Ÿ‡ช', + DELIM + r'burkina_faso' + DELIM: '๐Ÿ‡ง๐Ÿ‡ซ', + DELIM + r'bulgaria' + DELIM: '๐Ÿ‡ง๐Ÿ‡ฌ', + DELIM + r'bahrain' + DELIM: '๐Ÿ‡ง๐Ÿ‡ญ', + DELIM + r'burundi' + DELIM: '๐Ÿ‡ง๐Ÿ‡ฎ', + DELIM + r'benin' + DELIM: '๐Ÿ‡ง๐Ÿ‡ฏ', + DELIM + r'st_barthelemy' + DELIM: '๐Ÿ‡ง๐Ÿ‡ฑ', + DELIM + r'bermuda' + DELIM: '๐Ÿ‡ง๐Ÿ‡ฒ', + DELIM + r'brunei' + DELIM: '๐Ÿ‡ง๐Ÿ‡ณ', + DELIM + r'bolivia' + DELIM: '๐Ÿ‡ง๐Ÿ‡ด', + DELIM + r'caribbean_netherlands' + DELIM: '๐Ÿ‡ง๐Ÿ‡ถ', + DELIM + r'brazil' + DELIM: '๐Ÿ‡ง๐Ÿ‡ท', + DELIM + r'bahamas' + DELIM: '๐Ÿ‡ง๐Ÿ‡ธ', + DELIM + r'bhutan' + DELIM: '๐Ÿ‡ง๐Ÿ‡น', + DELIM + r'bouvet_island' + DELIM: '๐Ÿ‡ง๐Ÿ‡ป', + DELIM + r'botswana' + DELIM: '๐Ÿ‡ง๐Ÿ‡ผ', + DELIM + r'belarus' + DELIM: '๐Ÿ‡ง๐Ÿ‡พ', + DELIM + r'belize' + DELIM: '๐Ÿ‡ง๐Ÿ‡ฟ', + DELIM + r'canada' + DELIM: '๐Ÿ‡จ๐Ÿ‡ฆ', + DELIM + r'cocos_islands' + DELIM: '๐Ÿ‡จ๐Ÿ‡จ', + DELIM + r'congo_kinshasa' + DELIM: '๐Ÿ‡จ๐Ÿ‡ฉ', + DELIM + r'central_african_republic' + DELIM: '๐Ÿ‡จ๐Ÿ‡ซ', + DELIM + r'congo_brazzaville' + DELIM: '๐Ÿ‡จ๐Ÿ‡ฌ', + DELIM + r'switzerland' + DELIM: '๐Ÿ‡จ๐Ÿ‡ญ', + DELIM + r'cote_divoire' + DELIM: '๐Ÿ‡จ๐Ÿ‡ฎ', + DELIM + r'cook_islands' + DELIM: '๐Ÿ‡จ๐Ÿ‡ฐ', + DELIM + r'chile' + DELIM: '๐Ÿ‡จ๐Ÿ‡ฑ', + DELIM + r'cameroon' + DELIM: '๐Ÿ‡จ๐Ÿ‡ฒ', + DELIM + r'cn' + DELIM: '๐Ÿ‡จ๐Ÿ‡ณ', + DELIM + r'colombia' + DELIM: '๐Ÿ‡จ๐Ÿ‡ด', + DELIM + r'clipperton_island' + DELIM: '๐Ÿ‡จ๐Ÿ‡ต', + DELIM + r'costa_rica' + DELIM: '๐Ÿ‡จ๐Ÿ‡ท', + DELIM + r'cuba' + DELIM: '๐Ÿ‡จ๐Ÿ‡บ', + DELIM + r'cape_verde' + DELIM: '๐Ÿ‡จ๐Ÿ‡ป', + DELIM + r'curacao' + DELIM: '๐Ÿ‡จ๐Ÿ‡ผ', + DELIM + r'christmas_island' + DELIM: '๐Ÿ‡จ๐Ÿ‡ฝ', + DELIM + r'cyprus' + DELIM: '๐Ÿ‡จ๐Ÿ‡พ', + DELIM + r'czech_republic' + DELIM: '๐Ÿ‡จ๐Ÿ‡ฟ', + DELIM + r'de' + DELIM: '๐Ÿ‡ฉ๐Ÿ‡ช', + DELIM + r'diego_garcia' + DELIM: '๐Ÿ‡ฉ๐Ÿ‡ฌ', + DELIM + r'djibouti' + DELIM: '๐Ÿ‡ฉ๐Ÿ‡ฏ', + DELIM + r'denmark' + DELIM: '๐Ÿ‡ฉ๐Ÿ‡ฐ', + DELIM + r'dominica' + DELIM: '๐Ÿ‡ฉ๐Ÿ‡ฒ', + DELIM + r'dominican_republic' + DELIM: '๐Ÿ‡ฉ๐Ÿ‡ด', + DELIM + r'algeria' + DELIM: '๐Ÿ‡ฉ๐Ÿ‡ฟ', + DELIM + r'ceuta_melilla' + DELIM: '๐Ÿ‡ช๐Ÿ‡ฆ', + DELIM + r'ecuador' + DELIM: '๐Ÿ‡ช๐Ÿ‡จ', + DELIM + r'estonia' + DELIM: '๐Ÿ‡ช๐Ÿ‡ช', + DELIM + r'egypt' + DELIM: '๐Ÿ‡ช๐Ÿ‡ฌ', + DELIM + r'western_sahara' + DELIM: '๐Ÿ‡ช๐Ÿ‡ญ', + DELIM + r'eritrea' + DELIM: '๐Ÿ‡ช๐Ÿ‡ท', + DELIM + r'es' + DELIM: '๐Ÿ‡ช๐Ÿ‡ธ', + DELIM + r'ethiopia' + DELIM: '๐Ÿ‡ช๐Ÿ‡น', + DELIM + r'(eu|european_union)' + DELIM: '๐Ÿ‡ช๐Ÿ‡บ', + DELIM + r'finland' + DELIM: '๐Ÿ‡ซ๐Ÿ‡ฎ', + DELIM + r'fiji' + DELIM: '๐Ÿ‡ซ๐Ÿ‡ฏ', + DELIM + r'falkland_islands' + DELIM: '๐Ÿ‡ซ๐Ÿ‡ฐ', + DELIM + r'micronesia' + DELIM: '๐Ÿ‡ซ๐Ÿ‡ฒ', + DELIM + r'faroe_islands' + DELIM: '๐Ÿ‡ซ๐Ÿ‡ด', + DELIM + r'fr' + DELIM: '๐Ÿ‡ซ๐Ÿ‡ท', + DELIM + r'gabon' + DELIM: '๐Ÿ‡ฌ๐Ÿ‡ฆ', + DELIM + r'(uk|gb)' + DELIM: '๐Ÿ‡ฌ๐Ÿ‡ง', + DELIM + r'grenada' + DELIM: '๐Ÿ‡ฌ๐Ÿ‡ฉ', + DELIM + r'georgia' + DELIM: '๐Ÿ‡ฌ๐Ÿ‡ช', + DELIM + r'french_guiana' + DELIM: '๐Ÿ‡ฌ๐Ÿ‡ซ', + DELIM + r'guernsey' + DELIM: '๐Ÿ‡ฌ๐Ÿ‡ฌ', + DELIM + r'ghana' + DELIM: '๐Ÿ‡ฌ๐Ÿ‡ญ', + DELIM + r'gibraltar' + DELIM: '๐Ÿ‡ฌ๐Ÿ‡ฎ', + DELIM + r'greenland' + DELIM: '๐Ÿ‡ฌ๐Ÿ‡ฑ', + DELIM + r'gambia' + DELIM: '๐Ÿ‡ฌ๐Ÿ‡ฒ', + DELIM + r'guinea' + DELIM: '๐Ÿ‡ฌ๐Ÿ‡ณ', + DELIM + r'guadeloupe' + DELIM: '๐Ÿ‡ฌ๐Ÿ‡ต', + DELIM + r'equatorial_guinea' + DELIM: '๐Ÿ‡ฌ๐Ÿ‡ถ', + DELIM + r'greece' + DELIM: '๐Ÿ‡ฌ๐Ÿ‡ท', + DELIM + r'south_georgia_south_sandwich_islands' + DELIM: '๐Ÿ‡ฌ๐Ÿ‡ธ', + DELIM + r'guatemala' + DELIM: '๐Ÿ‡ฌ๐Ÿ‡น', + DELIM + r'guam' + DELIM: '๐Ÿ‡ฌ๐Ÿ‡บ', + DELIM + r'guinea_bissau' + DELIM: '๐Ÿ‡ฌ๐Ÿ‡ผ', + DELIM + r'guyana' + DELIM: '๐Ÿ‡ฌ๐Ÿ‡พ', + DELIM + r'hong_kong' + DELIM: '๐Ÿ‡ญ๐Ÿ‡ฐ', + DELIM + r'heard_mcdonald_islands' + DELIM: '๐Ÿ‡ญ๐Ÿ‡ฒ', + DELIM + r'honduras' + DELIM: '๐Ÿ‡ญ๐Ÿ‡ณ', + DELIM + r'croatia' + DELIM: '๐Ÿ‡ญ๐Ÿ‡ท', + DELIM + r'haiti' + DELIM: '๐Ÿ‡ญ๐Ÿ‡น', + DELIM + r'hungary' + DELIM: '๐Ÿ‡ญ๐Ÿ‡บ', + DELIM + r'canary_islands' + DELIM: '๐Ÿ‡ฎ๐Ÿ‡จ', + DELIM + r'indonesia' + DELIM: '๐Ÿ‡ฎ๐Ÿ‡ฉ', + DELIM + r'ireland' + DELIM: '๐Ÿ‡ฎ๐Ÿ‡ช', + DELIM + r'israel' + DELIM: '๐Ÿ‡ฎ๐Ÿ‡ฑ', + DELIM + r'isle_of_man' + DELIM: '๐Ÿ‡ฎ๐Ÿ‡ฒ', + DELIM + r'india' + DELIM: '๐Ÿ‡ฎ๐Ÿ‡ณ', + DELIM + r'british_indian_ocean_territory' + DELIM: '๐Ÿ‡ฎ๐Ÿ‡ด', + DELIM + r'iraq' + DELIM: '๐Ÿ‡ฎ๐Ÿ‡ถ', + DELIM + r'iran' + DELIM: '๐Ÿ‡ฎ๐Ÿ‡ท', + DELIM + r'iceland' + DELIM: '๐Ÿ‡ฎ๐Ÿ‡ธ', + DELIM + r'it' + DELIM: '๐Ÿ‡ฎ๐Ÿ‡น', + DELIM + r'jersey' + DELIM: '๐Ÿ‡ฏ๐Ÿ‡ช', + DELIM + r'jamaica' + DELIM: '๐Ÿ‡ฏ๐Ÿ‡ฒ', + DELIM + r'jordan' + DELIM: '๐Ÿ‡ฏ๐Ÿ‡ด', + DELIM + r'jp' + DELIM: '๐Ÿ‡ฏ๐Ÿ‡ต', + DELIM + r'kenya' + DELIM: '๐Ÿ‡ฐ๐Ÿ‡ช', + DELIM + r'kyrgyzstan' + DELIM: '๐Ÿ‡ฐ๐Ÿ‡ฌ', + DELIM + r'cambodia' + DELIM: '๐Ÿ‡ฐ๐Ÿ‡ญ', + DELIM + r'kiribati' + DELIM: '๐Ÿ‡ฐ๐Ÿ‡ฎ', + DELIM + r'comoros' + DELIM: '๐Ÿ‡ฐ๐Ÿ‡ฒ', + DELIM + r'st_kitts_nevis' + DELIM: '๐Ÿ‡ฐ๐Ÿ‡ณ', + DELIM + r'north_korea' + DELIM: '๐Ÿ‡ฐ๐Ÿ‡ต', + DELIM + r'kr' + DELIM: '๐Ÿ‡ฐ๐Ÿ‡ท', + DELIM + r'kuwait' + DELIM: '๐Ÿ‡ฐ๐Ÿ‡ผ', + DELIM + r'cayman_islands' + DELIM: '๐Ÿ‡ฐ๐Ÿ‡พ', + DELIM + r'kazakhstan' + DELIM: '๐Ÿ‡ฐ๐Ÿ‡ฟ', + DELIM + r'laos' + DELIM: '๐Ÿ‡ฑ๐Ÿ‡ฆ', + DELIM + r'lebanon' + DELIM: '๐Ÿ‡ฑ๐Ÿ‡ง', + DELIM + r'st_lucia' + DELIM: '๐Ÿ‡ฑ๐Ÿ‡จ', + DELIM + r'liechtenstein' + DELIM: '๐Ÿ‡ฑ๐Ÿ‡ฎ', + DELIM + r'sri_lanka' + DELIM: '๐Ÿ‡ฑ๐Ÿ‡ฐ', + DELIM + r'liberia' + DELIM: '๐Ÿ‡ฑ๐Ÿ‡ท', + DELIM + r'lesotho' + DELIM: '๐Ÿ‡ฑ๐Ÿ‡ธ', + DELIM + r'lithuania' + DELIM: '๐Ÿ‡ฑ๐Ÿ‡น', + DELIM + r'luxembourg' + DELIM: '๐Ÿ‡ฑ๐Ÿ‡บ', + DELIM + r'latvia' + DELIM: '๐Ÿ‡ฑ๐Ÿ‡ป', + DELIM + r'libya' + DELIM: '๐Ÿ‡ฑ๐Ÿ‡พ', + DELIM + r'morocco' + DELIM: '๐Ÿ‡ฒ๐Ÿ‡ฆ', + DELIM + r'monaco' + DELIM: '๐Ÿ‡ฒ๐Ÿ‡จ', + DELIM + r'moldova' + DELIM: '๐Ÿ‡ฒ๐Ÿ‡ฉ', + DELIM + r'montenegro' + DELIM: '๐Ÿ‡ฒ๐Ÿ‡ช', + DELIM + r'st_martin' + DELIM: '๐Ÿ‡ฒ๐Ÿ‡ซ', + DELIM + r'madagascar' + DELIM: '๐Ÿ‡ฒ๐Ÿ‡ฌ', + DELIM + r'marshall_islands' + DELIM: '๐Ÿ‡ฒ๐Ÿ‡ญ', + DELIM + r'macedonia' + DELIM: '๐Ÿ‡ฒ๐Ÿ‡ฐ', + DELIM + r'mali' + DELIM: '๐Ÿ‡ฒ๐Ÿ‡ฑ', + DELIM + r'myanmar' + DELIM: '๐Ÿ‡ฒ๐Ÿ‡ฒ', + DELIM + r'mongolia' + DELIM: '๐Ÿ‡ฒ๐Ÿ‡ณ', + DELIM + r'macau' + DELIM: '๐Ÿ‡ฒ๐Ÿ‡ด', + DELIM + r'northern_mariana_islands' + DELIM: '๐Ÿ‡ฒ๐Ÿ‡ต', + DELIM + r'martinique' + DELIM: '๐Ÿ‡ฒ๐Ÿ‡ถ', + DELIM + r'mauritania' + DELIM: '๐Ÿ‡ฒ๐Ÿ‡ท', + DELIM + r'montserrat' + DELIM: '๐Ÿ‡ฒ๐Ÿ‡ธ', + DELIM + r'malta' + DELIM: '๐Ÿ‡ฒ๐Ÿ‡น', + DELIM + r'mauritius' + DELIM: '๐Ÿ‡ฒ๐Ÿ‡บ', + DELIM + r'maldives' + DELIM: '๐Ÿ‡ฒ๐Ÿ‡ป', + DELIM + r'malawi' + DELIM: '๐Ÿ‡ฒ๐Ÿ‡ผ', + DELIM + r'mexico' + DELIM: '๐Ÿ‡ฒ๐Ÿ‡ฝ', + DELIM + r'malaysia' + DELIM: '๐Ÿ‡ฒ๐Ÿ‡พ', + DELIM + r'mozambique' + DELIM: '๐Ÿ‡ฒ๐Ÿ‡ฟ', + DELIM + r'namibia' + DELIM: '๐Ÿ‡ณ๐Ÿ‡ฆ', + DELIM + r'new_caledonia' + DELIM: '๐Ÿ‡ณ๐Ÿ‡จ', + DELIM + r'niger' + DELIM: '๐Ÿ‡ณ๐Ÿ‡ช', + DELIM + r'norfolk_island' + DELIM: '๐Ÿ‡ณ๐Ÿ‡ซ', + DELIM + r'nigeria' + DELIM: '๐Ÿ‡ณ๐Ÿ‡ฌ', + DELIM + r'nicaragua' + DELIM: '๐Ÿ‡ณ๐Ÿ‡ฎ', + DELIM + r'netherlands' + DELIM: '๐Ÿ‡ณ๐Ÿ‡ฑ', + DELIM + r'norway' + DELIM: '๐Ÿ‡ณ๐Ÿ‡ด', + DELIM + r'nepal' + DELIM: '๐Ÿ‡ณ๐Ÿ‡ต', + DELIM + r'nauru' + DELIM: '๐Ÿ‡ณ๐Ÿ‡ท', + DELIM + r'niue' + DELIM: '๐Ÿ‡ณ๐Ÿ‡บ', + DELIM + r'new_zealand' + DELIM: '๐Ÿ‡ณ๐Ÿ‡ฟ', + DELIM + r'oman' + DELIM: '๐Ÿ‡ด๐Ÿ‡ฒ', + DELIM + r'panama' + DELIM: '๐Ÿ‡ต๐Ÿ‡ฆ', + DELIM + r'peru' + DELIM: '๐Ÿ‡ต๐Ÿ‡ช', + DELIM + r'french_polynesia' + DELIM: '๐Ÿ‡ต๐Ÿ‡ซ', + DELIM + r'papua_new_guinea' + DELIM: '๐Ÿ‡ต๐Ÿ‡ฌ', + DELIM + r'philippines' + DELIM: '๐Ÿ‡ต๐Ÿ‡ญ', + DELIM + r'pakistan' + DELIM: '๐Ÿ‡ต๐Ÿ‡ฐ', + DELIM + r'poland' + DELIM: '๐Ÿ‡ต๐Ÿ‡ฑ', + DELIM + r'st_pierre_miquelon' + DELIM: '๐Ÿ‡ต๐Ÿ‡ฒ', + DELIM + r'pitcairn_islands' + DELIM: '๐Ÿ‡ต๐Ÿ‡ณ', + DELIM + r'puerto_rico' + DELIM: '๐Ÿ‡ต๐Ÿ‡ท', + DELIM + r'palestinian_territories' + DELIM: '๐Ÿ‡ต๐Ÿ‡ธ', + DELIM + r'portugal' + DELIM: '๐Ÿ‡ต๐Ÿ‡น', + DELIM + r'palau' + DELIM: '๐Ÿ‡ต๐Ÿ‡ผ', + DELIM + r'paraguay' + DELIM: '๐Ÿ‡ต๐Ÿ‡พ', + DELIM + r'qatar' + DELIM: '๐Ÿ‡ถ๐Ÿ‡ฆ', + DELIM + r'reunion' + DELIM: '๐Ÿ‡ท๐Ÿ‡ช', + DELIM + r'romania' + DELIM: '๐Ÿ‡ท๐Ÿ‡ด', + DELIM + r'serbia' + DELIM: '๐Ÿ‡ท๐Ÿ‡ธ', + DELIM + r'ru' + DELIM: '๐Ÿ‡ท๐Ÿ‡บ', + DELIM + r'rwanda' + DELIM: '๐Ÿ‡ท๐Ÿ‡ผ', + DELIM + r'saudi_arabia' + DELIM: '๐Ÿ‡ธ๐Ÿ‡ฆ', + DELIM + r'solomon_islands' + DELIM: '๐Ÿ‡ธ๐Ÿ‡ง', + DELIM + r'seychelles' + DELIM: '๐Ÿ‡ธ๐Ÿ‡จ', + DELIM + r'sudan' + DELIM: '๐Ÿ‡ธ๐Ÿ‡ฉ', + DELIM + r'sweden' + DELIM: '๐Ÿ‡ธ๐Ÿ‡ช', + DELIM + r'singapore' + DELIM: '๐Ÿ‡ธ๐Ÿ‡ฌ', + DELIM + r'st_helena' + DELIM: '๐Ÿ‡ธ๐Ÿ‡ญ', + DELIM + r'slovenia' + DELIM: '๐Ÿ‡ธ๐Ÿ‡ฎ', + DELIM + r'svalbard_jan_mayen' + DELIM: '๐Ÿ‡ธ๐Ÿ‡ฏ', + DELIM + r'slovakia' + DELIM: '๐Ÿ‡ธ๐Ÿ‡ฐ', + DELIM + r'sierra_leone' + DELIM: '๐Ÿ‡ธ๐Ÿ‡ฑ', + DELIM + r'san_marino' + DELIM: '๐Ÿ‡ธ๐Ÿ‡ฒ', + DELIM + r'senegal' + DELIM: '๐Ÿ‡ธ๐Ÿ‡ณ', + DELIM + r'somalia' + DELIM: '๐Ÿ‡ธ๐Ÿ‡ด', + DELIM + r'suriname' + DELIM: '๐Ÿ‡ธ๐Ÿ‡ท', + DELIM + r'south_sudan' + DELIM: '๐Ÿ‡ธ๐Ÿ‡ธ', + DELIM + r'sao_tome_principe' + DELIM: '๐Ÿ‡ธ๐Ÿ‡น', + DELIM + r'el_salvador' + DELIM: '๐Ÿ‡ธ๐Ÿ‡ป', + DELIM + r'sint_maarten' + DELIM: '๐Ÿ‡ธ๐Ÿ‡ฝ', + DELIM + r'syria' + DELIM: '๐Ÿ‡ธ๐Ÿ‡พ', + DELIM + r'swaziland' + DELIM: '๐Ÿ‡ธ๐Ÿ‡ฟ', + DELIM + r'tristan_da_cunha' + DELIM: '๐Ÿ‡น๐Ÿ‡ฆ', + DELIM + r'turks_caicos_islands' + DELIM: '๐Ÿ‡น๐Ÿ‡จ', + DELIM + r'chad' + DELIM: '๐Ÿ‡น๐Ÿ‡ฉ', + DELIM + r'french_southern_territories' + DELIM: '๐Ÿ‡น๐Ÿ‡ซ', + DELIM + r'togo' + DELIM: '๐Ÿ‡น๐Ÿ‡ฌ', + DELIM + r'thailand' + DELIM: '๐Ÿ‡น๐Ÿ‡ญ', + DELIM + r'tajikistan' + DELIM: '๐Ÿ‡น๐Ÿ‡ฏ', + DELIM + r'tokelau' + DELIM: '๐Ÿ‡น๐Ÿ‡ฐ', + DELIM + r'timor_leste' + DELIM: '๐Ÿ‡น๐Ÿ‡ฑ', + DELIM + r'turkmenistan' + DELIM: '๐Ÿ‡น๐Ÿ‡ฒ', + DELIM + r'tunisia' + DELIM: '๐Ÿ‡น๐Ÿ‡ณ', + DELIM + r'tonga' + DELIM: '๐Ÿ‡น๐Ÿ‡ด', + DELIM + r'tr' + DELIM: '๐Ÿ‡น๐Ÿ‡ท', + DELIM + r'trinidad_tobago' + DELIM: '๐Ÿ‡น๐Ÿ‡น', + DELIM + r'tuvalu' + DELIM: '๐Ÿ‡น๐Ÿ‡ป', + DELIM + r'taiwan' + DELIM: '๐Ÿ‡น๐Ÿ‡ผ', + DELIM + r'tanzania' + DELIM: '๐Ÿ‡น๐Ÿ‡ฟ', + DELIM + r'ukraine' + DELIM: '๐Ÿ‡บ๐Ÿ‡ฆ', + DELIM + r'uganda' + DELIM: '๐Ÿ‡บ๐Ÿ‡ฌ', + DELIM + r'us_outlying_islands' + DELIM: '๐Ÿ‡บ๐Ÿ‡ฒ', + DELIM + r'united_nations' + DELIM: '๐Ÿ‡บ๐Ÿ‡ณ', + DELIM + r'us' + DELIM: '๐Ÿ‡บ๐Ÿ‡ธ', + DELIM + r'uruguay' + DELIM: '๐Ÿ‡บ๐Ÿ‡พ', + DELIM + r'uzbekistan' + DELIM: '๐Ÿ‡บ๐Ÿ‡ฟ', + DELIM + r'vatican_city' + DELIM: '๐Ÿ‡ป๐Ÿ‡ฆ', + DELIM + r'st_vincent_grenadines' + DELIM: '๐Ÿ‡ป๐Ÿ‡จ', + DELIM + r'venezuela' + DELIM: '๐Ÿ‡ป๐Ÿ‡ช', + DELIM + r'british_virgin_islands' + DELIM: '๐Ÿ‡ป๐Ÿ‡ฌ', + DELIM + r'us_virgin_islands' + DELIM: '๐Ÿ‡ป๐Ÿ‡ฎ', + DELIM + r'vietnam' + DELIM: '๐Ÿ‡ป๐Ÿ‡ณ', + DELIM + r'vanuatu' + DELIM: '๐Ÿ‡ป๐Ÿ‡บ', + DELIM + r'wallis_futuna' + DELIM: '๐Ÿ‡ผ๐Ÿ‡ซ', + DELIM + r'samoa' + DELIM: '๐Ÿ‡ผ๐Ÿ‡ธ', + DELIM + r'kosovo' + DELIM: '๐Ÿ‡ฝ๐Ÿ‡ฐ', + DELIM + r'yemen' + DELIM: '๐Ÿ‡พ๐Ÿ‡ช', + DELIM + r'mayotte' + DELIM: '๐Ÿ‡พ๐Ÿ‡น', + DELIM + r'south_africa' + DELIM: '๐Ÿ‡ฟ๐Ÿ‡ฆ', + DELIM + r'zambia' + DELIM: '๐Ÿ‡ฟ๐Ÿ‡ฒ', + DELIM + r'zimbabwe' + DELIM: '๐Ÿ‡ฟ๐Ÿ‡ผ', + + # + # Subdivision Flag + # + DELIM + r'england' + DELIM: '๐Ÿด๓ ง๓ ข๓ ฅ๓ ฎ๓ ง๓ ฟ', + DELIM + r'scotland' + DELIM: '๐Ÿด๓ ง๓ ข๓ ณ๓ ฃ๓ ด๓ ฟ', + DELIM + r'wales' + DELIM: '๐Ÿด๓ ง๓ ข๓ ท๓ ฌ๓ ณ๓ ฟ', +} + +# Our compiled mapping +EMOJI_COMPILED_MAP = re.compile( + r'(' + '|'.join(EMOJI_MAP.keys()) + r')', + re.IGNORECASE) + + +def apply_emojis(content): + """ + Takes the content and swaps any matched emoji's found with their + utf-8 encoded mapping + """ + + try: + return EMOJI_COMPILED_MAP.sub(lambda x: EMOJI_MAP[x.group()], content) + + except TypeError: + # No change; but force string return + return '' diff --git a/apprise/plugins/NotifyBase.py b/apprise/plugins/NotifyBase.py index 5138c15c..2ba45a79 100644 --- a/apprise/plugins/NotifyBase.py +++ b/apprise/plugins/NotifyBase.py @@ -32,6 +32,7 @@ from functools import partial from ..URLBase import URLBase from ..common import NotifyType +from ..utils import parse_bool from ..common import NOTIFY_TYPES from ..common import NotifyFormat from ..common import NOTIFY_FORMATS @@ -135,6 +136,9 @@ class NotifyBase(URLBase): # Default Overflow Mode overflow_mode = OverflowMode.UPSTREAM + # Default Emoji Interpretation + interpret_emojis = False + # Support Attachments; this defaults to being disabled. # Since apprise allows you to send attachments without a body or title # defined, by letting Apprise know the plugin won't support attachments @@ -183,6 +187,16 @@ class NotifyBase(URLBase): # runtime. '_lookup_default': 'notify_format', }, + 'emojis': { + 'name': _('Interpret Emojis'), + # SSL Certificate Authority Verification + 'type': 'bool', + # Provide a default + 'default': interpret_emojis, + # look up default using the following parent class value at + # runtime. + '_lookup_default': 'interpret_emojis', + }, }) def __init__(self, **kwargs): @@ -194,6 +208,29 @@ class NotifyBase(URLBase): super().__init__(**kwargs) + # Store our interpret_emoji's setting + # If asset emoji value is set to a default of True and the user + # specifies it to be false, this is accepted and False over-rides. + # + # If asset emoji value is set to a default of None, a user may + # optionally over-ride this and set it to True from the Apprise + # URL. ?emojis=yes + # + # If asset emoji value is set to a default of False, then all emoji's + # are turned off (no user over-rides allowed) + # + + # Take a default + self.interpret_emojis = self.asset.interpret_emojis + if 'emojis' in kwargs: + # possibly over-ride default + self.interpret_emojis = True if self.interpret_emojis \ + in (None, True) and \ + parse_bool( + kwargs.get('emojis', False), + default=NotifyBase.template_args['emojis']['default']) \ + else False + if 'format' in kwargs: # Store the specified format if specified notify_format = kwargs.get('format', '') @@ -548,6 +585,10 @@ class NotifyBase(URLBase): results['overflow'])) del results['overflow'] + # Allow emoji's override + if 'emojis' in results['qsd']: + results['emojis'] = parse_bool(results['qsd'].get('emojis')) + return results @staticmethod diff --git a/packaging/man/apprise.md b/packaging/man/apprise.md index e59efb0a..29889d59 100644 --- a/packaging/man/apprise.md +++ b/packaging/man/apprise.md @@ -70,6 +70,11 @@ The Apprise options are as follows: Enable interpretation of backslash escapes. For example, this would convert sequences such as \n and \r to their respected ascii new-line and carriage + `-j`, `--interpret-emojis` + Enable interpretation of emoji strings. For example, this would convert + sequences such as :smile: or :grin: to their respected unicode emoji + character. + `-d`, `--dry-run`: Perform a trial run but only prints the notification services to-be triggered to **stdout**. Notifications are never sent using this mode. diff --git a/test/test_api.py b/test/test_api.py index 6e150fe8..96a06782 100644 --- a/test/test_api.py +++ b/test/test_api.py @@ -1520,7 +1520,7 @@ def test_apprise_details_plugin_verification(): # General Parameters 'user', 'password', 'port', 'host', 'schema', 'fullpath', # NotifyBase parameters: - 'format', 'overflow', + 'format', 'overflow', 'emojis', # URLBase parameters: 'verify', 'cto', 'rto', ]) diff --git a/test/test_apprise_cli.py b/test/test_apprise_cli.py index 0eedc9e7..18853485 100644 --- a/test/test_apprise_cli.py +++ b/test/test_apprise_cli.py @@ -599,6 +599,23 @@ def test_apprise_cli_nux_env(tmpdir): ]) assert result.exit_code == 0 + # Test Emojis: + result = runner.invoke(cli.main, [ + '-j', + '-t', ':smile:', + '-b', ':grin:', + 'good://localhost', + ]) + assert result.exit_code == 0 + + result = runner.invoke(cli.main, [ + '--interpret-emojis', + '-t', ':smile:', + '-b', ':grin:', + 'good://localhost', + ]) + assert result.exit_code == 0 + def test_apprise_cli_details(tmpdir): """ diff --git a/test/test_apprise_emojis.py b/test/test_apprise_emojis.py new file mode 100644 index 00000000..d0742816 --- /dev/null +++ b/test/test_apprise_emojis.py @@ -0,0 +1,56 @@ +# -*- coding: utf-8 -*- +# BSD 2-Clause License +# +# Apprise - Push Notification Library. +# Copyright (c) 2023, Chris Caron +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# 1. Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# +# 2. Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. + +from apprise import emojis +import sys + +# Disable logging for a cleaner testing output +import logging +logging.disable(logging.CRITICAL) + +# Ensure we don't create .pyc files for these tests +sys.dont_write_bytecode = True + + +def test_emojis(): + "emojis: apply_emojis() testing """ + + assert emojis.apply_emojis('') == '' + assert emojis.apply_emojis('no change') == 'no change' + assert emojis.apply_emojis(':smile:') == '๐Ÿ˜„' + assert emojis.apply_emojis(':smile::smile:') == '๐Ÿ˜„๐Ÿ˜„' + + # Missing Delimiters + assert emojis.apply_emojis(':smile') == ':smile' + assert emojis.apply_emojis('smile:') == 'smile:' + + # Bad data + assert emojis.apply_emojis(None) == '' + assert emojis.apply_emojis(object) == '' + assert emojis.apply_emojis(True) == '' + assert emojis.apply_emojis(4.0) == '' diff --git a/test/test_rest_plugins.py b/test/test_rest_plugins.py index da36ba56..b7badc1c 100644 --- a/test/test_rest_plugins.py +++ b/test/test_rest_plugins.py @@ -27,6 +27,9 @@ # POSSIBILITY OF SUCH DAMAGE. import pytest +import json +from unittest import mock +import requests from random import choice from string import ascii_uppercase as str_alpha from string import digits as str_num @@ -34,6 +37,8 @@ from string import digits as str_num from apprise import NotifyBase from apprise.common import NotifyFormat from apprise.common import OverflowMode +from apprise.AppriseAsset import AppriseAsset +from apprise.Apprise import Apprise # Disable logging for a cleaner testing output import logging @@ -382,9 +387,9 @@ def test_notify_overflow_split(): offset += len(_body) -def test_notify_overflow_general(): +def test_notify_markdown_general(): """ - API: Overflow General Testing + API: Markdown General Testing """ @@ -431,3 +436,233 @@ def test_notify_overflow_general(): # Our title get's stripped off since it's not of valid markdown assert body == chunks[0].get('body') assert chunks[0].get('title') == "" + + +@mock.patch('requests.post') +def test_notify_emoji_general(mock_post): + """ + API: Emoji General Testing + + """ + + # Prepare our response + response = requests.Request() + response.status_code = requests.codes.ok + + # Prepare Mock + mock_post.return_value = response + + # Set up our emojis + title = ":smile:" + body = ":grin:" + + # general reference used below (using default values) + asset = AppriseAsset() + + # + # Test default emoji asset value + # + + # Load our object + ap_obj = Apprise(asset=asset) + ap_obj.add('json://localhost') + assert len(ap_obj) == 1 + + assert ap_obj.notify(title=title, body=body) is True + assert mock_post.call_count == 1 + + details = mock_post.call_args_list[0] + dataset = json.loads(details[1]['data']) + + # No changes + assert dataset['title'] == title + assert dataset['message'] == body + + mock_post.reset_mock() + + # + # Test URL over-ride while default value set in asset + # + + # Load our object + ap_obj = Apprise(asset=asset) + ap_obj.add('json://localhost?emojis=no') + assert len(ap_obj) == 1 + + assert ap_obj.notify(title=title, body=body) is True + assert mock_post.call_count == 1 + + details = mock_post.call_args_list[0] + dataset = json.loads(details[1]['data']) + + # No changes + assert dataset['title'] == title + assert dataset['message'] == body + + mock_post.reset_mock() + + # + # Test URL over-ride while default value set in asset pt 2 + # + + # Load our object + ap_obj = Apprise(asset=asset) + ap_obj.add('json://localhost?emojis=yes') + assert len(ap_obj) == 1 + + assert ap_obj.notify(title=title, body=body) is True + assert mock_post.call_count == 1 + + details = mock_post.call_args_list[0] + dataset = json.loads(details[1]['data']) + + # Emoji's are displayed + assert dataset['title'] == '๐Ÿ˜„' + assert dataset['message'] == '๐Ÿ˜ƒ' + + mock_post.reset_mock() + + # + # Test URL over-ride while default value set in asset pt 2 + # + + # Load our object + ap_obj = Apprise(asset=asset) + ap_obj.add('json://localhost?emojis=no') + assert len(ap_obj) == 1 + + assert ap_obj.notify(title=title, body=body) is True + assert mock_post.call_count == 1 + + details = mock_post.call_args_list[0] + dataset = json.loads(details[1]['data']) + + # No changes + assert dataset['title'] == title + assert dataset['message'] == body + + mock_post.reset_mock() + + # + # Test Default Emoji settings + # + + # Set our interpret emoji's flag + asset = AppriseAsset(interpret_emojis=True) + + # Re-create our object + ap_obj = Apprise(asset=asset) + + # Load our object + ap_obj.add('json://localhost') + assert len(ap_obj) == 1 + + assert ap_obj.notify(title=title, body=body) is True + assert mock_post.call_count == 1 + + details = mock_post.call_args_list[0] + dataset = json.loads(details[1]['data']) + + # emoji's are displayed + assert dataset['title'] == '๐Ÿ˜„' + assert dataset['message'] == '๐Ÿ˜ƒ' + + mock_post.reset_mock() + + # + # With Emoji's turned on by default, the user can optionally turn them + # off. + # + + # Re-create our object + ap_obj = Apprise(asset=asset) + + ap_obj.add('json://localhost?emojis=no') + assert len(ap_obj) == 1 + + assert ap_obj.notify(title=title, body=body) is True + assert mock_post.call_count == 1 + + details = mock_post.call_args_list[0] + dataset = json.loads(details[1]['data']) + + # No changes + assert dataset['title'] == title + assert dataset['message'] == body + + mock_post.reset_mock() + + # + # With Emoji's turned on by default, there is no change when emojis + # flag is set to on + # + + # Re-create our object + ap_obj = Apprise(asset=asset) + + ap_obj.add('json://localhost?emojis=yes') + assert len(ap_obj) == 1 + + assert ap_obj.notify(title=title, body=body) is True + assert mock_post.call_count == 1 + + details = mock_post.call_args_list[0] + dataset = json.loads(details[1]['data']) + + # emoji's are displayed + assert dataset['title'] == '๐Ÿ˜„' + assert dataset['message'] == '๐Ÿ˜ƒ' + + mock_post.reset_mock() + + # + # Enforce the disabling of emojis + # + + # Set our interpret emoji's flag + asset = AppriseAsset(interpret_emojis=False) + + # Re-create our object + ap_obj = Apprise(asset=asset) + + # Load our object + ap_obj.add('json://localhost') + assert len(ap_obj) == 1 + + assert ap_obj.notify(title=title, body=body) is True + assert mock_post.call_count == 1 + + details = mock_post.call_args_list[0] + dataset = json.loads(details[1]['data']) + + # Disabled - no emojis + assert dataset['title'] == title + assert dataset['message'] == body + + mock_post.reset_mock() + + # + # Enforce the disabling of emojis + # + + # Set our interpret emoji's flag + asset = AppriseAsset(interpret_emojis=False) + + # Re-create our object + ap_obj = Apprise(asset=asset) + + # Load our object + ap_obj.add('json://localhost?emojis=yes') + assert len(ap_obj) == 1 + + assert ap_obj.notify(title=title, body=body) is True + assert mock_post.call_count == 1 + + details = mock_post.call_args_list[0] + dataset = json.loads(details[1]['data']) + + # Disabled - no emojis + assert dataset['title'] == title + assert dataset['message'] == body + + mock_post.reset_mock()