mirror of https://codeberg.org/cage/tinmop/
1045 lines
47 KiB
Common Lisp
1045 lines
47 KiB
Common Lisp
;; tinmop: a multiprotocol client
|
||
;; Copyright © cage
|
||
|
||
;; 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/][http://www.gnu.org/licenses/]].
|
||
|
||
(in-package :emoji-shortcodes)
|
||
|
||
(defparameter *shortcodes-db*
|
||
'((":brown_square:" . "🟫")
|
||
(":purple_square:" . "🟪")
|
||
(":blue_square:" . "🟦")
|
||
(":green_square:" . "🟩")
|
||
(":yellow_square:" . "🟨")
|
||
(":orange_square:" . "🟧")
|
||
(":red_square:" . "🟥")
|
||
(":brown_circle:" . "🟤")
|
||
(":purple_circle:" . "🟣")
|
||
(":green_circle:" . "🟢")
|
||
(":yellow_circle:" . "🟡")
|
||
(":orange_circle:" . "🟠")
|
||
(":razor:" . "🪒")
|
||
(":chair:" . "🪑")
|
||
(":stethoscope:" . "🩺")
|
||
(":bandaid:" . "🩹")
|
||
(":blood_drop:" . "🩸")
|
||
(":probing_cane:" . "🦯")
|
||
(":axe:" . "🪓")
|
||
(":diya_lamp:" . "🪔")
|
||
(":banjo:" . "🪕")
|
||
(":ballet_shoes:" . "🩰")
|
||
(":shorts:" . "🩳")
|
||
(":briefs:" . "🩲")
|
||
(":one_piece_swimsuit:" . "🩱")
|
||
(":sari:" . "🥻")
|
||
(":safety_vest:" . "🦺")
|
||
(":kite:" . "🪁")
|
||
(":yoyo:" . "🪀")
|
||
(":diving_mask:" . "🤿")
|
||
(":ringed_planet:" . "🪐")
|
||
(":parachute:" . "🪂")
|
||
(":auto_rickshaw:" . "🛺")
|
||
(":motor_wheelchair:" . "🦼")
|
||
(":wheelchair:" . "🦽")
|
||
(":hindu_temple:" . "🛕")
|
||
(":ice:" . "🧊")
|
||
(":mate:" . "🧉")
|
||
(":beverage_box:" . "🧃")
|
||
(":oyster:" . "🦪")
|
||
(":butter:" . "🧈")
|
||
(":falafel:" . "🧆")
|
||
(":waffle:" . "🧇")
|
||
(":onion:" . "🧅")
|
||
(":garlic:" . "🧄")
|
||
(":flamingo:" . "🦩")
|
||
(":skunk:" . "🦨")
|
||
(":otter:" . "🦦")
|
||
(":sloth:" . "🦥")
|
||
(":guide_dog:" . "🦮")
|
||
(":orangutan:" . "🦧")
|
||
(":person_kneeling:" . "🧎")
|
||
(":person_standing:" . "🧍")
|
||
(":person_deaf:" . "🧏")
|
||
(":hearing_aid:" . "🦻")
|
||
(":mech_leg:" . "🦿")
|
||
(":mech_arm:" . "🦾")
|
||
(":pinch:" . "🤏")
|
||
(":white_heart:" . "🤍")
|
||
(":brown_heart:" . "🤎")
|
||
(":yawn:" . "🥱")
|
||
(":fire_extinguisher:" . "🧯")
|
||
(":sponge:" . "🧽")
|
||
(":soap:" . "🧼")
|
||
(":toilet_paper:" . "🧻")
|
||
(":basket:" . "🧺")
|
||
(":broom:" . "🧹")
|
||
(":safety_pin:" . "🧷")
|
||
(":lotion:" . "🧴")
|
||
(":dna:" . "🧬")
|
||
(":petri_dish:" . "🧫")
|
||
(":test_tube:" . "🧪")
|
||
(":magnet:" . "🧲")
|
||
(":toolbox:" . "🧰")
|
||
(":receipt:" . "🧾")
|
||
(":abacus:" . "🧮")
|
||
(":flat_shoe:" . "🥿")
|
||
(":hiking_boot:" . "🥾")
|
||
(":lab_coat:" . "🥼")
|
||
(":goggles:" . "🥽")
|
||
(":yarn:" . "🧶")
|
||
(":spool:" . "🧵")
|
||
(":teddy_bear:" . "🧸")
|
||
(":jigsaw:" . "🧩")
|
||
(":nazar_amulet:" . "🧿")
|
||
(":lacrosse:" . "🥍")
|
||
(":flying_disc:" . "🥏")
|
||
(":softball:" . "🥎")
|
||
(":red_envelope:" . "🧧")
|
||
(":firecracker:" . "🧨")
|
||
(":luggage:" . "🧳")
|
||
(":skateboard:" . "🛹")
|
||
(":brick:" . "🧱")
|
||
(":compass:" . "🧭")
|
||
(":cupcake:" . "🧁")
|
||
(":lobster:" . "🦞")
|
||
(":moon_cake:" . "🥮")
|
||
(":salt:" . "🧂")
|
||
(":bagel:" . "🥯")
|
||
(":leafy_green:" . "🥬")
|
||
(":mango:" . "🥭")
|
||
(":microbe:" . "🦠")
|
||
(":mosquito:" . "🦟")
|
||
(":parrot:" . "🦜")
|
||
(":peacock:" . "🦚")
|
||
(":swan:" . "🦢")
|
||
(":badger:" . "🦡")
|
||
(":kangaroo:" . "🦘")
|
||
(":hippo:" . "🦛")
|
||
(":llama:" . "🦙")
|
||
(":raccoon:" . "🦝")
|
||
(":bald:" . "🦲")
|
||
(":white_hair:" . "🦳")
|
||
(":curly_hair:" . "🦱")
|
||
(":red_hair:" . "🦰")
|
||
(":villain:" . "🦹")
|
||
(":hero:" . "🦸")
|
||
(":bone:" . "🦴")
|
||
(":tooth:" . "🦷")
|
||
(":foot:" . "🦶")
|
||
(":leg:" . "🦵")
|
||
(":pleading:" . "🥺")
|
||
(":partying:" . "🥳")
|
||
(":woozy:" . "🥴")
|
||
(":freezing:" . "🥶")
|
||
(":overheating:" . "🥵")
|
||
(":love:" . "🥰")
|
||
(":billed_cap:" . "🧢")
|
||
(":socks:" . "🧦")
|
||
(":coat:" . "🧥")
|
||
(":gloves:" . "🧤")
|
||
(":scarf:" . "🧣")
|
||
(":curling_stone:" . "🥌")
|
||
(":sled:" . "🛷")
|
||
(":flying_saucer:" . "🛸")
|
||
(":chopsticks:" . "🥢")
|
||
(":cup_straw:" . "🥤")
|
||
(":pie:" . "🥧")
|
||
(":takeout_box:" . "🥡")
|
||
(":fortune_cookie:" . "🥠")
|
||
(":dumpling:" . "🥟")
|
||
(":canned_food:" . "🥫")
|
||
(":bowl_spoon:" . "🥣")
|
||
(":sandwich:" . "🥪")
|
||
(":cut_of_meat:" . "🥩")
|
||
(":pretzel:" . "🥨")
|
||
(":broccoli:" . "🥦")
|
||
(":coconut:" . "🥥")
|
||
(":cricket:" . "🦗")
|
||
(":trex:" . "🦖")
|
||
(":sauropod:" . "🦕")
|
||
(":hedgehog:" . "🦔")
|
||
(":giraffe:" . "🦒")
|
||
(":zebra:" . "🦓")
|
||
(":person_lotus_position:" . "🧘")
|
||
(":person_climbing:" . "🧗")
|
||
(":person_steamy_room:" . "🧖")
|
||
(":zombie:" . "🧟")
|
||
(":genie:" . "🧞")
|
||
(":elf:" . "🧝")
|
||
(":merperson:" . "🧜")
|
||
(":vampire:" . "🧛")
|
||
(":fairy:" . "🧚")
|
||
(":mage:" . "🧙")
|
||
(":breast_feeding:" . "🤱")
|
||
(":woman_headscarf:" . "🧕")
|
||
(":older_adult:" . "🧓")
|
||
(":bearded_person:" . "🧔")
|
||
(":adult:" . "🧑")
|
||
(":child:" . "🧒")
|
||
(":brain:" . "🧠")
|
||
(":palms_up:" . "🤲")
|
||
(":love_you_gesture:" . "🤟")
|
||
(":orange_heart:" . "🧡")
|
||
(":censored:" . "🤬")
|
||
(":monocle:" . "🧐")
|
||
(":shocked:" . "🤯")
|
||
(":vomiting:" . "🤮")
|
||
(":contempt:" . "🤨")
|
||
(":shushing:" . "🤫")
|
||
(":gasp:" . "🤭")
|
||
(":crazy:" . "🤪")
|
||
(":starstruck:" . "🤩")
|
||
(":shopping_cart:" . "🛒")
|
||
(":drum:" . "🥁")
|
||
(":goal:" . "🥅")
|
||
(":gi:" . "🥋")
|
||
(":boxing_glove:" . "🥊")
|
||
(":third_place:" . "🥉")
|
||
(":second_place:" . "🥈")
|
||
(":first_place:" . "🥇")
|
||
(":canoe:" . "🛶")
|
||
(":stop_sign:" . "🛑")
|
||
(":scooter:" . "🛴")
|
||
(":motor_scooter:" . "🛵")
|
||
(":spoon:" . "🥄")
|
||
(":tumbler_glass:" . "🥃")
|
||
(":champagne_glass:" . "🥂")
|
||
(":milk:" . "🥛")
|
||
(":squid:" . "🦑")
|
||
(":shrimp:" . "🦐")
|
||
(":salad:" . "🥗")
|
||
(":shallow_pan_of_food:" . "🥘")
|
||
(":egg:" . "🥚")
|
||
(":stuffed_flatbread:" . "🥙")
|
||
(":bacon:" . "🥓")
|
||
(":pancakes:" . "🥞")
|
||
(":french_bread:" . "🥖")
|
||
(":croissant:" . "🥐")
|
||
(":peanuts:" . "🥜")
|
||
(":cucumber:" . "🥒")
|
||
(":carrot:" . "🥕")
|
||
(":potato:" . "🥔")
|
||
(":avocado:" . "🥑")
|
||
(":kiwi:" . "🥝")
|
||
(":wilted_rose:" . "🥀")
|
||
(":butterfly:" . "🦋")
|
||
(":shark:" . "🦈")
|
||
(":lizard:" . "🦎")
|
||
(":owl:" . "🦉")
|
||
(":duck:" . "🦆")
|
||
(":eagle:" . "🦅")
|
||
(":bat:" . "🦇")
|
||
(":rhino:" . "🦏")
|
||
(":deer:" . "🦌")
|
||
(":fox_face:" . "🦊")
|
||
(":gorilla:" . "🦍")
|
||
(":person_juggling:" . "🤹")
|
||
(":person_handball:" . "🤾")
|
||
(":person_water_polo:" . "🤽")
|
||
(":people_wrestling:" . "🤼")
|
||
(":person_cartwheel:" . "🤸")
|
||
(":person_fencing:" . "🤺")
|
||
(":man_dancing:" . "🕺")
|
||
(":mrs_claus:" . "🤶")
|
||
(":pregnant_woman:" . "🤰")
|
||
(":man_tuxedo:" . "🤵")
|
||
(":prince:" . "🤴")
|
||
(":person_shrugging:" . "🤷")
|
||
(":person_facepalming:" . "🤦")
|
||
(":selfie:" . "🤳")
|
||
(":handshake:" . "🤝")
|
||
(":right_facing_fist:" . "🤜")
|
||
(":left_facing_fist:" . "🤛")
|
||
(":call_me:" . "🤙")
|
||
(":fingers_crossed:" . "🤞")
|
||
(":raised_backhand:" . "🤚")
|
||
(":black_heart:" . "🖤")
|
||
(":clown:" . "🤡")
|
||
(":cowboy:" . "🤠")
|
||
(":sneezing:" . "🤧")
|
||
(":nauseated:" . "🤢")
|
||
(":drooling:" . "🤤")
|
||
(":lying:" . "🤥")
|
||
(":entertained:" . "🤣")
|
||
(":black_flag:" . "🏴")
|
||
(":crossed_flags:" . "🎌")
|
||
(":triangle_flag:" . "🚩")
|
||
(":checkered_flag:" . "🏁")
|
||
(":black_square_button:" . "🔲")
|
||
(":white_square_button:" . "🔳")
|
||
(":radio_button:" . "🔘")
|
||
(":diamond_dot:" . "💠")
|
||
(":down_red_triangle:" . "🔻")
|
||
(":up_red_triangle:" . "🔺")
|
||
(":small_blue_diamond:" . "🔹")
|
||
(":small_orange_diamond:" . "🔸")
|
||
(":large_blue_diamond:" . "🔷")
|
||
(":large_orange_diamond:" . "🔶")
|
||
(":blue_circle:" . "🔵")
|
||
(":red_circle:" . "🔴")
|
||
(":ja_no_vacancy:" . "🈵")
|
||
(":ja_open_for_business:" . "🈺")
|
||
(":ja_vacancy:" . "🈳")
|
||
(":ja_passing_grade:" . "🈴")
|
||
(":ja_application:" . "🈸")
|
||
(":ja_acceptable:" . "🉑")
|
||
(":ja_prohibited:" . "🈲")
|
||
(":ja_discount:" . "🈹")
|
||
(":ja_bargain:" . "🉐")
|
||
(":ja_not_free_of_carge:" . "🈶")
|
||
(":ja_here:" . "🈁")
|
||
(":vs:" . "🆚")
|
||
(":up:" . "🆙")
|
||
(":sos:" . "🆘")
|
||
(":ok:" . "🆗")
|
||
(":ng:" . "🆖")
|
||
(":new:" . "🆕")
|
||
(":id:" . "🆔")
|
||
(":free:" . "🆓")
|
||
(":cool:" . "🆒")
|
||
(":cl:" . "🆑")
|
||
(":ab_blood:" . "🆎")
|
||
(":abc:" . "🔤")
|
||
(":symbols:" . "🔣")
|
||
(":1234:" . "🔢")
|
||
(":abcd:" . "🔡")
|
||
(":upper_abcd:" . "🔠")
|
||
(":ten:" . "🔟")
|
||
(":white_exclamation:" . "❕")
|
||
(":white_question:" . "❔")
|
||
(":double_curly_loop:" . "➿")
|
||
(":curly_loop:" . "➰")
|
||
(":division:" . "➗")
|
||
(":minus:" . "➖")
|
||
(":plus:" . "➕")
|
||
(":cross_mark_button:" . "❎")
|
||
(":x:" . "❌")
|
||
(":white_check_mark:" . "✅")
|
||
(":ja_beginner:" . "🔰")
|
||
(":name_badge:" . "📛")
|
||
(":trident:" . "🔱")
|
||
(":mobile_phone_off:" . "📴")
|
||
(":vibration_mode:" . "📳")
|
||
(":signal_strength:" . "📶")
|
||
(":bright:" . "🔆")
|
||
(":dim:" . "🔅")
|
||
(":cinema:" . "🎦")
|
||
(":fast_down_button:" . "⏬")
|
||
(":down_button:" . "🔽")
|
||
(":fast_up_button:" . "⏫")
|
||
(":up_button:" . "🔼")
|
||
(":repeat_single:" . "🔂")
|
||
(":repeat:" . "🔁")
|
||
(":shuffle:" . "🔀")
|
||
(":ophiuchus:" . "⛎")
|
||
(":six_pointed_star:" . "🔯")
|
||
(":menorah:" . "🕎")
|
||
(":place_of_worship:" . "🛐")
|
||
(":top:" . "🔝")
|
||
(":soon:" . "🔜")
|
||
(":on:" . "🔛")
|
||
(":end:" . "🔚")
|
||
(":back:" . "🔙")
|
||
(":counter_clockwise:" . "🔄")
|
||
(":clockwise:" . "🔃")
|
||
(":underage:" . "🔞")
|
||
(":no_mobile_phones:" . "📵")
|
||
(":no_pedestrians:" . "🚷")
|
||
(":non_potable_water:" . "🚱")
|
||
(":do_not_litter:" . "🚯")
|
||
(":no_bicycles:" . "🚳")
|
||
(":no_entry_sign:" . "🚫")
|
||
(":children_crossing:" . "🚸")
|
||
(":left_luggage:" . "🛅")
|
||
(":baggage_claim:" . "🛄")
|
||
(":customs:" . "🛃")
|
||
(":passport_control:" . "🛂")
|
||
(":wc:" . "🚾")
|
||
(":restroom:" . "🚻")
|
||
(":potable_water:" . "🚰")
|
||
(":litter_bin:" . "🚮")
|
||
(":atm:" . "🏧")
|
||
(":moai:" . "🗿")
|
||
(":cigarette:" . "🚬")
|
||
(":bathtub:" . "🛁")
|
||
(":shower:" . "🚿")
|
||
(":toilet:" . "🚽")
|
||
(":door:" . "🚪")
|
||
(":pill:" . "💊")
|
||
(":syringe:" . "💉")
|
||
(":satellite_antenna:" . "📡")
|
||
(":telescope:" . "🔭")
|
||
(":microscope:" . "🔬")
|
||
(":link:" . "🔗")
|
||
(":nut_and_bolt:" . "🔩")
|
||
(":wrench:" . "🔧")
|
||
(":bow:" . "🏹")
|
||
(":gun:" . "🔫")
|
||
(":hammer:" . "🔨")
|
||
(":key:" . "🔑")
|
||
(":locked_key:" . "🔐")
|
||
(":locked_pen:" . "🔏")
|
||
(":triangular_ruler:" . "📐")
|
||
(":straight_ruler:" . "📏")
|
||
(":paperclip:" . "📎")
|
||
(":round_pushpin:" . "📍")
|
||
(":pushpin:" . "📌")
|
||
(":bar_chart:" . "📊")
|
||
(":chart_down:" . "📉")
|
||
(":chart_up:" . "📈")
|
||
(":card_index:" . "📇")
|
||
(":torn_calendar:" . "📆")
|
||
(":date:" . "📅")
|
||
(":open_file_folder:" . "📂")
|
||
(":file_folder:" . "📁")
|
||
(":briefcase:" . "💼")
|
||
(":memo:" . "📝")
|
||
(":postbox:" . "📮")
|
||
(":envelope_arrow:" . "📩")
|
||
(":incoming_envelope:" . "📨")
|
||
(":email:" . "📧")
|
||
(":dollar_sign:" . "💲")
|
||
(":currency_exchange:" . "💱")
|
||
(":ja_chart:" . "💹")
|
||
(":money_wings:" . "💸")
|
||
(":pound:" . "💷")
|
||
(":euro:" . "💶")
|
||
(":dollar:" . "💵")
|
||
(":yen:" . "💴")
|
||
(":bookmark:" . "🔖")
|
||
(":bookmark_tabs:" . "📑")
|
||
(":newspaper:" . "📰")
|
||
(":page_facing_up:" . "📄")
|
||
(":scroll:" . "📜")
|
||
(":page_curl:" . "📃")
|
||
(":ledger:" . "📒")
|
||
(":notebook:" . "📓")
|
||
(":orange_book:" . "📙")
|
||
(":blue_book:" . "📘")
|
||
(":green_book:" . "📗")
|
||
(":book:" . "📖")
|
||
(":closed_book:" . "📕")
|
||
(":decorative_notebook:" . "📔")
|
||
(":red_lantern:" . "🏮")
|
||
(":flashlight:" . "🔦")
|
||
(":bulb:" . "💡")
|
||
(":mag_right:" . "🔎")
|
||
(":vhs:" . "📼")
|
||
(":camera_flash:" . "📸")
|
||
(":movie_camera:" . "🎥")
|
||
(":dvd:" . "📀")
|
||
(":floppy_disk:" . "💾")
|
||
(":minidisc:" . "💽")
|
||
(":electric_plug:" . "🔌")
|
||
(":battery:" . "🔋")
|
||
(":fax:" . "📠")
|
||
(":telephone_receiver:" . "📞")
|
||
(":mobile_calling:" . "📲")
|
||
(":mobile:" . "📱")
|
||
(":violin:" . "🎻")
|
||
(":trumpet:" . "🎺")
|
||
(":musical_keyboard:" . "🎹")
|
||
(":guitar:" . "🎸")
|
||
(":saxophone:" . "🎷")
|
||
(":microphone:" . "🎤")
|
||
(":musical_notes:" . "🎶")
|
||
(":musical_note:" . "🎵")
|
||
(":musical_score:" . "🎼")
|
||
(":no_bell:" . "🔕")
|
||
(":bell:" . "🔔")
|
||
(":postal_horn:" . "📯")
|
||
(":megaphone:" . "📣")
|
||
(":loudspeaker:" . "📢")
|
||
(":loud_sound:" . "🔊")
|
||
(":sound:" . "🔉")
|
||
(":mute:" . "🔇")
|
||
(":gem:" . "💎")
|
||
(":ring:" . "💍")
|
||
(":lipstick:" . "💄")
|
||
(":prayer_beads:" . "📿")
|
||
(":top_hat:" . "🎩")
|
||
(":womans_hat:" . "👒")
|
||
(":crown:" . "👑")
|
||
(":womans_boot:" . "👢")
|
||
(":womans_sandal:" . "👡")
|
||
(":high_heel:" . "👠")
|
||
(":sneaker:" . "👟")
|
||
(":dress_shoe:" . "👞")
|
||
(":backpack:" . "🎒")
|
||
(":pouch:" . "👝")
|
||
(":handbag:" . "👜")
|
||
(":purse:" . "👛")
|
||
(":blouse:" . "👚")
|
||
(":bikini:" . "👙")
|
||
(":kimono:" . "👘")
|
||
(":dress:" . "👗")
|
||
(":jeans:" . "👖")
|
||
(":shirt:" . "👕")
|
||
(":necktie:" . "👔")
|
||
(":art:" . "🎨")
|
||
(":flower_cards:" . "🎴")
|
||
(":black_joker:" . "🃏")
|
||
(":game_die:" . "🎲")
|
||
(":slot_machine:" . "🎰")
|
||
(":crystal_ball:" . "🔮")
|
||
(":8ball:" . "🎱")
|
||
(":dart:" . "🎯")
|
||
(":ski:" . "🎿")
|
||
(":running_shirt:" . "🎽")
|
||
(":fishing_pole:" . "🎣")
|
||
(":badminton:" . "🏸")
|
||
(":ping_pong:" . "🏓")
|
||
(":hockey:" . "🏒")
|
||
(":field_hockey:" . "🏑")
|
||
(":cricket_game:" . "🏏")
|
||
(":bowling:" . "🎳")
|
||
(":tennis:" . "🎾")
|
||
(":rugby:" . "🏉")
|
||
(":football:" . "🏈")
|
||
(":volleyball:" . "🏐")
|
||
(":basketball:" . "🏀")
|
||
(":medal:" . "🏅")
|
||
(":ticket:" . "🎫")
|
||
(":gift:" . "🎁")
|
||
(":ribbon:" . "🎀")
|
||
(":moon_ceremony:" . "🎑")
|
||
(":wind_chime:" . "🎐")
|
||
(":carp_streamer:" . "🎏")
|
||
(":dolls:" . "🎎")
|
||
(":bamboo:" . "🎍")
|
||
(":tanabata_tree:" . "🎋")
|
||
(":confetti_ball:" . "🎊")
|
||
(":tada:" . "🎉")
|
||
(":balloon:" . "🎈")
|
||
(":sparkles:" . "✨")
|
||
(":sparkler:" . "🎇")
|
||
(":fireworks:" . "🎆")
|
||
(":christmas_tree:" . "🎄")
|
||
(":jack_o_lantern:" . "🎃")
|
||
(":ocean:" . "🌊")
|
||
(":droplet:" . "💧")
|
||
(":fire:" . "🔥")
|
||
(":closed_umbrella:" . "🌂")
|
||
(":rainbow:" . "🌈")
|
||
(":cyclone:" . "🌀")
|
||
(":milky_way:" . "🌌")
|
||
(":star3:" . "🌠")
|
||
(":star2:" . "🌟")
|
||
(":sun_face:" . "🌞")
|
||
(":full_moon_face:" . "🌝")
|
||
(":first_quarter_moon_face:" . "🌛")
|
||
(":new_moon_face:" . "🌚")
|
||
(":crescent_moon:" . "🌙")
|
||
(":waning_crescent_moon:" . "🌘")
|
||
(":last_quarter_moon:" . "🌗")
|
||
(":waning_gibbous_moon:" . "🌖")
|
||
(":waxing_gibbous_moon:" . "🌔")
|
||
(":first_quarter_moon:" . "🌓")
|
||
(":waxing_crescent_moon:" . "🌒")
|
||
(":new_moon:" . "🌑")
|
||
(":alarm_clock:" . "⏰")
|
||
(":rocket:" . "🚀")
|
||
(":aerial_tramway:" . "🚡")
|
||
(":mountain_cableway:" . "🚠")
|
||
(":suspension_railway:" . "🚟")
|
||
(":helicopter:" . "🚁")
|
||
(":seat:" . "💺")
|
||
(":airplane_arriving:" . "🛬")
|
||
(":airplane_departure:" . "🛫")
|
||
(":ship:" . "🚢")
|
||
(":speedboat:" . "🚤")
|
||
(":construction:" . "🚧")
|
||
(":vertical_traffic_light:" . "🚦")
|
||
(":traffic_light:" . "🚥")
|
||
(":rotating_light:" . "🚨")
|
||
(":bus_stop:" . "🚏")
|
||
(":tractor:" . "🚜")
|
||
(":lorry:" . "🚛")
|
||
(":truck:" . "🚚")
|
||
(":blue_car:" . "🚙")
|
||
(":red_car:" . "🚗")
|
||
(":oncoming_taxi:" . "🚖")
|
||
(":taxi:" . "🚕")
|
||
(":police_car:" . "🚓")
|
||
(":fire_engine:" . "🚒")
|
||
(":minibus:" . "🚐")
|
||
(":trolleybus:" . "🚎")
|
||
(":bus:" . "🚌")
|
||
(":tram_car:" . "🚋")
|
||
(":mountain_railway:" . "🚞")
|
||
(":monorail:" . "🚝")
|
||
(":tram:" . "🚊")
|
||
(":station:" . "🚉")
|
||
(":light_rail:" . "🚈")
|
||
(":train:" . "🚆")
|
||
(":bullettrain:" . "🚅")
|
||
(":bullettrain_side:" . "🚄")
|
||
(":railway_car:" . "🚃")
|
||
(":steam_locomotive:" . "🚂")
|
||
(":circus_tent:" . "🎪")
|
||
(":barber:" . "💈")
|
||
(":roller_coaster:" . "🎢")
|
||
(":ferris_wheel:" . "🎡")
|
||
(":carousel_horse:" . "🎠")
|
||
(":bridge_at_night:" . "🌉")
|
||
(":sunset:" . "🌇")
|
||
(":dusk:" . "🌆")
|
||
(":sunrise:" . "🌅")
|
||
(":sunrise_over_mountains:" . "🌄")
|
||
(":night_stars:" . "🌃")
|
||
(":foggy:" . "🌁")
|
||
(":kaaba:" . "🕋")
|
||
(":synagogue:" . "🕍")
|
||
(":mosque:" . "🕌")
|
||
(":statue_of_liberty:" . "🗽")
|
||
(":tokyo_tower:" . "🗼")
|
||
(":wedding:" . "💒")
|
||
(":castle:" . "🏰")
|
||
(":japanese_castle:" . "🏯")
|
||
(":department_store:" . "🏬")
|
||
(":school:" . "🏫")
|
||
(":convenience_store:" . "🏪")
|
||
(":love_hotel:" . "🏩")
|
||
(":hotel:" . "🏨")
|
||
(":bank:" . "🏦")
|
||
(":hospital:" . "🏥")
|
||
(":post_office:" . "🏤")
|
||
(":ja_post_office:" . "🏣")
|
||
(":office:" . "🏢")
|
||
(":house_garden:" . "🏡")
|
||
(":mount_fuji:" . "🗻")
|
||
(":volcano:" . "🌋")
|
||
(":japan:" . "🗾")
|
||
(":globe:" . "🌐")
|
||
(":amphora:" . "🏺")
|
||
(":knife:" . "🔪")
|
||
(":utensils:" . "🍴")
|
||
(":beers:" . "🍻")
|
||
(":beer:" . "🍺")
|
||
(":tropical_drink:" . "🍹")
|
||
(":wine_glass:" . "🍷")
|
||
(":champagne:" . "🍾")
|
||
(":sake:" . "🍶")
|
||
(":tea:" . "🍵")
|
||
(":baby_bottle:" . "🍼")
|
||
(":honey_pot:" . "🍯")
|
||
(":custard:" . "🍮")
|
||
(":lollipop:" . "🍭")
|
||
(":candy:" . "🍬")
|
||
(":chocolate_bar:" . "🍫")
|
||
(":cake:" . "🍰")
|
||
(":birthday:" . "🎂")
|
||
(":cookie:" . "🍪")
|
||
(":doughnut:" . "🍩")
|
||
(":ice_cream:" . "🍨")
|
||
(":shaved_ice:" . "🍧")
|
||
(":icecream:" . "🍦")
|
||
(":crab:" . "🦀")
|
||
(":dango:" . "🍡")
|
||
(":fish_cake:" . "🍥")
|
||
(":fried_shrimp:" . "🍤")
|
||
(":sushi:" . "🍣")
|
||
(":oden:" . "🍢")
|
||
(":sweet_potato:" . "🍠")
|
||
(":spaghetti:" . "🍝")
|
||
(":ramen:" . "🍜")
|
||
(":curry:" . "🍛")
|
||
(":rice:" . "🍚")
|
||
(":rice_ball:" . "🍙")
|
||
(":rice_cracker:" . "🍘")
|
||
(":bento:" . "🍱")
|
||
(":popcorn:" . "🍿")
|
||
(":stew:" . "🍲")
|
||
(":cooking:" . "🍳")
|
||
(":burrito:" . "🌯")
|
||
(":taco:" . "🌮")
|
||
(":hotdog:" . "🌭")
|
||
(":pizza:" . "🍕")
|
||
(":fries:" . "🍟")
|
||
(":hamburger:" . "🍔")
|
||
(":poultry_leg:" . "🍗")
|
||
(":meat_on_bone:" . "🍖")
|
||
(":cheese:" . "🧀")
|
||
(":bread:" . "🍞")
|
||
(":chestnut:" . "🌰")
|
||
(":mushroom:" . "🍄")
|
||
(":corn:" . "🌽")
|
||
(":eggplant:" . "🍆")
|
||
(":tomato:" . "🍅")
|
||
(":strawberry:" . "🍓")
|
||
(":cherries:" . "🍒")
|
||
(":peach:" . "🍑")
|
||
(":pear:" . "🍐")
|
||
(":green_apple:" . "🍏")
|
||
(":apple:" . "🍎")
|
||
(":pineapple:" . "🍍")
|
||
(":banana:" . "🍌")
|
||
(":lemon:" . "🍋")
|
||
(":tangerine:" . "🍊")
|
||
(":watermelon:" . "🍉")
|
||
(":melon:" . "🍈")
|
||
(":grapes:" . "🍇")
|
||
(":leaves:" . "🍃")
|
||
(":fallen_leaf:" . "🍂")
|
||
(":maple_leaf:" . "🍁")
|
||
(":four_leaf_clover:" . "🍀")
|
||
(":herb:" . "🌿")
|
||
(":ear_of_rice:" . "🌾")
|
||
(":cactus:" . "🌵")
|
||
(":palm_tree:" . "🌴")
|
||
(":deciduous_tree:" . "🌳")
|
||
(":evergreen_tree:" . "🌲")
|
||
(":seedling:" . "🌱")
|
||
(":tulip:" . "🌷")
|
||
(":blossom:" . "🌼")
|
||
(":sunflower:" . "🌻")
|
||
(":hibiscus:" . "🌺")
|
||
(":rose:" . "🌹")
|
||
(":white_flower:" . "💮")
|
||
(":cherry_blossom:" . "🌸")
|
||
(":bouquet:" . "💐")
|
||
(":scorpion:" . "🦂")
|
||
(":beetle:" . "🐞")
|
||
(":bee:" . "🐝")
|
||
(":ant:" . "🐜")
|
||
(":bug:" . "🐛")
|
||
(":snail:" . "🐌")
|
||
(":shell:" . "🐚")
|
||
(":octopus:" . "🐙")
|
||
(":blowfish:" . "🐡")
|
||
(":tropical_fish:" . "🐠")
|
||
(":dolphin:" . "🐬")
|
||
(":whale:" . "🐋")
|
||
(":spouting_whale:" . "🐳")
|
||
(":dragon:" . "🐉")
|
||
(":dragon_face:" . "🐲")
|
||
(":snake:" . "🐍")
|
||
(":turtle:" . "🐢")
|
||
(":crocodile:" . "🐊")
|
||
(":frog_face:" . "🐸")
|
||
(":penguin:" . "🐧")
|
||
(":hatched_chick:" . "🐥")
|
||
(":baby_chick:" . "🐤")
|
||
(":hatching_chick:" . "🐣")
|
||
(":rooster:" . "🐓")
|
||
(":chicken:" . "🐔")
|
||
(":turkey:" . "🦃")
|
||
(":feet:" . "🐾")
|
||
(":panda_face:" . "🐼")
|
||
(":koala_face:" . "🐨")
|
||
(":bear_face:" . "🐻")
|
||
(":rabbit:" . "🐇")
|
||
(":rabbit_face:" . "🐰")
|
||
(":hamster_face:" . "🐹")
|
||
(":rat:" . "🐀")
|
||
(":mouse:" . "🐁")
|
||
(":mouse_face:" . "🐭")
|
||
(":elephant:" . "🐘")
|
||
(":two_hump_camel:" . "🐫")
|
||
(":camel:" . "🐪")
|
||
(":goat:" . "🐐")
|
||
(":sheep:" . "🐑")
|
||
(":ram:" . "🐏")
|
||
(":pig_nose:" . "🐽")
|
||
(":boar:" . "🐗")
|
||
(":pig:" . "🐖")
|
||
(":pig_face:" . "🐷")
|
||
(":cow:" . "🐄")
|
||
(":water_buffalo:" . "🐃")
|
||
(":ox:" . "🐂")
|
||
(":cow_face:" . "🐮")
|
||
(":unicorn_face:" . "🦄")
|
||
(":horse:" . "🐎")
|
||
(":horse_face:" . "🐴")
|
||
(":leopard:" . "🐆")
|
||
(":tiger:" . "🐅")
|
||
(":tiger_face:" . "🐯")
|
||
(":lion_face:" . "🦁")
|
||
(":cat_face:" . "🐱")
|
||
(":wolf_face:" . "🐺")
|
||
(":poodle:" . "🐩")
|
||
(":dog_face:" . "🐶")
|
||
(":monkey:" . "🐒")
|
||
(":monkey_face:" . "🐵")
|
||
(":tone_dark:" . "🏿")
|
||
(":tone_medium_dark:" . "🏾")
|
||
(":tone_medium:" . "🏽")
|
||
(":tone_medium_light:" . "🏼")
|
||
(":tone_light:" . "🏻")
|
||
(":footprints:" . "👣")
|
||
(":busts_silhouette:" . "👥")
|
||
(":bust_silhouette:" . "👤")
|
||
(":couple_heart:" . "💑")
|
||
(":couple:" . "💏")
|
||
(":holding_hands_mm:" . "👬")
|
||
(":holding_hands_mw:" . "👫")
|
||
(":holding_hands_ww:" . "👭")
|
||
(":in_bed:" . "🛌")
|
||
(":bath:" . "🛀")
|
||
(":person_mountain_biking:" . "🚵")
|
||
(":person_biking:" . "🚴")
|
||
(":person_rowing_boat:" . "🚣")
|
||
(":horse_racing:" . "🏇")
|
||
(":people_bunny_ears_partying:" . "👯")
|
||
(":dancer:" . "💃")
|
||
(":person_running:" . "🏃")
|
||
(":person_walking:" . "🚶")
|
||
(":person_getting_haircut:" . "💇")
|
||
(":person_getting_massage:" . "💆")
|
||
(":santa:" . "🎅")
|
||
(":baby_angel:" . "👼")
|
||
(":bride_veil:" . "👰")
|
||
(":man_chinese_cap:" . "👲")
|
||
(":person_turban:" . "👳")
|
||
(":princess:" . "👸")
|
||
(":construction_worker:" . "👷")
|
||
(":guard:" . "💂")
|
||
(":police_officer:" . "👮")
|
||
(":person_bowing:" . "🙇")
|
||
(":person_raising_hand:" . "🙋")
|
||
(":person_tipping_hand:" . "💁")
|
||
(":person_gesturing_ok:" . "🙆")
|
||
(":person_gesturing_no:" . "🙅")
|
||
(":person_pouting:" . "🙎")
|
||
(":person_frowning:" . "🙍")
|
||
(":older_woman:" . "👵")
|
||
(":older_man:" . "👴")
|
||
(":woman:" . "👩")
|
||
(":man:" . "👨")
|
||
(":blond_person:" . "👱")
|
||
(":girl:" . "👧")
|
||
(":boy:" . "👦")
|
||
(":baby:" . "👶")
|
||
(":lips:" . "👄")
|
||
(":tongue:" . "👅")
|
||
(":eyes:" . "👀")
|
||
(":nose:" . "👃")
|
||
(":muscle:" . "💪")
|
||
(":nail_care:" . "💅")
|
||
(":pray:" . "🙏")
|
||
(":open_hands:" . "👐")
|
||
(":raised_hands:" . "🙌")
|
||
(":clap:" . "👏")
|
||
(":punch:" . "👊")
|
||
(":fist:" . "✊")
|
||
(":middle_finger:" . "🖕")
|
||
(":metal:" . "🤘")
|
||
(":ok_hand:" . "👌")
|
||
(":vulcan:" . "🖖")
|
||
(":raised_hand:" . "✋")
|
||
(":wave:" . "👋")
|
||
(":zzz:" . "💤")
|
||
(":thought:" . "💭")
|
||
(":speech:" . "💬")
|
||
(":dash:" . "💨")
|
||
(":sweat_drops:" . "💦")
|
||
(":dizzy_star:" . "💫")
|
||
(":boom:" . "💥")
|
||
(":anger:" . "💢")
|
||
(":100:" . "💯")
|
||
(":purple_heart:" . "💜")
|
||
(":blue_heart:" . "💙")
|
||
(":green_heart:" . "💚")
|
||
(":yellow_heart:" . "💛")
|
||
(":broken_heart:" . "💔")
|
||
(":heart_decoration:" . "💟")
|
||
(":two_hearts:" . "💕")
|
||
(":revolving_hearts:" . "💞")
|
||
(":heartbeat:" . "💓")
|
||
(":heartpulse:" . "💗")
|
||
(":sparkling_heart:" . "💖")
|
||
(":heart_ribbon:" . "💝")
|
||
(":cupid:" . "💘")
|
||
(":love_letter:" . "💌")
|
||
(":kiss_lips:" . "💋")
|
||
(":speak_no_evil:" . "🙊")
|
||
(":hear_no_evil:" . "🙉")
|
||
(":see_no_evil:" . "🙈")
|
||
(":pouting_cat:" . "😾")
|
||
(":crying_cat:" . "😿")
|
||
(":weary_cat:" . "🙀")
|
||
(":kissing_cat:" . "😽")
|
||
(":smirking_cat:" . "😼")
|
||
(":lovestruck_cat:" . "😻")
|
||
(":joyful_cat:" . "😹")
|
||
(":grinning_cat:" . "😸")
|
||
(":smiling_cat:" . "😺")
|
||
(":robot:" . "🤖")
|
||
(":alien_monster:" . "👾")
|
||
(":ghost:" . "👻")
|
||
(":goblin:" . "👺")
|
||
(":ogre:" . "👹")
|
||
(":poop:" . "💩")
|
||
(":skull:" . "💀")
|
||
(":angry_imp:" . "👿")
|
||
(":imp:" . "😈")
|
||
(":angry:" . "😠")
|
||
(":enraged:" . "😡")
|
||
(":annoyed:" . "😤")
|
||
(":tired:" . "😫")
|
||
(":weary:" . "😩")
|
||
(":shamed:" . "😓")
|
||
(":disappointed:" . "😞")
|
||
(":persevered:" . "😣")
|
||
(":confounded:" . "😖")
|
||
(":frightened:" . "😱")
|
||
(":distressed:" . "😭")
|
||
(":upset:" . "😢")
|
||
(":hopeful:" . "😥")
|
||
(":cold_sweat:" . "😰")
|
||
(":fearful:" . "😨")
|
||
(":anguished:" . "😧")
|
||
(":bored:" . "😦")
|
||
(":flushed:" . "😳")
|
||
(":astonished:" . "😲")
|
||
(":hushed:" . "😯")
|
||
(":surprised:" . "😮")
|
||
(":cheerless:" . "🙁")
|
||
(":worried:" . "😟")
|
||
(":confused:" . "😕")
|
||
(":nerd:" . "🤓")
|
||
(":confident:" . "😎")
|
||
(":dizzy:" . "😵")
|
||
(":injured:" . "🤕")
|
||
(":sick:" . "🤒")
|
||
(":ill:" . "😷")
|
||
(":exhausted:" . "😴")
|
||
(":sleepy:" . "😪")
|
||
(":pensive:" . "😔")
|
||
(":relieved:" . "😌")
|
||
(":grimaced:" . "😬")
|
||
(":disbelief:" . "🙄")
|
||
(":unamused:" . "😒")
|
||
(":cocky:" . "😏")
|
||
(":vacant:" . "😶")
|
||
(":apathetic:" . "😑")
|
||
(":silenced:" . "🤐")
|
||
(":curious:" . "🤔")
|
||
(":hugging:" . "🤗")
|
||
(":pretentious:" . "🤑")
|
||
(":facetious:" . "😝")
|
||
(":mischievous:" . "😜")
|
||
(":playful:" . "😛")
|
||
(":yum:" . "😋")
|
||
(":happy_kiss:" . "😙")
|
||
(":loving_kiss:" . "😚")
|
||
(":kiss:" . "😗")
|
||
(":flirty:" . "😘")
|
||
(":lovestruck:" . "😍")
|
||
(":innocent:" . "😇")
|
||
(":blush:" . "😊")
|
||
(":coy:" . "😉")
|
||
(":ecstatic:" . "🙃")
|
||
(":pleased:" . "🙂")
|
||
(":joyful:" . "😂")
|
||
(":embarrassed:" . "😅")
|
||
(":amused:" . "😆")
|
||
(":blissful:" . "😁")
|
||
(":happy:" . "😄")
|
||
(":glad:" . "😃")
|
||
(":gleeful:" . "😀")))
|
||
|
||
(defun load-table ()
|
||
(let ((file (res:get-data-file (text-utils:strcat "data/" "emoji-shortcodes.json"))))
|
||
(with-open-file (stream file :direction :input)
|
||
(let ((table (yason:parse stream))
|
||
(results '()))
|
||
(labels ((code->emoji (code)
|
||
(if (cl-ppcre:scan "-" code)
|
||
(let ((codes (mapcar (lambda (a) (code-char (parse-integer a
|
||
:radix 16)))
|
||
(cl-ppcre:split "-" code))))
|
||
(format nil "~{~c~}" codes))
|
||
(format nil "~c" (code-char (parse-integer code :radix 16)))))
|
||
(append-emoji (code-point shortcode)
|
||
(setf results (acons (format nil ":~a:" shortcode)
|
||
(code->emoji code-point)
|
||
results)))
|
||
(maybe-append-kebab (code-point shortcode)
|
||
(when (cl-ppcre:scan "_" shortcode)
|
||
(append-emoji code-point
|
||
(cl-ppcre:regex-replace-all "_"
|
||
shortcode
|
||
"-")))))
|
||
(maphash (lambda (code-point shortcodes)
|
||
(etypecase shortcodes
|
||
(string
|
||
(maybe-append-kebab code-point shortcodes)
|
||
(append-emoji code-point shortcodes))
|
||
(list
|
||
(loop for shortcode in shortcodes do
|
||
(maybe-append-kebab code-point shortcode)
|
||
(append-emoji code-point shortcode)))))
|
||
table)
|
||
results)))))
|
||
|
||
(defun initialize ()
|
||
(ignore-errors (setf *shortcodes-db* (load-table))))
|
||
|
||
(defun shortcode-lookup (key)
|
||
(assoc key *shortcodes-db* :test #'string-equal))
|
||
|
||
(defun emojify (text)
|
||
(loop for mapping in *shortcodes-db* do
|
||
(setf text (cl-ppcre:regex-replace-all (text-utils:strcat "(?i)" (car mapping))
|
||
text
|
||
(cdr mapping))))
|
||
text)
|
||
|
||
(defun print-comment-prefix (stream
|
||
format-argument
|
||
colon-modifier-supplied-p
|
||
at-sign-modifier-supplied-p
|
||
&optional (repetitions 1))
|
||
(declare (ignore format-argument
|
||
colon-modifier-supplied-p
|
||
at-sign-modifier-supplied-p
|
||
repetitions))
|
||
(write-string (swconf:config-post-comment-prefix) stream))
|
||
|
||
(defun emoji-shortcode-as-comment ()
|
||
(let ((emojis (list "🤬" "🧐" "🤯" "🤮" "🤨" "🤫"
|
||
"🤪" "🤩" "👿" "😈" "😠" "😡"
|
||
"😫" "😩" "😓" "😞" "😣" "😖"
|
||
"😭" "😢" "😥" "😰" "😨" "😧"
|
||
"😳" "😲" "😯" "😮" "🙁" "😟"
|
||
"🤓" "😎" "😵" "🤕" "🤒" "😷"
|
||
"🤭" "😤" "😱" "😦" "😕" "😴"
|
||
"😪" "😔" "😌" "😬" "🙄" "😒"
|
||
"😏" "😶" "😑" "🤐" "🤔" "🤗"
|
||
"🤑" "😝" "😜" "😛" "😋" "😙"
|
||
"😚" "😗" "😘" "😍" "😇" "😊"
|
||
"😉" "🙃" "🙂" "😂" "😅" "😆"
|
||
"😁" "😄" "😃" "😀" "🤠" "🤧"
|
||
"🤢" "🤤" "🤥" "🤣" "👏" "👊"
|
||
"✊" "🖕" "🤘" "👌" "🖖" "✋"
|
||
"👋" "🤝" "🤜" "🤛" "🤙" "🤞"
|
||
"🤚" "🙏" "👍")))
|
||
(with-output-to-string (stream)
|
||
(format stream
|
||
"~{~/emoji-shortcodes::print-comment-prefix/ ~a~^~a~^~a~^~a~^~%~}"
|
||
(mapcar (lambda (emoji)
|
||
(a:when-let ((shortcodes-found (remove-if-not (lambda (a)
|
||
(string= emoji
|
||
(cdr a)))
|
||
*shortcodes-db*)))
|
||
(with-output-to-string (emoji-stream)
|
||
(loop for shortcode in shortcodes-found do
|
||
(format emoji-stream
|
||
"~a ~a "
|
||
(car shortcode)
|
||
(cdr shortcode))))))
|
||
emojis)))))
|