my-emacs-d/elpa/company-emoji-20160331.1641/company-emoji.el

1320 lines
56 KiB
EmacsLisp
Raw Normal View History

2016-10-22 14:26:20 +00:00
;;; company-emoji.el --- company-mode backend for emoji
;; Copyright (C) 2015 Alex Dunn
;; Author: Alex Dunn <dunn.alex@gmail.com>
;; URL: https://github.com/dunn/company-emoji.git
;; Package-Version: 20160331.1641
;; Version: 2.3.0
;; Package-Requires: ((cl-lib "0.5") (company "0.8.0"))
;; Keywords: emoji company honk
;; Prefix: company-emoji
;; This program is free software; you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation, either version 3 of the License, or
;; (at your option) any later version.
;; This program is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
;; along with this program. If not, see <http://www.gnu.org/licenses/>.
;;; Commentary:
;; company-mode backend providing autocompletion for emoji. 🆒💦
;; ### setup
;; Add `company-emoji.el` to your load-path, then add something like the
;; following to your init file:
;; (require 'company-emoji)
;; (add-to-list 'company-backends 'company-emoji)
;; After selecting an emoji-word from the completion-list, it will be
;; replaced by the real unicode emoji (`:cactus:` becomes 🌵, `:cat:`
;; becomes 🐱, etc.)
;; ### emoji font support
;; If youre on Linux, or on Mac OS X and using the Cocoa version of
;; Emacs (i.e., if built `-with-ns`, or `--with-cocoa` using Homebrew),
;; youll need to add something like this to your init file (thanks to
;; [@syohex](https://github.com/syohex) and
;; [@waymondo](https://github.com/waymondo)):
;; ```elisp
;; (defun --set-emoji-font (frame)
;; "Adjust the font settings of FRAME so Emacs can display emoji properly."
;; (if (eq system-type 'darwin)
;; ;; For NS/Cocoa
;; (set-fontset-font t 'symbol (font-spec :family "Apple Color Emoji") frame 'prepend)
;; ;; For Linux
;; (set-fontset-font t 'symbol (font-spec :family "Symbola") frame 'prepend)))
;; ;; For when Emacs is started in GUI mode:
;; (--set-emoji-font nil)
;; ;; Hook for when a frame is created with emacsclient
;; ;; see https://www.gnu.org/software/emacs/manual/html_node/elisp/Creating-Frames.html
;; (add-hook 'after-make-frame-functions '--set-emoji-font)
;; ```
;; [Symbola](https://zhm.github.io/symbola/) can be installed with `apt-get`:
;; ```sh
;; apt-get install ttf-ancient-fonts
;; ```
;; **NB:** The `set-fontset-font` function is apparently only available
;; when Emacs has been compiled with a window system.
;; ### custom variables
;; #### aliases
;; You can add shortcode aliases by modifying `company-emoji-aliases`.
;; Run `M-x customize-variable [RET] company-emoji-aliases` to bring up
;; company-emojis customization pane, then add or remove aliases to your
;; taste:
;; Hide Company Emoji Aliases:
;; [INS] [DEL] Symbol: :man-woman-boy:
;; String: :family:
;; [INS] [DEL] Symbol: :woman-kiss-man:
;; String: :couplekiss:
;; [INS] [DEL] Symbol: :woman_man_holding_hands:
;; String: :couple:
;; [INS] [DEL] Symbol: :woman-heart-man:
;; String: :couple_with_heart:
;; [INS] [DEL] Symbol: :oop:
;; String: :speak_no_evil:
;; [INS]
;; (“Symbol” designates the user-defined alias, and “string” designates
;; the original shortcode you want your alias to mimick.)
;; Occasionally new default aliases may be added (like `:middle-finger:`
;; for 🖕). If youre upgrading and have modified the
;; `company-emoji-aliases` variable, the new aliases will be ignored;
;; youll need to add them manually.
;; #### unicode replacement
;; By default, `:cat:` is replaced with 🐱 upon completion, but that can
;; be turned off by setting the variable `company-emoji-insert-unicode`
;; to `nil`.
;;; Code:
;; requires
(require 'cl-lib)
(require 'company)
;; version string
(defconst company-emoji-version "2.3.0")
;; customize
(defgroup company-emoji nil
"Company-mode backend for autocompleting emoji"
:group 'company)
(defcustom company-emoji-aliases '( (:man-woman-boy: . ":family:")
(:woman-kiss-man: . ":couplekiss:")
(:woman_man_holding_hands: . ":couple:")
(:woman-heart-man: . ":couple_with_heart:")
(:middle-finger: . ":reversed-hand-with-middle-finger-extended:")
)
"Alternate shortcodes for emoji."
:group 'company-emoji
:type '(alist :key-type symbol :value-type string))
(defcustom company-emoji-insert-unicode t
"Replace the :shortcode: with the real Unicode character upon completion."
:group 'company-emoji
:type 'boolean)
;; the actual code things
(defun company-emoji--create-list ()
"Return the propertized list of emoji."
;; See
;; https://www.gnu.org/software/emacs/manual/html_node/elisp/Text-Props-and-Strings.html
;; for the syntax.
(list
#(":grinning:" 0 1 (:unicode "😀"))
#(":grin:" 0 1 (:unicode "😁"))
#(":joy:" 0 1 (:unicode "😂"))
#(":smiley:" 0 1 (:unicode "😃"))
#(":smile:" 0 1 (:unicode "😄"))
#(":sweat_smile:" 0 1 (:unicode "😅"))
#(":satisfied:" 0 1 (:unicode "😆"))
#(":innocent:" 0 1 (:unicode "😇"))
#(":smiling_imp:" 0 1 (:unicode "😈"))
#(":imp:" 0 1 (:unicode "👿"))
#(":wink:" 0 1 (:unicode "😉"))
#(":blush:" 0 1 (:unicode "😊"))
#(":yum:" 0 1 (:unicode "😋"))
#(":relieved:" 0 1 (:unicode "😌"))
#(":heart_eyes:" 0 1 (:unicode "😍"))
#(":sunglasses:" 0 1 (:unicode "😎"))
#(":smirk:" 0 1 (:unicode "😏"))
#(":neutral_face:" 0 1 (:unicode "😐"))
#(":expressionless:" 0 1 (:unicode "😑"))
#(":unamused:" 0 1 (:unicode "😒"))
#(":sweat:" 0 1 (:unicode "😓"))
#(":pensive:" 0 1 (:unicode "😔"))
#(":confused:" 0 1 (:unicode "😕"))
#(":confounded:" 0 1 (:unicode "😖"))
#(":kissing:" 0 1 (:unicode "😗"))
#(":kissing_heart:" 0 1 (:unicode "😘"))
#(":kissing_smiling_eyes:" 0 1 (:unicode "😙"))
#(":kissing_closed_eyes:" 0 1 (:unicode "😚"))
#(":stuck_out_tongue:" 0 1 (:unicode "😛"))
#(":stuck_out_tongue_winking_eye:" 0 1 (:unicode "😜"))
#(":stuck_out_tongue_closed_eyes:" 0 1 (:unicode "😝"))
#(":disappointed:" 0 1 (:unicode "😞"))
#(":worried:" 0 1 (:unicode "😟"))
#(":angry:" 0 1 (:unicode "😠"))
#(":rage:" 0 1 (:unicode "😡"))
#(":cry:" 0 1 (:unicode "😢"))
#(":persevere:" 0 1 (:unicode "😣"))
#(":triumph:" 0 1 (:unicode "😤"))
#(":disappointed_relieved:" 0 1 (:unicode "😥"))
#(":frowning:" 0 1 (:unicode "😦"))
#(":anguished:" 0 1 (:unicode "😧"))
#(":fearful:" 0 1 (:unicode "😨"))
#(":weary:" 0 1 (:unicode "😩"))
#(":sleepy:" 0 1 (:unicode "😪"))
#(":tired_face:" 0 1 (:unicode "😫"))
#(":grimacing:" 0 1 (:unicode "😬"))
#(":sob:" 0 1 (:unicode "😭"))
#(":open_mouth:" 0 1 (:unicode "😮"))
#(":hushed:" 0 1 (:unicode "😯"))
#(":cold_sweat:" 0 1 (:unicode "😰"))
#(":scream:" 0 1 (:unicode "😱"))
#(":astonished:" 0 1 (:unicode "😲"))
#(":flushed:" 0 1 (:unicode "😳"))
#(":sleeping:" 0 1 (:unicode "😴"))
#(":dizzy_face:" 0 1 (:unicode "😵"))
#(":no_mouth:" 0 1 (:unicode "😶"))
#(":mask:" 0 1 (:unicode "😷"))
#(":smile_cat:" 0 1 (:unicode "😸"))
#(":joy_cat:" 0 1 (:unicode "😹"))
#(":smiley_cat:" 0 1 (:unicode "😺"))
#(":heart_eyes_cat:" 0 1 (:unicode "😻"))
#(":smirk_cat:" 0 1 (:unicode "😼"))
#(":kissing_cat:" 0 1 (:unicode "😽"))
#(":pouting_cat:" 0 1 (:unicode "😾"))
#(":crying_cat_face:" 0 1 (:unicode "😿"))
#(":scream_cat:" 0 1 (:unicode "🙀"))
#(":footprints:" 0 1 (:unicode "👣"))
#(":bust_in_silhouette:" 0 1 (:unicode "👤"))
#(":busts_in_silhouette:" 0 1 (:unicode "👥"))
#(":baby:" 0 1 (:unicode "👶"))
#(":boy:" 0 1 (:unicode "👦"))
#(":girl:" 0 1 (:unicode "👧"))
#(":man:" 0 1 (:unicode "👨"))
#(":woman:" 0 1 (:unicode "👩"))
#(":family:" 0 1 (:unicode "👪"))
#(":man-woman-girl:" 0 1 (:unicode "👨‍👩‍👧"))
#(":man-woman-girl-boy:" 0 1 (:unicode "👨‍👩‍👧‍👦"))
#(":man-woman-boy-boy:" 0 1 (:unicode "👨‍👩‍👦‍👦"))
#(":man-woman-girl-girl:" 0 1 (:unicode "👨‍👩‍👧‍👧"))
#(":woman-woman-boy:" 0 1 (:unicode "👩‍👩‍👦"))
#(":woman-woman-girl:" 0 1 (:unicode "👩‍👩‍👧"))
#(":woman-woman-girl-boy:" 0 1 (:unicode "👩‍👩‍👧‍👦"))
#(":woman-woman-boy-boy:" 0 1 (:unicode "👩‍👩‍👦‍👦"))
#(":woman-woman-girl-girl:" 0 1 (:unicode "👩‍👩‍👧‍👧"))
#(":man-man-boy:" 0 1 (:unicode "👨‍👨‍👦"))
#(":man-man-girl:" 0 1 (:unicode "👨‍👨‍👧"))
#(":man-man-girl-boy:" 0 1 (:unicode "👨‍👨‍👧‍👦"))
#(":man-man-boy-boy:" 0 1 (:unicode "👨‍👨‍👦‍👦"))
#(":man-man-girl-girl:" 0 1 (:unicode "👨‍👨‍👧‍👧"))
#(":couple:" 0 1 (:unicode "👫"))
#(":two_men_holding_hands:" 0 1 (:unicode "👬"))
#(":two_women_holding_hands:" 0 1 (:unicode "👭"))
#(":dancers:" 0 1 (:unicode "👯"))
#(":bride_with_veil:" 0 1 (:unicode "👰"))
#(":person_with_blond_hair:" 0 1 (:unicode "👱"))
#(":man_with_gua_pi_mao:" 0 1 (:unicode "👲"))
#(":man_with_turban:" 0 1 (:unicode "👳"))
#(":older_man:" 0 1 (:unicode "👴"))
#(":older_woman:" 0 1 (:unicode "👵"))
#(":cop:" 0 1 (:unicode "👮"))
#(":construction_worker:" 0 1 (:unicode "👷"))
#(":princess:" 0 1 (:unicode "👸"))
#(":guardsman:" 0 1 (:unicode "💂"))
#(":angel:" 0 1 (:unicode "👼"))
#(":santa:" 0 1 (:unicode "🎅"))
#(":ghost:" 0 1 (:unicode "👻"))
#(":japanese_ogre:" 0 1 (:unicode "👹"))
#(":japanese_goblin:" 0 1 (:unicode "👺"))
#(":poop:" 0 1 (:unicode "💩"))
#(":skull:" 0 1 (:unicode "💀"))
#(":alien:" 0 1 (:unicode "👽"))
#(":space_invader:" 0 1 (:unicode "👾"))
#(":bow:" 0 1 (:unicode "🙇"))
#(":information_desk_person:" 0 1 (:unicode "💁"))
#(":no_good:" 0 1 (:unicode "🙅"))
#(":ok_woman:" 0 1 (:unicode "🙆"))
#(":raising_hand:" 0 1 (:unicode "🙋"))
#(":person_with_pouting_face:" 0 1 (:unicode "🙎"))
#(":person_frowning:" 0 1 (:unicode "🙍"))
#(":massage:" 0 1 (:unicode "💆"))
#(":haircut:" 0 1 (:unicode "💇"))
#("couple_with_heart:" 0 1 (:unicode "💑"))
#(":woman-heart-woman:" 0 1 (:unicode "👩‍❤️‍👩"))
#(":man-heart-man:" 0 1 (:unicode "👨‍❤️‍👨"))
#(":couplekiss:" 0 1 (:unicode "💏"))
#(":woman-kiss-woman:" 0 1 (:unicode "👩‍❤️‍💋‍👩"))
#(":man-kiss-man:" 0 1 (:unicode "👨‍❤️‍💋‍👨"))
#(":raised_hands:" 0 1 (:unicode "🙌"))
#(":clap:" 0 1 (:unicode "👏"))
#(":ear:" 0 1 (:unicode "👂"))
#(":eyes:" 0 1 (:unicode "👀"))
#(":nose:" 0 1 (:unicode "👃"))
#(":lips:" 0 1 (:unicode "👄"))
#(":kiss:" 0 1 (:unicode "💋"))
#(":tongue:" 0 1 (:unicode "👅"))
#(":nail_care:" 0 1 (:unicode "💅"))
#(":wave:" 0 1 (:unicode "👋"))
#(":thumbsup:" 0 1 (:unicode "👍"))
#(":thumbsdown:" 0 1 (:unicode "👎"))
#(":point_up:" 0 1 (:unicode "☝️"))
#(":point_up_2:" 0 1 (:unicode "👆"))
#(":point_down:" 0 1 (:unicode "👇"))
#(":point_left:" 0 1 (:unicode "👈"))
#(":point_right:" 0 1 (:unicode "👉"))
#(":ok_hand:" 0 1 (:unicode "👌"))
#(":v:" 0 1 (:unicode "✌️"))
#(":punch:" 0 1 (:unicode "👊"))
#(":fist:" 0 1 (:unicode ""))
#(":raised_hand:" 0 1 (:unicode ""))
#(":muscle:" 0 1 (:unicode "💪"))
#(":open_hands:" 0 1 (:unicode "👐"))
#(":pray:" 0 1 (:unicode "🙏"))
#(":spock:" 0 1 (:unicode "🖖"))
#(":seedling:" 0 1 (:unicode "🌱"))
#(":evergreen_tree:" 0 1 (:unicode "🌲"))
#(":deciduous_tree:" 0 1 (:unicode "🌳"))
#(":palm_tree:" 0 1 (:unicode "🌴"))
#(":cactus:" 0 1 (:unicode "🌵"))
#(":tulip:" 0 1 (:unicode "🌷"))
#(":cherry_blossom:" 0 1 (:unicode "🌸"))
#(":rose:" 0 1 (:unicode "🌹"))
#(":hibiscus:" 0 1 (:unicode "🌺"))
#(":sunflower:" 0 1 (:unicode "🌻"))
#(":blossom:" 0 1 (:unicode "🌼"))
#(":bouquet:" 0 1 (:unicode "💐"))
#(":ear_of_rice:" 0 1 (:unicode "🌾"))
#(":herb:" 0 1 (:unicode "🌿"))
#(":four_leaf_clover:" 0 1 (:unicode "🍀"))
#(":maple_leaf:" 0 1 (:unicode "🍁"))
#(":fallen_leaf:" 0 1 (:unicode "🍂"))
#(":leaves:" 0 1 (:unicode "🍃"))
#(":mushroom:" 0 1 (:unicode "🍄"))
#(":chestnut:" 0 1 (:unicode "🌰"))
#(":rat:" 0 1 (:unicode "🐀"))
#(":mouse2:" 0 1 (:unicode "🐁"))
#(":mouse:" 0 1 (:unicode "🐭"))
#(":hamster:" 0 1 (:unicode "🐹"))
#(":ox:" 0 1 (:unicode "🐂"))
#(":water_buffalo:" 0 1 (:unicode "🐃"))
#(":cow2:" 0 1 (:unicode "🐄"))
#(":cow:" 0 1 (:unicode "🐮"))
#(":tiger2:" 0 1 (:unicode "🐅"))
#(":leopard:" 0 1 (:unicode "🐆"))
#(":tiger:" 0 1 (:unicode "🐯"))
#(":rabbit2:" 0 1 (:unicode "🐇"))
#(":rabbit:" 0 1 (:unicode "🐰"))
#(":cat2:" 0 1 (:unicode "🐈"))
#(":cat:" 0 1 (:unicode "🐱"))
#(":racehorse:" 0 1 (:unicode "🐎"))
#(":horse:" 0 1 (:unicode "🐴"))
#(":ram:" 0 1 (:unicode "🐏"))
#(":sheep:" 0 1 (:unicode "🐑"))
#(":goat:" 0 1 (:unicode "🐐"))
#(":rooster:" 0 1 (:unicode "🐓"))
#(":chicken:" 0 1 (:unicode "🐔"))
#(":baby_chick:" 0 1 (:unicode "🐤"))
#(":hatching_chick:" 0 1 (:unicode "🐣"))
#(":hatched_chick:" 0 1 (:unicode "🐥"))
#(":bird:" 0 1 (:unicode "🐦"))
#(":penguin:" 0 1 (:unicode "🐧"))
#(":elephant:" 0 1 (:unicode "🐘"))
#(":dromedary_camel:" 0 1 (:unicode "🐪"))
#(":camel:" 0 1 (:unicode "🐫"))
#(":boar:" 0 1 (:unicode "🐗"))
#(":pig2:" 0 1 (:unicode "🐖"))
#(":pig:" 0 1 (:unicode "🐷"))
#(":pig_nose:" 0 1 (:unicode "🐽"))
#(":dog2:" 0 1 (:unicode "🐕"))
#(":poodle:" 0 1 (:unicode "🐩"))
#(":dog:" 0 1 (:unicode "🐶"))
#(":wolf:" 0 1 (:unicode "🐺"))
#(":bear:" 0 1 (:unicode "🐻"))
#(":koala:" 0 1 (:unicode "🐨"))
#(":panda_face:" 0 1 (:unicode "🐼"))
#(":monkey_face:" 0 1 (:unicode "🐵"))
#(":see_no_evil:" 0 1 (:unicode "🙈"))
#(":hear_no_evil:" 0 1 (:unicode "🙉"))
#(":speak_no_evil:" 0 1 (:unicode "🙊"))
#(":monkey:" 0 1 (:unicode "🐒"))
#(":dragon:" 0 1 (:unicode "🐉"))
#(":dragon_face:" 0 1 (:unicode "🐲"))
#(":crocodile:" 0 1 (:unicode "🐊"))
#(":snake:" 0 1 (:unicode "🐍"))
#(":turtle:" 0 1 (:unicode "🐢"))
#(":frog:" 0 1 (:unicode "🐸"))
#(":whale2:" 0 1 (:unicode "🐋"))
#(":whale:" 0 1 (:unicode "🐳"))
#(":flipper:" 0 1 (:unicode "🐬"))
#(":octopus:" 0 1 (:unicode "🐙"))
#(":fish:" 0 1 (:unicode "🐟"))
#(":tropical_fish:" 0 1 (:unicode "🐠"))
#(":blowfish:" 0 1 (:unicode "🐡"))
#(":shell:" 0 1 (:unicode "🐚"))
#(":snail:" 0 1 (:unicode "🐌"))
#(":bug:" 0 1 (:unicode "🐛"))
#(":ant:" 0 1 (:unicode "🐜"))
#(":honeybee:" 0 1 (:unicode "🐝"))
#(":beetle:" 0 1 (:unicode "🐞"))
#(":paw_prints:" 0 1 (:unicode "🐾"))
#(":zap:" 0 1 (:unicode ""))
#(":fire:" 0 1 (:unicode "🔥"))
#(":crescent_moon:" 0 1 (:unicode "🌙"))
#(":sunny:" 0 1 (:unicode "☀️"))
#(":partly_sunny:" 0 1 (:unicode ""))
#(":cloud:" 0 1 (:unicode "️☁️"))
#(":droplet:" 0 1 (:unicode "💧"))
#(":sweat_drops:" 0 1 (:unicode "💦"))
#(":umbrella:" 0 1 (:unicode ""))
#(":dash:" 0 1 (:unicode "💨"))
#(":snowflake:" 0 1 (:unicode "❄️"))
#(":star2:" 0 1 (:unicode "🌟"))
#(":star:" 0 1 (:unicode ""))
#(":shooting_star:" 0 1 (:unicode "🌠"))
#(":sunrise_over_mountains:" 0 1 (:unicode "🌄"))
#(":sunrise:" 0 1 (:unicode "🌅"))
#(":rainbow:" 0 1 (:unicode "🌈"))
#(":ocean:" 0 1 (:unicode "🌊"))
#(":volcano:" 0 1 (:unicode "🌋"))
#(":milky_way:" 0 1 (:unicode "🌌"))
#(":mount_fuji:" 0 1 (:unicode "🗻"))
#(":japan:" 0 1 (:unicode "🗾"))
#(":globe_with_meridians:" 0 1 (:unicode "🌐"))
#(":earth_africa:" 0 1 (:unicode "🌍"))
#(":earth_americas:" 0 1 (:unicode "🌎"))
#(":earth_asia:" 0 1 (:unicode "🌏"))
#(":new_moon:" 0 1 (:unicode "🌑"))
#(":waxing_crescent_moon:" 0 1 (:unicode "🌒"))
#(":first_quarter_moon:" 0 1 (:unicode "🌓"))
#(":waxing_gibbous_moon:" 0 1 (:unicode "🌔"))
#(":full_moon:" 0 1 (:unicode "🌕"))
#(":waning_gibbous_moon:" 0 1 (:unicode "🌖"))
#(":last_quarter_moon:" 0 1 (:unicode "🌗"))
#(":waning_crescent_moon:" 0 1 (:unicode "🌘"))
#(":new_moon_with_face:" 0 1 (:unicode "🌚"))
#(":full_moon_with_face:" 0 1 (:unicode "🌝"))
#(":first_quarter_moon_with_face:" 0 1 (:unicode "🌛"))
#(":last_quarter_moon_with_face:" 0 1 (:unicode "🌜"))
#(":sun_with_face:" 0 1 (:unicode "🌞"))
#(":tomato:" 0 1 (:unicode "🍅"))
#(":eggplant:" 0 1 (:unicode "🍆"))
#(":corn:" 0 1 (:unicode "🌽"))
#(":sweet_potato:" 0 1 (:unicode "🍠"))
#(":grapes:" 0 1 (:unicode "🍇"))
#(":melon:" 0 1 (:unicode "🍈"))
#(":watermelon:" 0 1 (:unicode "🍉"))
#(":tangerine:" 0 1 (:unicode "🍊"))
#(":lemon:" 0 1 (:unicode "🍋"))
#(":banana:" 0 1 (:unicode "🍌"))
#(":pineapple:" 0 1 (:unicode "🍍"))
#(":apple:" 0 1 (:unicode "🍎"))
#(":green_apple:" 0 1 (:unicode "🍏"))
#(":pear:" 0 1 (:unicode "🍐"))
#(":peach:" 0 1 (:unicode "🍑"))
#(":cherries:" 0 1 (:unicode "🍒"))
#(":strawberry:" 0 1 (:unicode "🍓"))
#(":hamburger:" 0 1 (:unicode "🍔"))
#(":pizza:" 0 1 (:unicode "🍕"))
#(":meat_on_bone:" 0 1 (:unicode "🍖"))
#(":poultry_leg:" 0 1 (:unicode "🍗"))
#(":rice_cracker:" 0 1 (:unicode "🍘"))
#(":rice_ball:" 0 1 (:unicode "🍙"))
#(":rice:" 0 1 (:unicode "🍚"))
#(":curry:" 0 1 (:unicode "🍛"))
#(":ramen:" 0 1 (:unicode "🍜"))
#(":spaghetti:" 0 1 (:unicode "🍝"))
#(":bread:" 0 1 (:unicode "🍞"))
#(":fries:" 0 1 (:unicode "🍟"))
#(":dango:" 0 1 (:unicode "🍡"))
#(":oden:" 0 1 (:unicode "🍢"))
#(":sushi:" 0 1 (:unicode "🍣"))
#(":fried_shrimp:" 0 1 (:unicode "🍤"))
#(":fish_cake:" 0 1 (:unicode "🍥"))
#(":icecream:" 0 1 (:unicode "🍦"))
#(":shaved_ice:" 0 1 (:unicode "🍧"))
#(":ice_cream:" 0 1 (:unicode "🍨"))
#(":doughnut:" 0 1 (:unicode "🍩"))
#(":cookie:" 0 1 (:unicode "🍪"))
#(":chocolate_bar:" 0 1 (:unicode "🍫"))
#(":candy:" 0 1 (:unicode "🍬"))
#(":lollipop:" 0 1 (:unicode "🍭"))
#(":custard:" 0 1 (:unicode "🍮"))
#(":honey_pot:" 0 1 (:unicode "🍯"))
#(":cake:" 0 1 (:unicode "🍰"))
#(":bento:" 0 1 (:unicode "🍱"))
#(":stew:" 0 1 (:unicode "🍲"))
#(":egg:" 0 1 (:unicode "🍳"))
#(":fork_and_knife:" 0 1 (:unicode "🍴"))
#(":tea:" 0 1 (:unicode "🍵"))
#(":coffee:" 0 1 (:unicode ""))
#(":sake:" 0 1 (:unicode "🍶"))
#(":wine_glass:" 0 1 (:unicode "🍷"))
#(":cocktail:" 0 1 (:unicode "🍸"))
#(":tropical_drink:" 0 1 (:unicode "🍹"))
#(":beer:" 0 1 (:unicode "🍺"))
#(":beers:" 0 1 (:unicode "🍻"))
#(":baby_bottle:" 0 1 (:unicode "🍼"))
#(":ribbon:" 0 1 (:unicode "🎀"))
#(":gift:" 0 1 (:unicode "🎁"))
#(":birthday:" 0 1 (:unicode "🎂"))
#(":jack_o_lantern:" 0 1 (:unicode "🎃"))
#(":christmas_tree:" 0 1 (:unicode "🎄"))
#(":tanabata_tree:" 0 1 (:unicode "🎋"))
#(":bamboo:" 0 1 (:unicode "🎍"))
#(":rice_scene:" 0 1 (:unicode "🎑"))
#(":fireworks:" 0 1 (:unicode "🎆"))
#(":sparkler:" 0 1 (:unicode "🎇"))
#(":tada:" 0 1 (:unicode "🎉"))
#(":confetti_ball:" 0 1 (:unicode "🎊"))
#(":balloon:" 0 1 (:unicode "🎈"))
#(":dizzy:" 0 1 (:unicode "💫"))
#(":sparkles:" 0 1 (:unicode ""))
#(":collision:" 0 1 (:unicode "💥"))
#(":mortar_board:" 0 1 (:unicode "🎓"))
#(":crown:" 0 1 (:unicode "👑"))
#(":dolls:" 0 1 (:unicode "🎎"))
#(":flags:" 0 1 (:unicode "🎏"))
#(":wind_chime:" 0 1 (:unicode "🎐"))
#(":crossed_flags:" 0 1 (:unicode "🎌"))
#(":lantern:" 0 1 (:unicode "🏮"))
#(":ring:" 0 1 (:unicode "💍"))
#(":heart:" 0 1 (:unicode "❤️"))
#(":broken_heart:" 0 1 (:unicode "💔"))
#(":love_letter:" 0 1 (:unicode "💌"))
#(":two_hearts:" 0 1 (:unicode "💕"))
#(":revolving_hearts:" 0 1 (:unicode "💞"))
#(":heartbeat:" 0 1 (:unicode "💓"))
#(":heartpulse:" 0 1 (:unicode "💗"))
#(":sparkling_heart:" 0 1 (:unicode "💖"))
#(":cupid:" 0 1 (:unicode "💘"))
#(":gift_heart:" 0 1 (:unicode "💝"))
#(":heart_decoration:" 0 1 (:unicode "💟"))
#(":purple_heart:" 0 1 (:unicode "💜"))
#(":yellow_heart:" 0 1 (:unicode "💛"))
#(":green_heart:" 0 1 (:unicode "💚"))
#(":blue_heart:" 0 1 (:unicode "💙"))
#(":running:" 0 1 (:unicode "🏃"))
#(":walking:" 0 1 (:unicode "🚶"))
#(":dancer:" 0 1 (:unicode "💃"))
#(":rowboat:" 0 1 (:unicode "🚣"))
#(":swimmer:" 0 1 (:unicode "🏊"))
#(":surfer:" 0 1 (:unicode "🏄"))
#(":bath:" 0 1 (:unicode "🛀"))
#(":snowboarder:" 0 1 (:unicode "🏂"))
#(":ski:" 0 1 (:unicode "🎿"))
#(":snowman:" 0 1 (:unicode ""))
#(":bicyclist:" 0 1 (:unicode "️🚴"))
#(":mountain_bicyclist:" 0 1 (:unicode "🚵"))
#(":horse_racing:" 0 1 (:unicode "🏇"))
#(":tent:" 0 1 (:unicode ""))
#(":fishing_pole_and_fish:" 0 1 (:unicode "️🎣"))
#(":soccer:" 0 1 (:unicode ""))
#(":basketball:" 0 1 (:unicode "️🏀"))
#(":football:" 0 1 (:unicode "🏈"))
#(":baseball:" 0 1 (:unicode "⚾️"))
#(":tennis:" 0 1 (:unicode "🎾"))
#(":rugby_football:" 0 1 (:unicode "🏉"))
#(":golf:" 0 1 (:unicode ""))
#(":trophy:" 0 1 (:unicode "️🏆"))
#(":running_shirt_with_sash:" 0 1 (:unicode "🎽"))
#(":checkered_flag:" 0 1 (:unicode "🏁"))
#(":musical_keyboard:" 0 1 (:unicode "🎹"))
#(":guitar:" 0 1 (:unicode "🎸"))
#(":violin:" 0 1 (:unicode "🎻"))
#(":saxophone:" 0 1 (:unicode "🎷"))
#(":trumpet:" 0 1 (:unicode "🎺"))
#(":musical_note:" 0 1 (:unicode "🎵"))
#(":notes:" 0 1 (:unicode "🎶"))
#(":musical_score:" 0 1 (:unicode "🎼"))
#(":headphones:" 0 1 (:unicode "🎧"))
#(":microphone:" 0 1 (:unicode "🎤"))
#(":performing_arts:" 0 1 (:unicode "🎭"))
#(":ticket:" 0 1 (:unicode "🎫"))
#(":tophat:" 0 1 (:unicode "🎩"))
#(":circus_tent:" 0 1 (:unicode "🎪"))
#(":clapper:" 0 1 (:unicode "🎬"))
#(":art:" 0 1 (:unicode "🎨"))
#(":dart:" 0 1 (:unicode "🎯"))
#(":8ball:" 0 1 (:unicode "🎱"))
#(":bowling:" 0 1 (:unicode "🎳"))
#(":slot_machine:" 0 1 (:unicode "🎰"))
#(":game_die:" 0 1 (:unicode "🎲"))
#(":video_game:" 0 1 (:unicode "🎮"))
#(":flower_playing_cards:" 0 1 (:unicode "🎴"))
#(":black_joker:" 0 1 (:unicode "🃏"))
#(":mahjong:" 0 1 (:unicode "🀄"))
#(":carousel_horse:" 0 1 (:unicode "🎠"))
#(":ferris_wheel:" 0 1 (:unicode "🎡"))
#(":roller_coaster:" 0 1 (:unicode "🎢"))
#(":train:" 0 1 (:unicode "🚃"))
#(":mountain_railway:" 0 1 (:unicode "🚞"))
#(":steam_locomotive:" 0 1 (:unicode "🚂"))
#(":tram:" 0 1 (:unicode "🚋"))
#(":monorail:" 0 1 (:unicode "🚝"))
#(":bullettrain_side:" 0 1 (:unicode "🚄"))
#(":bullettrain_front:" 0 1 (:unicode "🚅"))
#(":train2:" 0 1 (:unicode "🚆"))
#(":metro:" 0 1 (:unicode "🚇"))
#(":light_rail:" 0 1 (:unicode "🚈"))
#(":station:" 0 1 (:unicode "🚉"))
#(":tram:" 0 1 (:unicode "🚊"))
#(":bus:" 0 1 (:unicode "🚌"))
#(":oncoming_bus:" 0 1 (:unicode "🚍"))
#(":trolleybus:" 0 1 (:unicode "🚎"))
#(":minibus:" 0 1 (:unicode "🚐"))
#(":ambulance:" 0 1 (:unicode "🚑"))
#(":fire_engine:" 0 1 (:unicode "🚒"))
#(":police_car:" 0 1 (:unicode "🚓"))
#(":oncoming_police_car:" 0 1 (:unicode "🚔"))
#(":rotating_light:" 0 1 (:unicode "🚨"))
#(":taxi:" 0 1 (:unicode "🚕"))
#(":oncoming_taxi:" 0 1 (:unicode "🚖"))
#(":red_car:" 0 1 (:unicode "🚗"))
#(":oncoming_automobile:" 0 1 (:unicode "🚘"))
#(":blue_car:" 0 1 (:unicode "🚙"))
#(":truck:" 0 1 (:unicode "🚚"))
#(":articulated_lorry:" 0 1 (:unicode "🚛"))
#(":tractor:" 0 1 (:unicode "🚜"))
#(":bike:" 0 1 (:unicode "🚲"))
#(":busstop:" 0 1 (:unicode "🚏"))
#(":fuelpump:" 0 1 (:unicode ""))
#(":construction:" 0 1 (:unicode "🚧"))
#(":vertical_traffic_light:" 0 1 (:unicode "🚦"))
#(":traffic_light:" 0 1 (:unicode "🚥"))
#(":rocket:" 0 1 (:unicode "🚀"))
#(":helicopter:" 0 1 (:unicode "🚁"))
#(":airplane:" 0 1 (:unicode "✈️"))
#(":seat:" 0 1 (:unicode "💺"))
#(":anchor:" 0 1 (:unicode ""))
#(":ship:" 0 1 (:unicode "🚢"))
#(":speedboat:" 0 1 (:unicode "🚤"))
#(":sailboat:" 0 1 (:unicode ""))
#(":aerial_tramway:" 0 1 (:unicode "🚡"))
#(":mountain_cableway:" 0 1 (:unicode "🚠"))
#(":suspension_railway:" 0 1 (:unicode "🚟"))
#(":passport_control:" 0 1 (:unicode "🛂"))
#(":customs:" 0 1 (:unicode "🛃"))
#(":baggage_claim:" 0 1 (:unicode "🛄"))
#(":left_luggage:" 0 1 (:unicode "🛅"))
#(":yen:" 0 1 (:unicode "💴"))
#(":euro:" 0 1 (:unicode "💶"))
#(":pound:" 0 1 (:unicode "💷"))
#(":dollar:" 0 1 (:unicode "💵"))
#(":statue_of_liberty:" 0 1 (:unicode "🗽"))
#(":moyai:" 0 1 (:unicode "🗿"))
#(":foggy:" 0 1 (:unicode "🌁"))
#(":tokyo_tower:" 0 1 (:unicode "🗼"))
#(":fountain:" 0 1 (:unicode ""))
#(":european_castle:" 0 1 (:unicode "🏰"))
#(":japanese_castle:" 0 1 (:unicode "🏯"))
#(":city_sunrise:" 0 1 (:unicode "🌇"))
#(":city_sunset:" 0 1 (:unicode "🌆"))
#(":stars:" 0 1 (:unicode "🌃"))
#(":bridge_at_night:" 0 1 (:unicode "🌉"))
#(":house:" 0 1 (:unicode "🏠"))
#(":house_with_garden:" 0 1 (:unicode "🏡"))
#(":office:" 0 1 (:unicode "🏢"))
#(":department_store:" 0 1 (:unicode "🏬"))
#(":factory:" 0 1 (:unicode "🏭"))
#(":post_office:" 0 1 (:unicode "🏣"))
#(":european_post_office:" 0 1 (:unicode "🏤"))
#(":hospital:" 0 1 (:unicode "🏥"))
#(":bank:" 0 1 (:unicode "🏦"))
#(":hotel:" 0 1 (:unicode "🏨"))
#(":love_hotel:" 0 1 (:unicode "🏩"))
#(":wedding:" 0 1 (:unicode "💒"))
#(":church:" 0 1 (:unicode ""))
#(":convenience_store:" 0 1 (:unicode "🏪"))
#(":school:" 0 1 (:unicode "🏫"))
#(":flag-au:" 0 1 (:unicode "🇦🇺"))
#(":flag-at:" 0 1 (:unicode "🇦🇹"))
#(":flag-be:" 0 1 (:unicode "🇧🇪"))
#(":flag-br:" 0 1 (:unicode "🇧🇷"))
#(":flag-ca:" 0 1 (:unicode "🇨🇦"))
#(":flag-cl:" 0 1 (:unicode "🇨🇱"))
#(":flag-cn:" 0 1 (:unicode "🇨🇳"))
#(":flag-co:" 0 1 (:unicode "🇨🇴"))
#(":flag-dk:" 0 1 (:unicode "🇩🇰"))
#(":flag-fi:" 0 1 (:unicode "🇫🇮"))
#(":flag-fr:" 0 1 (:unicode "🇫🇷"))
#(":flag-de:" 0 1 (:unicode "🇩🇪"))
#(":flag-hk:" 0 1 (:unicode "🇭🇰"))
#(":flag-in:" 0 1 (:unicode "🇮🇳"))
#(":flag-id:" 0 1 (:unicode "🇮🇩"))
#(":flag-ie:" 0 1 (:unicode "🇮🇪"))
#(":flag-il:" 0 1 (:unicode "🇮🇱"))
#(":flag-it:" 0 1 (:unicode "🇮🇹"))
#(":flag-jp:" 0 1 (:unicode "🇯🇵"))
#(":flag-kr:" 0 1 (:unicode "🇰🇷"))
#(":flag-mo:" 0 1 (:unicode "🇲🇴"))
#(":flag-my:" 0 1 (:unicode "🇲🇾"))
#(":flag-mx:" 0 1 (:unicode "🇲🇽"))
#(":flag-nl:" 0 1 (:unicode "🇳🇱"))
#(":flag-nz:" 0 1 (:unicode "🇳🇿"))
#(":flag-no:" 0 1 (:unicode "🇳🇴"))
#(":flag-ph:" 0 1 (:unicode "🇵🇭"))
#(":flag-pl:" 0 1 (:unicode "🇵🇱"))
#(":flag-pt:" 0 1 (:unicode "🇵🇹"))
#(":flag-pr:" 0 1 (:unicode "🇵🇷"))
#(":flag-ru:" 0 1 (:unicode "🇷🇺"))
#(":flag-sa:" 0 1 (:unicode "🇸🇦"))
#(":flag-sg:" 0 1 (:unicode "🇸🇬"))
#(":flag-za:" 0 1 (:unicode "🇿🇦"))
#(":flag-es:" 0 1 (:unicode "🇪🇸"))
#(":flag-se:" 0 1 (:unicode "🇸🇪"))
#(":flag-ch:" 0 1 (:unicode "🇨🇭"))
#(":flag-tr:" 0 1 (:unicode "🇹🇷"))
#(":flag-gb:" 0 1 (:unicode "🇬🇧"))
#(":flag-us:" 0 1 (:unicode "🇺🇸"))
#(":flag-ae:" 0 1 (:unicode "🇦🇪"))
#(":flag-vn:" 0 1 (:unicode "🇻🇳"))
#(":watch:" 0 1 (:unicode ""))
#(":iphone:" 0 1 (:unicode "📱"))
#(":calling:" 0 1 (:unicode "📲"))
#(":computer:" 0 1 (:unicode "💻"))
#(":alarm_clock:" 0 1 (:unicode ""))
#(":hourglass_flowing_sand:" 0 1 (:unicode ""))
#(":hourglass:" 0 1 (:unicode ""))
#(":camera:" 0 1 (:unicode "📷"))
#(":video_camera:" 0 1 (:unicode "📹"))
#(":movie_camera:" 0 1 (:unicode "🎥"))
#(":tv:" 0 1 (:unicode "📺"))
#(":radio:" 0 1 (:unicode "📻"))
#(":pager:" 0 1 (:unicode "📟"))
#(":telephone_receiver:" 0 1 (:unicode "📞"))
#(":telephone:" 0 1 (:unicode "☎️"))
#(":fax:" 0 1 (:unicode "📠"))
#(":minidisc:" 0 1 (:unicode "💽"))
#(":floppy_disk:" 0 1 (:unicode "💾"))
#(":cd:" 0 1 (:unicode "💿"))
#(":dvd:" 0 1 (:unicode "📀"))
#(":vhs:" 0 1 (:unicode "📼"))
#(":battery:" 0 1 (:unicode "🔋"))
#(":electric_plug:" 0 1 (:unicode "🔌"))
#(":bulb:" 0 1 (:unicode "💡"))
#(":flashlight:" 0 1 (:unicode "🔦"))
#(":satellite:" 0 1 (:unicode "📡"))
#(":credit_card:" 0 1 (:unicode "💳"))
#(":money_with_wings:" 0 1 (:unicode "💸"))
#(":moneybag:" 0 1 (:unicode "💰"))
#(":gem:" 0 1 (:unicode "💎"))
#(":closed_umbrella:" 0 1 (:unicode "🌂"))
#(":pouch:" 0 1 (:unicode "👝"))
#(":purse:" 0 1 (:unicode "👛"))
#(":handbag:" 0 1 (:unicode "👜"))
#(":briefcase:" 0 1 (:unicode "💼"))
#(":school_satchel:" 0 1 (:unicode "🎒"))
#(":lipstick:" 0 1 (:unicode "💄"))
#(":eyeglasses:" 0 1 (:unicode "👓"))
#(":womans_hat:" 0 1 (:unicode "👒"))
#(":sandal:" 0 1 (:unicode "👡"))
#(":high_heel:" 0 1 (:unicode "👠"))
#(":boot:" 0 1 (:unicode "👢"))
#(":shoe:" 0 1 (:unicode "👞"))
#(":athletic_shoe:" 0 1 (:unicode "👟"))
#(":bikini:" 0 1 (:unicode "👙"))
#(":dress:" 0 1 (:unicode "👗"))
#(":kimono:" 0 1 (:unicode "👘"))
#(":womans_clothes:" 0 1 (:unicode "👚"))
#(":tshirt:" 0 1 (:unicode "👕"))
#(":necktie:" 0 1 (:unicode "👔"))
#(":jeans:" 0 1 (:unicode "👖"))
#(":door:" 0 1 (:unicode "🚪"))
#(":shower:" 0 1 (:unicode "🚿"))
#(":bathtub:" 0 1 (:unicode "🛁"))
#(":toilet:" 0 1 (:unicode "🚽"))
#(":barber:" 0 1 (:unicode "💈"))
#(":syringe:" 0 1 (:unicode "💉"))
#(":pill:" 0 1 (:unicode "💊"))
#(":microscope:" 0 1 (:unicode "🔬"))
#(":telescope:" 0 1 (:unicode "🔭"))
#(":crystal_ball:" 0 1 (:unicode "🔮"))
#(":wrench:" 0 1 (:unicode "🔧"))
#(":hocho:" 0 1 (:unicode "🔪"))
#(":nut_and_bolt:" 0 1 (:unicode "🔩"))
#(":hammer:" 0 1 (:unicode "🔨"))
#(":bomb:" 0 1 (:unicode "💣"))
#(":smoking:" 0 1 (:unicode "🚬"))
#(":gun:" 0 1 (:unicode "🔫"))
#(":bookmark:" 0 1 (:unicode "🔖"))
#(":newspaper:" 0 1 (:unicode "📰"))
#(":key:" 0 1 (:unicode "🔑"))
#(":envelope:" 0 1 (:unicode "✉️"))
#(":envelope_with_arrow:" 0 1 (:unicode "📩"))
#(":incoming_envelope:" 0 1 (:unicode "📨"))
#(":e-mail:" 0 1 (:unicode "📧"))
#(":inbox_tray:" 0 1 (:unicode "📥"))
#(":outbox_tray:" 0 1 (:unicode "📤"))
#(":package:" 0 1 (:unicode "📦"))
#(":postal_horn:" 0 1 (:unicode "📯"))
#(":postbox:" 0 1 (:unicode "📮"))
#(":mailbox_closed:" 0 1 (:unicode "📪"))
#(":mailbox:" 0 1 (:unicode "📫"))
#(":mailbox_with_mail:" 0 1 (:unicode "📬"))
#(":mailbox_with_no_mail:" 0 1 (:unicode "📭"))
#(":page_facing_up:" 0 1 (:unicode "📄"))
#(":page_with_curl:" 0 1 (:unicode "📃"))
#(":bookmark_tabs:" 0 1 (:unicode "📑"))
#(":chart_with_upwards_trend:" 0 1 (:unicode "📈"))
#(":chart_with_downwards_trend:" 0 1 (:unicode "📉"))
#(":bar_chart:" 0 1 (:unicode "📊"))
#(":date:" 0 1 (:unicode "📅"))
#(":calendar:" 0 1 (:unicode "📆"))
#(":low_brightness:" 0 1 (:unicode "🔅"))
#(":high_brightness:" 0 1 (:unicode "🔆"))
#(":scroll:" 0 1 (:unicode "📜"))
#(":clipboard:" 0 1 (:unicode "📋"))
#(":open_book:" 0 1 (:unicode "📖"))
#(":notebook:" 0 1 (:unicode "📓"))
#(":notebook_with_decorative_cover:" 0 1 (:unicode "📔"))
#(":ledger:" 0 1 (:unicode "📒"))
#(":closed_book:" 0 1 (:unicode "📕"))
#(":green_book:" 0 1 (:unicode "📗"))
#(":blue_book:" 0 1 (:unicode "📘"))
#(":orange_book:" 0 1 (:unicode "📙"))
#(":books:" 0 1 (:unicode "📚"))
#(":card_index:" 0 1 (:unicode "📇"))
#(":link:" 0 1 (:unicode "🔗"))
#(":paperclip:" 0 1 (:unicode "📎"))
#(":pushpin:" 0 1 (:unicode "📌"))
#(":scissors:" 0 1 (:unicode "✂️"))
#(":triangular_ruler:" 0 1 (:unicode "📐"))
#(":round_pushpin:" 0 1 (:unicode "📍"))
#(":straight_ruler:" 0 1 (:unicode "📏"))
#(":triangular_flag_on_post:" 0 1 (:unicode "🚩"))
#(":file_folder:" 0 1 (:unicode "📁"))
#(":open_file_folder:" 0 1 (:unicode "📂"))
#(":black_nib:" 0 1 (:unicode "✒️"))
#(":pencil2:" 0 1 (:unicode "✏️"))
#(":pencil:" 0 1 (:unicode "📝"))
#(":lock_with_ink_pen:" 0 1 (:unicode "🔏"))
#(":closed_lock_with_key:" 0 1 (:unicode "🔐"))
#(":lock:" 0 1 (:unicode "🔒"))
#(":unlock:" 0 1 (:unicode "🔓"))
#(":mega:" 0 1 (:unicode "📣"))
#(":loudspeaker:" 0 1 (:unicode "📢"))
#(":speakers:" 0 1 (:unicode "🔈"))
#(":quiet_speakers:" 0 1 (:unicode "🔉"))
#(":loud_speakers:" 0 1 (:unicode "🔊"))
#(":mute:" 0 1 (:unicode "🔇"))
#(":zzz:" 0 1 (:unicode "💤"))
#(":bell:" 0 1 (:unicode "🔔"))
#(":no_bell:" 0 1 (:unicode "🔕"))
#(":thought_balloon:" 0 1 (:unicode "💭"))
#(":speech_balloon:" 0 1 (:unicode "💬"))
#(":children_crossing:" 0 1 (:unicode "🚸"))
#(":mag:" 0 1 (:unicode "🔍"))
#(":mag_right:" 0 1 (:unicode "🔎"))
#(":no_entry_sign:" 0 1 (:unicode "🚫"))
#(":no_entry:" 0 1 (:unicode ""))
#(":name_badge:" 0 1 (:unicode "📛"))
#(":no_pedestrians:" 0 1 (:unicode "🚷"))
#(":do_not_litter:" 0 1 (:unicode "🚯"))
#(":no_bicycles:" 0 1 (:unicode "🚳"))
#(":non-potable_water:" 0 1 (:unicode "🚱"))
#(":no_mobile_phones:" 0 1 (:unicode "📵"))
#(":underage:" 0 1 (:unicode "🔞"))
#(":accept:" 0 1 (:unicode "🉑"))
#(":ideograph_advantage:" 0 1 (:unicode "🉐"))
#(":white_flower:" 0 1 (:unicode "💮"))
#(":secret:" 0 1 (:unicode "㊙️"))
#(":congratulations:" 0 1 (:unicode "㊗️"))
#(":u5408:" 0 1 (:unicode "🈴"))
#(":u6e80:" 0 1 (:unicode "🈵"))
#(":u7981:" 0 1 (:unicode "🈲"))
#(":u6709:" 0 1 (:unicode "🈶"))
#(":u7121:" 0 1 (:unicode "🈚"))
#(":u7533:" 0 1 (:unicode "🈸"))
#(":u55b6:" 0 1 (:unicode "🈺"))
#(":u6708:" 0 1 (:unicode "🈷"))
#(":u5272:" 0 1 (:unicode "🈹"))
#(":u7a7a:" 0 1 (:unicode "🈳"))
#(":sa:" 0 1 (:unicode "🈂"))
#(":koko:" 0 1 (:unicode "🈁"))
#(":u6307:" 0 1 (:unicode "🈯"))
#(":chart:" 0 1 (:unicode "💹"))
#(":sparkle:" 0 1 (:unicode "❇️"))
#(":eight_spoked_asterisk:" 0 1 (:unicode "✳️"))
#(":negative_squared_cross_mark:" 0 1 (:unicode ""))
#(":white_check_mark:" 0 1 (:unicode ""))
#(":eight_pointed_black_star:" 0 1 (:unicode "✴️"))
#(":vibration_mode:" 0 1 (:unicode "📳"))
#(":mobile_phone_off:" 0 1 (:unicode "📴"))
#(":vs:" 0 1 (:unicode "🆚"))
#(":a:" 0 1 (:unicode "🅰"))
#(":b:" 0 1 (:unicode "🅱"))
#(":ab:" 0 1 (:unicode "🆎"))
#(":cl:" 0 1 (:unicode "🆑"))
#(":o2:" 0 1 (:unicode "🅾"))
#(":sos:" 0 1 (:unicode "🆘"))
#(":id:" 0 1 (:unicode "🆔"))
#(":parking:" 0 1 (:unicode "🅿"))
#(":wc:" 0 1 (:unicode "🚾"))
#(":cool:" 0 1 (:unicode "🆒"))
#(":free:" 0 1 (:unicode "🆓"))
#(":new:" 0 1 (:unicode "🆕"))
#(":ng:" 0 1 (:unicode "🆖"))
#(":ok:" 0 1 (:unicode "🆗"))
#(":up:" 0 1 (:unicode "🆙"))
#(":atm:" 0 1 (:unicode "🏧"))
#(":aries:" 0 1 (:unicode ""))
#(":taurus:" 0 1 (:unicode ""))
#(":gemini:" 0 1 (:unicode ""))
#(":cancer:" 0 1 (:unicode ""))
#(":leo:" 0 1 (:unicode ""))
#(":virgo:" 0 1 (:unicode ""))
#(":libra:" 0 1 (:unicode ""))
#(":scorpius:" 0 1 (:unicode ""))
#(":sagittarius:" 0 1 (:unicode ""))
#(":capricorn:" 0 1 (:unicode ""))
#(":aquarius:" 0 1 (:unicode ""))
#(":pisces:" 0 1 (:unicode ""))
#(":restroom:" 0 1 (:unicode "🚻"))
#(":mens:" 0 1 (:unicode "🚹"))
#(":womens:" 0 1 (:unicode "🚺"))
#(":baby_symbol:" 0 1 (:unicode "🚼"))
#(":wheelchair:" 0 1 (:unicode ""))
#(":potable_water:" 0 1 (:unicode "🚰"))
#(":no_smoking:" 0 1 (:unicode "🚭"))
#(":put_litter_in_its_place:" 0 1 (:unicode "🚮"))
#(":arrow_forward:" 0 1 (:unicode "▶️"))
#(":arrow_backward:" 0 1 (:unicode "◀️"))
#(":arrow_up_small:" 0 1 (:unicode "🔼"))
#(":arrow_down_small:" 0 1 (:unicode "🔽"))
#(":fast_forward:" 0 1 (:unicode ""))
#(":rewind:" 0 1 (:unicode ""))
#(":arrow_double_up:" 0 1 (:unicode ""))
#(":arrow_double_down:" 0 1 (:unicode ""))
#(":arrow_right:" 0 1 (:unicode "➡️"))
#(":arrow_left:" 0 1 (:unicode "⬅️"))
#(":arrow_up:" 0 1 (:unicode "⬆️"))
#(":arrow_down:" 0 1 (:unicode "⬇️"))
#(":arrow_upper_right:" 0 1 (:unicode "↗️"))
#(":arrow_lower_right:" 0 1 (:unicode "↘️"))
#(":arrow_lower_left:" 0 1 (:unicode "↙️"))
#(":arrow_upper_left:" 0 1 (:unicode "↖️"))
#(":arrow_up_down:" 0 1 (:unicode "↕️"))
#(":left_right_arrow:" 0 1 (:unicode "↔️"))
#(":arrows_counterclockwise:" 0 1 (:unicode "🔄"))
#(":arrow_right_hook:" 0 1 (:unicode "↪️"))
#(":leftwards_arrow_with_hook:" 0 1 (:unicode "↩️"))
#(":arrow_heading_up:" 0 1 (:unicode "⤴️"))
#(":arrow_heading_down:" 0 1 (:unicode "⤵️"))
#(":twisted_rightwards_arrows:" 0 1 (:unicode "🔀"))
#(":repeat:" 0 1 (:unicode "🔁"))
#(":repeat_one:" 0 1 (:unicode "🔂"))
#(":hashtag:" 0 1 (:unicode "#️⃣"))
#(":keycap_zero:" 0 1 (:unicode "0"))
#(":keycap_one:" 0 1 (:unicode "1"))
#(":keycap_two:" 0 1 (:unicode "2"))
#(":keycap_three:" 0 1 (:unicode "3"))
#(":keycap_four:" 0 1 (:unicode "4"))
#(":keycap_five:" 0 1 (:unicode "5"))
#(":keycap_six:" 0 1 (:unicode "6"))
#(":keycap_seven:" 0 1 (:unicode "7"))
#(":keycap_eight:" 0 1 (:unicode "8"))
#(":keycap_nine:" 0 1 (:unicode "9"))
#(":keycap_ten:" 0 1 (:unicode "🔟"))
#(":1234:" 0 1 (:unicode "🔢"))
#(":abc:" 0 1 (:unicode "🔤"))
#(":abcd:" 0 1 (:unicode "🔡"))
#(":capital_abcd:" 0 1 (:unicode "🔠"))
#(":information_source:" 0 1 (:unicode ""))
#(":signal_strength:" 0 1 (:unicode "📶"))
#(":cinema:" 0 1 (:unicode "🎦"))
#(":symbols:" 0 1 (:unicode "🔣"))
#(":heavy_plus_sign:" 0 1 (:unicode ""))
#(":heavy_minus_sign:" 0 1 (:unicode ""))
#(":wavy_dash:" 0 1 (:unicode ""))
#(":heavy_division_sign:" 0 1 (:unicode ""))
#(":heavy_multiplication_x:" 0 1 (:unicode "✖️"))
#(":heavy_check_mark:" 0 1 (:unicode "✔️"))
#(":arrows_clockwise:" 0 1 (:unicode "🔃"))
#(":trademark:" 0 1 (:unicode ""))
#(":copyright:" 0 1 (:unicode "©"))
#(":registered:" 0 1 (:unicode "®"))
#(":currency_exchange:" 0 1 (:unicode "💱"))
#(":heavy_dollar_sign:" 0 1 (:unicode "💲"))
#(":curly_loop:" 0 1 (:unicode ""))
#(":loop:" 0 1 (:unicode ""))
#(":part_alternation_mark:" 0 1 (:unicode "〽️"))
#(":heavy_exclamation_mark:" 0 1 (:unicode ""))
#(":question:" 0 1 (:unicode ""))
#(":grey_exclamation:" 0 1 (:unicode ""))
#(":grey_question:" 0 1 (:unicode ""))
#(":double_exclamation_mark:" 0 1 (:unicode "‼️"))
#(":interrobang:" 0 1 (:unicode "⁉️"))
#(":x:" 0 1 (:unicode "️❌"))
#(":o:" 0 1 (:unicode ""))
#(":100:" 0 1 (:unicode "💯"))
#(":end:" 0 1 (:unicode "🔚"))
#(":back:" 0 1 (:unicode "🔙"))
#(":on:" 0 1 (:unicode "🔛"))
#(":top:" 0 1 (:unicode "🔝"))
#(":soon:" 0 1 (:unicode "🔜"))
#(":cyclone:" 0 1 (:unicode "🌀"))
#(":m:" 0 1 (:unicode "Ⓜ️"))
#(":ophiuchus:" 0 1 (:unicode ""))
#(":six_pointed_star:" 0 1 (:unicode "🔯"))
#(":beginner:" 0 1 (:unicode "🔰"))
#(":trident:" 0 1 (:unicode "🔱"))
#(":warning:" 0 1 (:unicode "⚠️"))
#(":hotsprings:" 0 1 (:unicode "♨️"))
#(":recycle:" 0 1 (:unicode "♻️"))
#(":anger:" 0 1 (:unicode "💢"))
#(":diamond_shape_with_a_dot_inside:" 0 1 (:unicode "💠"))
#(":spades:" 0 1 (:unicode "♠️"))
#(":clubs:" 0 1 (:unicode "♣️"))
#(":hearts:" 0 1 (:unicode "♥️"))
#(":diamonds:" 0 1 (:unicode "♦️"))
#(":ballot_box_with_check:" 0 1 (:unicode "☑️"))
#(":white_circle:" 0 1 (:unicode ""))
#(":black_circle:" 0 1 (:unicode ""))
#(":radio_button:" 0 1 (:unicode "🔘"))
#(":red_circle:" 0 1 (:unicode "🔴"))
#(":large_blue_circle:" 0 1 (:unicode "🔵"))
#(":small_red_triangle:" 0 1 (:unicode "🔺"))
#(":small_red_triangle_down:" 0 1 (:unicode "🔻"))
#(":small_orange_diamond:" 0 1 (:unicode "🔸"))
#(":small_blue_diamond:" 0 1 (:unicode "🔹"))
#(":large_orange_diamond:" 0 1 (:unicode "🔶"))
#(":large_blue_diamond:" 0 1 (:unicode "🔷"))
#(":black_small_square:" 0 1 (:unicode "▪️"))
#(":white_small_square:" 0 1 (:unicode "▫️"))
#(":black_large_square:" 0 1 (:unicode "⬛️"))
#(":white_large_square:" 0 1 (:unicode "⬜️"))
#(":black_medium_square:" 0 1 (:unicode "◼️"))
#(":white_medium_square:" 0 1 (:unicode "◻️"))
#(":black_medium_small_square:" 0 1 (:unicode "◾️"))
#(":white_medium_small_square:" 0 1 (:unicode "◽️"))
#(":black_square_button:" 0 1 (:unicode "🔲"))
#(":white_square_button:" 0 1 (:unicode "🔳"))
#(":clock1:" 0 1 (:unicode "🕐"))
#(":clock2:" 0 1 (:unicode "🕑"))
#(":clock3:" 0 1 (:unicode "🕒"))
#(":clock4:" 0 1 (:unicode "🕓"))
#(":clock5:" 0 1 (:unicode "🕔"))
#(":clock6:" 0 1 (:unicode "🕕"))
#(":clock7:" 0 1 (:unicode "🕖"))
#(":clock8:" 0 1 (:unicode "🕗"))
#(":clock9:" 0 1 (:unicode "🕘"))
#(":clock10:" 0 1 (:unicode "🕙"))
#(":clock11:" 0 1 (:unicode "🕚"))
#(":clock12:" 0 1 (:unicode "🕛"))
#(":clock130:" 0 1 (:unicode "🕜"))
#(":clock230:" 0 1 (:unicode "🕝"))
#(":clock330:" 0 1 (:unicode "🕞"))
#(":clock430:" 0 1 (:unicode "🕟"))
#(":clock530:" 0 1 (:unicode "🕠"))
#(":clock630:" 0 1 (:unicode "🕡"))
#(":clock730:" 0 1 (:unicode "🕢"))
#(":clock830:" 0 1 (:unicode "🕣"))
#(":clock930:" 0 1 (:unicode "🕤"))
#(":clock1030:" 0 1 (:unicode "🕥"))
#(":clock1130:" 0 1 (:unicode "🕦"))
#(":clock1230:" 0 1 (:unicode "🕧"))
#(":skin-tone-1:" 0 1 (:unicode "🏿"))
#(":skin-tone-2:" 0 1 (:unicode "🏾"))
#(":skin-tone-3:" 0 1 (:unicode "🏽"))
#(":skin-tone-4:" 0 1 (:unicode "🏼"))
#(":skin-tone-5:" 0 1 (:unicode "🏻"))
#(":slightly-smiling-face:" 0 1 (:unicode "🙂"))
#(":hugging-face:" 0 1 (:unicode "🤗"))
#(":thinking-face:" 0 1 (:unicode "🤔"))
#(":face-with-rolling-eyes:" 0 1 (:unicode "🙄"))
#(":zipper-mouth-face:" 0 1 (:unicode "🤐"))
#(":nerd-face:" 0 1 (:unicode "🤓"))
#(":white-frowning-face:" 0 1 (:unicode "☹️"))
#(":slightly-frowning-face:" 0 1 (:unicode "🙁"))
#(":upside-down-face:" 0 1 (:unicode "🙃"))
#(":face-with-thermometer:" 0 1 (:unicode "🤒"))
#(":face-with-head-bandage:" 0 1 (:unicode "🤕"))
#(":money-mouth-face:" 0 1 (:unicode "🤑"))
#(":helmet-with-white-cross:" 0 1 (:unicode ""))
#(":sleuth-or-spy:" 0 1 (:unicode "🕵"))
#(":speaking-head-in-silhouette:" 0 1 (:unicode "🗣"))
#(":man-in-business-suit-levitating:" 0 1 (:unicode "🕴"))
#(":reversed-hand-with-middle-finger-extended:" 0 1 (:unicode "🖕"))
#(":sign-of-the-horns:" 0 1 (:unicode "🤘"))
#(":raised-hand-with-fingers-splayed:" 0 1 (:unicode "🖐"))
#(":writing-hand:" 0 1 (:unicode ""))
#(":eye:" 0 1 (:unicode "👁"))
#(":heavy-heart-exclamation-mark-ornament:" 0 1 (:unicode ""))
#(":hole:" 0 1 (:unicode "🕳"))
#(":right-anger-bubble:" 0 1 (:unicode "🗯"))
#(":dark-sunglasses:" 0 1 (:unicode "🕶"))
#(":shopping-bags:" 0 1 (:unicode "🛍"))
#(":prayer-beads:" 0 1 (:unicode "📿"))
#(":skull-and-crossbones:" 0 1 (:unicode ""))
#(":robot-face:" 0 1 (:unicode "🤖"))
#(":lion-face:" 0 1 (:unicode "🦁"))
#(":unicorn-face:" 0 1 (:unicode "🦄"))
#(":chipmunk:" 0 1 (:unicode "🐿"))
#(":turkey:" 0 1 (:unicode "🦃"))
#(":dove-of-peace:" 0 1 (:unicode "🕊"))
#(":crab:" 0 1 (:unicode "🦀"))
#(":spider:" 0 1 (:unicode "🕷"))
#(":spider-web:" 0 1 (:unicode "🕸"))
#(":scorpion:" 0 1 (:unicode "🦂"))
#(":rosette:" 0 1 (:unicode "🏵"))
#(":shamrock:" 0 1 (:unicode ""))
#(":hot-pepper:" 0 1 (:unicode "🌶"))
#(":cheese-wedge:" 0 1 (:unicode "🧀"))
#(":hot-dog:" 0 1 (:unicode "🌭"))
#(":taco:" 0 1 (:unicode "🌮"))
#(":burrito:" 0 1 (:unicode "🌯"))
#(":popcorn:" 0 1 (:unicode "🍿"))
#(":bottle-with-popping-cork:" 0 1 (:unicode "🍾"))
#(":fork-and-knife-with-plate:" 0 1 (:unicode "🍽"))
#(":amphora:" 0 1 (:unicode "🏺"))
#(":world-map:" 0 1 (:unicode "🗺"))
#(":snow-capped-mountain:" 0 1 (:unicode "🏔"))
#(":mountain:" 0 1 (:unicode ""))
#(":camping:" 0 1 (:unicode "🏕"))
#(":beach-with-umbrella:" 0 1 (:unicode "🏖"))
#(":desert:" 0 1 (:unicode "🏜"))
#(":desert-island:" 0 1 (:unicode "🏝"))
#(":national-park:" 0 1 (:unicode "🏞"))
#(":stadium:" 0 1 (:unicode "🏟"))
#(":classical-building:" 0 1 (:unicode "🏛"))
#(":building-construction:" 0 1 (:unicode "🏗"))
#(":house-buildings:" 0 1 (:unicode "🏘"))
#(":cityscape:" 0 1 (:unicode "🏙"))
#(":derelict-house-building:" 0 1 (:unicode "🏚"))
#(":place-of-worship:" 0 1 (:unicode "🛐"))
#(":kaaba:" 0 1 (:unicode "🕋"))
#(":mosque:" 0 1 (:unicode "🕌"))
#(":synagogue:" 0 1 (:unicode "🕍"))
#(":frame-with-picture:" 0 1 (:unicode "🖼"))
#(":oil-drum:" 0 1 (:unicode "🛢"))
#(":motorway:" 0 1 (:unicode "🛣"))
#(":railway-track:" 0 1 (:unicode "🛤"))
#(":passenger-ship:" 0 1 (:unicode "🛳"))
#(":ferry:" 0 1 (:unicode ""))
#(":motor-boat:" 0 1 (:unicode "🛥"))
#(":small-airplane:" 0 1 (:unicode "🛩"))
#(":airplane-departure:" 0 1 (:unicode "🛫"))
#(":airplane-arriving:" 0 1 (:unicode "🛬"))
#(":satellite:" 0 1 (:unicode "🛰"))
#(":bellhop-bell:" 0 1 (:unicode "🛎"))
#(":sleeping-accommodation:" 0 1 (:unicode "🛌"))
#(":bed:" 0 1 (:unicode "🛏"))
#(":couch-and-lamp:" 0 1 (:unicode "🛋"))
#(":stopwatch:" 0 1 (:unicode ""))
#(":timer-clock:" 0 1 (:unicode ""))
#(":mantelpiece-clock:" 0 1 (:unicode "🕰"))
#(":thermometer:" 0 1 (:unicode "🌡"))
#(":thunder-cloud-and-rain:" 0 1 (:unicode ""))
#(":white-sun-with-small-cloud:" 0 1 (:unicode "🌤"))
#(":white-sun-behind-cloud:" 0 1 (:unicode "🌥"))
#(":white-sun-behind-cloud-with-rain:" 0 1 (:unicode "🌦"))
#(":cloud-with-rain:" 0 1 (:unicode "🌧"))
#(":cloud-with-snow:" 0 1 (:unicode "🌨"))
#(":cloud-with-lightning:" 0 1 (:unicode "🌩"))
#(":cloud-with-tornado:" 0 1 (:unicode "🌪"))
#(":fog:" 0 1 (:unicode "🌫"))
#(":wind-blowing-face:" 0 1 (:unicode "🌬"))
#(":umbrella:" 0 1 (:unicode ""))
#(":umbrella-on-ground:" 0 1 (:unicode ""))
#(":snowman:" 0 1 (:unicode ""))
#(":comet:" 0 1 (:unicode ""))
#(":menorah-with-nine-branches:" 0 1 (:unicode "🕎"))
#(":military-medal:" 0 1 (:unicode "🎖"))
#(":reminder-ribbon:" 0 1 (:unicode "🎗"))
#(":film-frames:" 0 1 (:unicode "🎞"))
#(":admission-tickets:" 0 1 (:unicode "🎟"))
#(":label:" 0 1 (:unicode "🏷"))
#(":golfer:" 0 1 (:unicode "🏌"))
#(":ice-skate:" 0 1 (:unicode ""))
#(":skier:" 0 1 (:unicode ""))
#(":person-with-ball:" 0 1 (:unicode ""))
#(":weight-lifter:" 0 1 (:unicode "🏋"))
#(":racing-car:" 0 1 (:unicode "🏎"))
#(":racing-motorcycle:" 0 1 (:unicode "🏍"))
#(":sports-medal:" 0 1 (:unicode "🏅"))
#(":cricket-bat-and-ball:" 0 1 (:unicode "🏏"))
#(":volleyball:" 0 1 (:unicode "🏐"))
#(":field-hockey-stick-and-ball:" 0 1 (:unicode "🏑"))
#(":ice-hockey-stick-and-puck:" 0 1 (:unicode "🏒"))
#(":table-tennis-paddle-and-ball:" 0 1 (:unicode "🏓"))
#(":badminton-racquet-and-shuttlecock:" 0 1 (:unicode "🏸"))
#(":joystick:" 0 1 (:unicode "🕹"))
#(":black-right-pointing-double-triangle-with-vertical-bar:" 0 1 (:unicode ""))
#(":black-right-pointing-triangle-with-double-vertical-bar:" 0 1 (:unicode ""))
#(":black-left-pointing-double-triangle-with-vertical-bar:" 0 1 (:unicode ""))
#(":double-vertical-bar:" 0 1 (:unicode ""))
#(":black-square-for-stop:" 0 1 (:unicode ""))
#(":black-circle-for-record:" 0 1 (:unicode ""))
#(":studio-microphone:" 0 1 (:unicode "🎙"))
#(":level-slider:" 0 1 (:unicode "🎚"))
#(":control-knobs:" 0 1 (:unicode "🎛"))
#(":keycap-asterisk" 0 1 (:unicode "*⃣"))
#(":desktop-computer:" 0 1 (:unicode "🖥"))
#(":printer:" 0 1 (:unicode "🖨"))
#(":keyboard:" 0 1 (:unicode ""))
#(":three-button-mouse:" 0 1 (:unicode "🖱"))
#(":trackball:" 0 1 (:unicode "🖲"))
#(":film-projector:" 0 1 (:unicode "📽"))
#(":camera-with-flash:" 0 1 (:unicode "📸"))
#(":candle:" 0 1 (:unicode "🕯"))
#(":rolled-up-newspaper:" 0 1 (:unicode "🗞"))
#(":ballot-box-with-ballot:" 0 1 (:unicode "🗳"))
#(":lower-left-fountain-pen:" 0 1 (:unicode "🖋"))
#(":lower-left-ballpoint-pen:" 0 1 (:unicode "🖊"))
#(":lower-left-paintbrush:" 0 1 (:unicode "🖌"))
#(":lower-left-crayon:" 0 1 (:unicode "🖍"))
#(":card-index-dividers:" 0 1 (:unicode "🗂"))
#(":spiral-note-pad:" 0 1 (:unicode "🗒"))
#(":spiral-calendar-pad:" 0 1 (:unicode "🗓"))
#(":linked-paperclips:" 0 1 (:unicode "🖇"))
#(":card-file-box:" 0 1 (:unicode "🗃"))
#(":file-cabinet:" 0 1 (:unicode "🗄"))
#(":wastebasket:" 0 1 (:unicode "🗑"))
#(":old-key:" 0 1 (:unicode "🗝"))
#(":pick:" 0 1 (:unicode ""))
#(":hammer-and-pick:" 0 1 (:unicode ""))
#(":hammer-and-wrench:" 0 1 (:unicode "🛠"))
#(":gear:" 0 1 (:unicode ""))
#(":compression:" 0 1 (:unicode "🗜"))
#(":alembic:" 0 1 (:unicode ""))
#(":scales:" 0 1 (:unicode ""))
#(":chains:" 0 1 (:unicode ""))
#(":dagger-knife:" 0 1 (:unicode "🗡"))
#(":crossed-swords:" 0 1 (:unicode ""))
#(":shield:" 0 1 (:unicode "🛡"))
#(":bow-and-arrow:" 0 1 (:unicode "🏹"))
#(":coffin:" 0 1 (:unicode ""))
#(":funeral-urn:" 0 1 (:unicode ""))
#(":waving-white-flag:" 0 1 (:unicode "🏳"))
#(":waving-black-flag:" 0 1 (:unicode "🏴"))
#(":fleur-de-lis:" 0 1 (:unicode ""))
#(":atom-symbol:" 0 1 (:unicode ""))
#(":om-symbol:" 0 1 (:unicode "🕉"))
#(":star-of-david:" 0 1 (:unicode ""))
#(":wheel-of-dharma:" 0 1 (:unicode ""))
#(":yin-yang:" 0 1 (:unicode ""))
#(":latin-cross:" 0 1 (:unicode ""))
#(":orthodox-cross:" 0 1 (:unicode ""))
#(":shinto-shrine:" 0 1 (:unicode ""))
#(":star-and-crescent:" 0 1 (:unicode ""))
#(":peace-symbol:" 0 1 (:unicode ""))
#(":radioactive-sign:" 0 1 (:unicode ""))
#(":biohazard-sign:" 0 1 (:unicode ""))
#(":eye-in-speech-bubble:" 0 1 (:unicode "👁‍🗨"))
#(":left-speech-bubble:" 0 1 (:unicode "🗨"))
)
)
(defun company-emoji--annotation (s)
"Return a formatted annotation for completion candidate S."
(format " %s" (get-text-property 0 :unicode s)))
(defun company-emoji--add-aliases (aliases candidates)
"Add the emoji ALIASES to the list of completion CANDIDATES and return the new list."
(dolist (elem aliases candidates)
;; * `aliased` will be nil if the alias alist is somehow
;; malformed—if there's no second element.
;;
;; * `emoji-string` will be nil if the current alias is invalid—if
;; the shortcode that an alias has been assigned to does not
;; correspond to any emoji. For example, if you added (:kermit:
;; . ":toad:") to your list of custom aliases, that would be an
;; invalid assignment since :toad: is not a real shortcode—we
;; only have :frog:. As long as this is a valid alias, then
;; emoji-string is the propertized text that the alias points
;; to; something like #(":imp:" 0 1 (:unicode "👿"))
(let* ((aliased (cdr elem))
(emoji-string (car (member aliased candidates))))
(if (and aliased emoji-string)
;; * `new-item` is what will become a new propertized string
;; that we add to the list of completion candidates. It
;; starts its life as the string version of the current
;; alias; from (:man-woman-boy: . ":family:"), the string
;; assigned to `new-item` would be ":man-woman-boy:"
;;
;; * `unicode` is the unicode character to which we want our
;; alias to point; we retrieve it from `emoji-string`.
(let ((new-item (symbol-name (car elem)))
(unicode (get-text-property 0 :unicode emoji-string)))
;; Propertize the `new-item` string. The string returned
;; from `symbol-name` already seems to have some properties,
;; so overwrite them with `set-text-properties', instead of
;; simply adding a new property with `add-text-property'.
(set-text-properties 0 1 (list ':unicode unicode) new-item)
(setq candidates (cons new-item candidates)))))))
;;;###autoload
(defun company-emoji (command &optional arg &rest ignored)
"Provide a backend for company to complete emoji-words.
company.el calls this function, and passes a COMMAND to it that
depends on the context: 'prefix', 'candidates', 'annotation',
etc. In some contexts it also passes ARG, which is the list of
candidates that match what has been typed so far. Sometimes ARG
is a single candidate, as when COMMAND is 'annotation' or
'post-completion'. Other arguments are IGNORED."
;; First, update the list of candidates by adding the custom
;; aliases:
(let ((emoji-list (company-emoji--add-aliases
company-emoji-aliases
(company-emoji--create-list))))
(cl-case command
;; 'prefix' has too many meanings in emacs lisp but here we're
;; specifying what the string we're completing should begin with
(prefix (company-grab "\:[a-zA-Z0-9-_]*"))
(candidates
;; filter based on what's already been typed
(cl-remove-if-not
(lambda (c) (string-prefix-p arg c))
emoji-list))
;; show the real emoji alongside its name in the completion list
(annotation (company-emoji--annotation arg))
;; when we find the emoji we want, replace it with the real emoji
;; (assuming company-emoji-insert-unicode is set to true)
(post-completion
(if company-emoji-insert-unicode
(progn
(kill-region (- (point) (length arg)) (point))
(insert (get-text-property 0 :unicode arg))))))))
;;;###autoload
(defun company-emoji-init ()
"Add emoji to the company backends."
(interactive)
(add-to-list 'company-backends 'company-emoji))
(provide 'company-emoji)
;;; company-emoji.el ends here