diff --git a/app/assets/javascripts/discourse/components/d-editor.js.es6 b/app/assets/javascripts/discourse/components/d-editor.js.es6 index 9307e4cffbc..5fd79893a00 100644 --- a/app/assets/javascripts/discourse/components/d-editor.js.es6 +++ b/app/assets/javascripts/discourse/components/d-editor.js.es6 @@ -8,7 +8,7 @@ import { search as searchCategoryTag } from 'discourse/lib/category-tag-search' import { SEPARATOR } from 'discourse/lib/category-hashtags'; import { cook } from 'discourse/lib/text'; import { translations } from 'pretty-text/emoji/data'; -import { emojiSearch } from 'pretty-text/emoji'; +import { emojiSearch, isSkinTonableEmoji } from 'pretty-text/emoji'; import { emojiUrlFor } from 'discourse/lib/text'; import { getRegister } from 'discourse-common/lib/get-owner'; import { findRawTemplate } from 'discourse/lib/raw-templates'; @@ -337,6 +337,11 @@ export default Ember.Component.extend({ self.set('value', text); }, + onKeyUp(text, cp) { + const subtext = text.substring(0, cp); + return subtext.match(/(:(?!:).?[\w-]*:?(?!:)(?:t\d?)?:?) ?$/gm); + }, + transformComplete(v) { if (v.code) { return `${v.code}:`; @@ -372,6 +377,20 @@ export default Ember.Component.extend({ return resolve([translations[full]]); } + const match = term.match(/^:?(.*?):t(\d)?$/); + if (match) { + let name = match[1]; + let scale = match[2]; + + if (isSkinTonableEmoji(name)) { + if (scale) { + return resolve([`${name}:t${scale}`]); + } else { + return resolve([2, 3, 4, 5, 6].map(x => `${name}:t${x}`)); + } + } + } + const options = emojiSearch(term, {maxResults: 5}); return resolve(options); diff --git a/app/assets/javascripts/discourse/lib/autocomplete.js.es6 b/app/assets/javascripts/discourse/lib/autocomplete.js.es6 index 4b49fdc0146..589d53526ba 100644 --- a/app/assets/javascripts/discourse/lib/autocomplete.js.es6 +++ b/app/assets/javascripts/discourse/lib/autocomplete.js.es6 @@ -360,8 +360,21 @@ export default function(options) { var cp = caretPosition(me[0]); - if (options.key && completeStart === null && cp > 0) { - var key = me[0].value[cp-1]; + if (!options.key) return; + + const key = me[0].value[cp-1]; + + if (options.onKeyUp && key !== options.key) { + var match = options.onKeyUp(me.val(), cp); + if (match) { + completeStart = cp - match[0].length; + completeEnd = completeStart + match[0].length - 1; + let term = match[0].substring(1, match[0].length); + updateAutoComplete(dataSource(term, options)); + } + } + + if (completeStart === null && cp > 0) { if (key === options.key) { var prevChar = me.val().charAt(cp-2); if (checkTriggerRule() && (!prevChar || allowedLettersRegex.test(prevChar))) { @@ -370,7 +383,7 @@ export default function(options) { } } } else if (completeStart !== null) { - var term = me.val().substring(completeStart + (options.key ? 1 : 0), cp); + let term = me.val().substring(completeStart + (options.key ? 1 : 0), cp); updateAutoComplete(dataSource(term, options)); } }); diff --git a/app/assets/javascripts/discourse/lib/emoji/groups.js.es6 b/app/assets/javascripts/discourse/lib/emoji/groups.js.es6 index 7b8d9bbedf6..627513d1cf6 100644 --- a/app/assets/javascripts/discourse/lib/emoji/groups.js.es6 +++ b/app/assets/javascripts/discourse/lib/emoji/groups.js.es6 @@ -1,18 +1,17 @@ -import { emojiExists } from 'pretty-text/emoji'; +// This file is generated by emoji.rake do not modify directly // note that these categories are copied from Slack -// be careful, there are ~20 differences in synonyms, e.g. :boom: vs. :collision: -// a few Emoji are actually missing from the Slack categories as well (?), and were added const groups = [ { - name:"people", - fullname:"People", - tabicon:"grinning", - icons:[ - "slight_smile", + "name": "people", + "fullname": "People", + "tabicon": "grinning", + "icons": [ + "slightly_smiling_face", "grinning", "grin", "joy", + "rofl", "smiley", "smile", "sweat_smile", @@ -61,6 +60,8 @@ const groups = [ "open_mouth", "hushed", "cold_sweat", + "nauseated_face", + "sneezing_face", "scream", "astonished", "flushed", @@ -85,23 +86,67 @@ const groups = [ "girl", "man", "woman", - "family", "couple", "two_men_holding_hands", "two_women_holding_hands", - "dancers", + "dancing_women", + "dancing_men", + "man_dancing", "bride_with_veil", - "person_with_blond_hair", + "blonde_woman", + "blonde_man", "man_with_gua_pi_mao", + "woman_with_turban", "man_with_turban", - "older_man", "older_woman", - "cop", - "construction_worker", + "older_man", + "policewoman", + "policeman", + "female_detective", + "male_detective", + "woman_farmer", + "man_farmer", + "woman_cook", + "man_cook", + "woman_student", + "man_student", + "woman_singer", + "man_singer", + "woman_teacher", + "man_teacher", + "woman_factory_worker", + "man_factory_worker", + "woman_health_worker", + "man_health_worker", + "woman_pilot", + "man_pilot", + "woman_judge", + "man_judge", + "woman_technologist", + "man_technologist", + "woman_office_worker", + "man_office_worker", + "woman_mechanic", + "man_mechanic", + "woman_scientist", + "man_scientist", + "woman_artist", + "man_artist", + "woman_firefighter", + "man_firefighter", + "woman_astronaut", + "man_astronaut", + "construction_worker_woman", + "construction_worker_man", "princess", + "prince", + "guardswoman", "guardsman", + "clown_face", + "cowboy_hat_face", "angel", "santa", + "mrs_claus", "ghost", "japanese_ogre", "japanese_goblin", @@ -109,20 +154,32 @@ const groups = [ "skull", "alien", "space_invader", - "bow", - "information_desk_person", - "no_good", + "bowing_woman", + "bowing_man", + "woman_facepalming", + "man_facepalming", + "woman_shrugging", + "man_shrugging", + "tipping_hand_woman", + "tipping_hand_man", + "no_good_woman", + "no_good_man", "ok_woman", - "raising_hand", - "person_with_pouting_face", - "person_frowning", - "massage", - "haircut", - "couple_with_heart", - "couplekiss", - "raised_hands", + "ok_man", + "raising_hand_woman", + "raising_hand_man", + "pouting_woman", + "pouting_man", + "frowning_woman", + "frowning_man", + "massage_woman", + "massage_man", + "haircut_woman", + "haircut_man", + "couple_with_heart_woman_woman", + "couple_with_heart_woman_man", + "couple_with_heart_man_man", "clap", - "hand", "ear", "eyes", "nose", @@ -131,72 +188,93 @@ const groups = [ "tongue", "nail_care", "wave", - "+1", - "-1", + "thumbsup", + "thumbsdown", "point_up", "point_up_2", "point_down", "point_left", "point_right", "ok_hand", + "handshake", "v", - "facepunch", + "crossed_fingers", + "call_me_hand", "fist", + "fist_left", + "fist_right", "raised_hand", + "raised_back_of_hand", + "raised_hands", "muscle", "open_hands", "pray", - "anger_right", + "right_anger_bubble", "eye", - "frowning2", - "hand_splayed", - "head_bandage", - "hugging", - "middle_finger", - "money_mouth", - "nerd", + "frowning_face", + "raised_hand_with_fingers_splayed", + "face_with_head_bandage", + "hugs", + "fu", + "money_mouth_face", + "nerd_face", + "drooling_face", "poop", - "punch", + "facepunch", "robot", - "rolling_eyes", - "skull_crossbones", - "slight_frown", + "roll_eyes", + "skull_and_crossbones", + "slightly_frowning_face", "speaking_head", "spy", "thinking", - "thumbsup", - "thumbsdown", - "upside_down", - "urn", - "vulcan", - "wind_blowing_face", + "upside_down_face", + "lying_face", + "funeral_urn", + "vulcan_salute", + "metal", + "wind_face", "writing_hand", - "zipper_mouth", - "female_couple_with_heart", + "zipper_mouth_face", "male_couple_with_heart", - "female_couplekiss", - "male_couplekiss", + "couplekiss_man_woman", + "couplekiss_woman_woman", + "couplekiss_man_man", "family_man_woman_girl", + "family_man_woman_boy", "family_man_woman_girl_boy", - "family_man_woman_boys", - "family_man_woman_girls", - "family_women_boy", - "family_women_girl", - "family_women_girl_boy", - "family_women_boys", - "family_women_girls", - "family_men_boy", - "family_men_girl", - "family_men_girl_boy", - "family_men_boys", - "family_men_girls" + "family_man_woman_girl_girl", + "family_man_woman_boy_boy", + "family_woman_woman_girl", + "family_woman_woman_boy", + "family_woman_woman_girl_boy", + "family_woman_woman_girl_girl", + "family_woman_woman_boy_boy", + "family_man_man_girl", + "family_man_man_boy", + "family_man_man_girl_boy", + "family_man_man_girl_girl", + "family_man_man_boy_boy", + "family_woman_girl", + "family_woman_boy", + "family_woman_girl_boy", + "family_woman_girl_girl", + "family_woman_boy_boy", + "family_man_girl", + "family_man_boy", + "family_man_girl_boy", + "family_man_girl_girl", + "family_man_boy_boy", + "selfie", + "man_in_tuxedo", + "pregnant_woman" ] }, { - name:"nature", - fullname:"Nature", - tabicon:"evergreen_tree", - icons:[ + "name": "nature", + "fullname": "Nature", + "tabicon": "evergreen_tree", + "icons": [ "seedling", "evergreen_tree", "deciduous_tree", @@ -207,6 +285,7 @@ const groups = [ "rose", "hibiscus", "sunflower", + "fleur_de_lis", "blossom", "bouquet", "ear_of_rice", @@ -269,11 +348,25 @@ const groups = [ "snake", "turtle", "frog", + "fox_face", + "lion", + "gorilla", + "duck", + "eagle", + "owl", + "bat", + "lizard", + "shark", + "deer", + "rhinoceros", + "paw_prints", "whale2", "whale", "dolphin", "octopus", "fish", + "squid", + "shrimp", "tropical_fish", "blowfish", "shell", @@ -282,12 +375,15 @@ const groups = [ "ant", "bee", "beetle", + "honeybee", + "butterfly", "feet", "zap", "fire", "crescent_moon", "sunny", "partly_sunny", + "sun_behind_small_cloud", "cloud", "droplet", "sweat_drops", @@ -312,9 +408,9 @@ const groups = [ "new_moon", "waxing_crescent_moon", "first_quarter_moon", - "moon", "full_moon", "waning_gibbous_moon", + "waxing_gibbous_moon", "last_quarter_moon", "waning_crescent_moon", "new_moon_with_face", @@ -323,10 +419,13 @@ const groups = [ "last_quarter_moon_with_face", "sun_with_face", "chipmunk", - "cloud_lightning", - "cloud_rain", - "cloud_snow", - "cloud_tornado", + "cloud_with_lightning", + "cloud_with_lightning_and_rain", + "cloud_with_rain", + "cloud_with_snow", + "tornado", + "sun_behind_large_cloud", + "sun_behind_rain_cloud", "comet", "crab", "dove", @@ -335,20 +434,15 @@ const groups = [ "scorpion", "spider", "spider_web", - "thunder_cloud_rain", "turkey", - "unicorn", - "waxing_gibbous_moon", - "white_sun_cloud", - "white_sun_rain_cloud", - "white_sun_small_cloud" + "unicorn" ] }, { - name:"food", - fullname:"Food & Drink", - tabicon:"hamburger", - icons:[ + "name": "food", + "fullname": "Food & Drink", + "tabicon": "hamburger", + "icons": [ "tomato", "eggplant", "corn", @@ -366,6 +460,11 @@ const groups = [ "peach", "cherries", "strawberry", + "kiwi_fruit", + "avocado", + "cucumber", + "carrot", + "potato", "hamburger", "pizza", "meat_on_bone", @@ -400,8 +499,11 @@ const groups = [ "fork_and_knife", "tea", "coffee", + "milk_glass", "sake", "wine_glass", + "clinking_glasses", + "tumbler_glass", "cocktail", "tropical_drink", "beer", @@ -412,14 +514,23 @@ const groups = [ "cheese", "hot_pepper", "hotdog", - "taco" + "taco", + "peanuts", + "croissant", + "baguette_bread", + "bacon", + "pancakes", + "fried_egg", + "stuffed_flatbread", + "green_salad", + "shallow_pan_of_food" ] }, { - name:"celebration", - fullname:"Celebration", - tabicon:"gift", - icons:[ + "name": "celebration", + "fullname": "Celebration", + "tabicon": "gift", + "icons": [ "ribbon", "gift", "birthday", @@ -459,26 +570,35 @@ const groups = [ "yellow_heart", "green_heart", "blue_heart", - "heart_exclamation" + "black_heart", + "heavy_heart_exclamation" ] }, { - name:"activity", - fullname:"Activities", - tabicon:"soccer", - icons:[ - "runner", - "walking", + "name": "activity", + "fullname": "Activities", + "tabicon": "soccer", + "icons": [ + "running_woman", + "running_man", + "walking_woman", + "walking_man", "dancer", - "rowboat", - "swimmer", - "surfer", + "rowing_woman", + "rowing_man", + "swimming_woman", + "swimming_man", + "surfing_woman", + "surfing_man", "bath", "snowboarder", "ski", "snowman", - "bicyclist", - "mountain_bicyclist", + "snowman_with_snow", + "biking_woman", + "biking_man", + "mountain_biking_woman", + "mountain_biking_man", "horse_racing", "tent", "fishing_pole_and_fish", @@ -497,6 +617,7 @@ const groups = [ "violin", "saxophone", "trumpet", + "drum", "musical_note", "notes", "musical_score", @@ -522,26 +643,41 @@ const groups = [ "roller_coaster", "badminton", "ballot_box", - "basketball_player", + "basketball_woman", + "basketball_man", "bow_and_arrow", - "cricket", "crossed_swords", + "cricket", + "ice_hockey", "field_hockey", - "golfer", - "hockey", + "golfing_woman", + "golfing_man", "ice_skate", "paintbrush", "skier", - "snowman2", "stadium", - "volleyball" + "volleyball", + "person_fencing", + "goal_net", + "boxing_glove", + "martial_arts_uniform", + "women_wrestling", + "men_wrestling", + "woman_cartwheeling", + "man_cartwheeling", + "woman_playing_handball", + "man_playing_handball", + "woman_playing_water_polo", + "man_playing_water_polo", + "woman_juggling", + "man_juggling" ] }, { - name:"travel", - fullname:"Travel & Places", - tabicon:"airplane", - icons:[ + "name": "travel", + "fullname": "Travel & Places", + "tabicon": "airplane", + "icons": [ "train", "mountain_railway", "railway_car", @@ -565,13 +701,15 @@ const groups = [ "rotating_light", "taxi", "oncoming_taxi", - "car", + "automobile", "oncoming_automobile", "blue_car", "truck", "articulated_lorry", "tractor", "bike", + "kick_scooter", + "motor_scooter", "busstop", "fuelpump", "construction", @@ -584,7 +722,7 @@ const groups = [ "anchor", "ship", "speedboat", - "boat", + "canoe", "aerial_tramway", "mountain_cableway", "suspension_railway", @@ -632,20 +770,44 @@ const groups = [ "kr", "ru", "us", - "airplane_arriving", - "airplane_departure", - "airplane_small", + "flight_arrival", + "flight_departure", + "small_airplane", "beach", "beach_umbrella", + "parasol_on_ground", "camping", "city_dusk", "cityscape", "classical_building", - "construction_site", - "cruise_ship", + "building_construction", + "passenger_ship", "desert", "ferry", - "flag_black", + "hole", + "houses", + "derelict_house", + "desert_island", + "kaaba", + "world_map", + "mosque", + "motor_boat", + "motorcycle", + "motorway", + "mountain", + "mountain_snow", + "national_park", + "place_of_worship", + "racing_car", + "railway_track", + "red_car", + "sailboat", + "shinto_shrine", + "sleeping_accommodation", + "synagogue", + "rainbow_flag", + "white_flag", + "black_flag", "flag_cn", "flag_de", "flag_es", @@ -656,35 +818,251 @@ const groups = [ "flag_kr", "flag_ru", "flag_us", - "flag_white", - "hole", - "homes", - "house_abandoned", - "island", - "kaaba", - "map", - "mosque", - "motorboat", - "motorcycle", - "motorway", - "mountain", - "mountain_snow", - "park", - "place_of_worship", - "race_car", - "railway_track", - "red_car", - "sailboat", - "shinto_shrine", - "sleeping_accommodation", - "synagogue" + "afghanistan", + "aland_islands", + "albania", + "algeria", + "american_samoa", + "andorra", + "angola", + "anguilla", + "antarctica", + "antigua_barbuda", + "argentina", + "armenia", + "aruba", + "australia", + "austria", + "azerbaijan", + "bahamas", + "bahrain", + "bangladesh", + "barbados", + "belarus", + "belgium", + "belize", + "benin", + "bermuda", + "bhutan", + "bolivia", + "caribbean_netherlands", + "bosnia_herzegovina", + "botswana", + "brazil", + "british_indian_ocean_territory", + "british_virgin_islands", + "brunei", + "bulgaria", + "burkina_faso", + "burundi", + "cape_verde", + "cambodia", + "cameroon", + "canada", + "canary_islands", + "cayman_islands", + "central_african_republic", + "chad", + "chile", + "christmas_island", + "cocos_islands", + "colombia", + "comoros", + "congo_brazzaville", + "congo_kinshasa", + "cook_islands", + "costa_rica", + "croatia", + "cuba", + "curacao", + "cyprus", + "czech_republic", + "denmark", + "djibouti", + "dominica", + "dominican_republic", + "ecuador", + "egypt", + "el_salvador", + "equatorial_guinea", + "eritrea", + "estonia", + "ethiopia", + "eu", + "falkland_islands", + "faroe_islands", + "fiji", + "finland", + "french_guiana", + "french_polynesia", + "french_southern_territories", + "gabon", + "gambia", + "georgia", + "ghana", + "gibraltar", + "greece", + "greenland", + "grenada", + "guadeloupe", + "guam", + "guatemala", + "guernsey", + "guinea", + "guinea_bissau", + "guyana", + "haiti", + "honduras", + "hong_kong", + "hungary", + "iceland", + "india", + "indonesia", + "iran", + "iraq", + "ireland", + "isle_of_man", + "israel", + "cote_divoire", + "jamaica", + "jersey", + "jordan", + "kazakhstan", + "kenya", + "kiribati", + "kosovo", + "kuwait", + "kyrgyzstan", + "laos", + "latvia", + "lebanon", + "lesotho", + "liberia", + "libya", + "liechtenstein", + "lithuania", + "luxembourg", + "macau", + "macedonia", + "madagascar", + "malawi", + "malaysia", + "maldives", + "mali", + "malta", + "marshall_islands", + "martinique", + "mauritania", + "mauritius", + "mayotte", + "mexico", + "micronesia", + "moldova", + "monaco", + "mongolia", + "montenegro", + "montserrat", + "morocco", + "mozambique", + "myanmar", + "namibia", + "nauru", + "nepal", + "netherlands", + "new_caledonia", + "new_zealand", + "nicaragua", + "niger", + "nigeria", + "niue", + "norfolk_island", + "northern_mariana_islands", + "north_korea", + "norway", + "oman", + "pakistan", + "palau", + "palestinian_territories", + "panama", + "papua_new_guinea", + "paraguay", + "peru", + "philippines", + "pitcairn_islands", + "poland", + "portugal", + "puerto_rico", + "qatar", + "reunion", + "romania", + "rwanda", + "st_barthelemy", + "st_helena", + "st_kitts_nevis", + "st_lucia", + "st_pierre_miquelon", + "st_vincent_grenadines", + "samoa", + "san_marino", + "sao_tome_principe", + "saudi_arabia", + "senegal", + "serbia", + "seychelles", + "sierra_leone", + "singapore", + "sint_maarten", + "slovakia", + "slovenia", + "solomon_islands", + "somalia", + "south_africa", + "south_georgia_south_sandwich_islands", + "south_sudan", + "sri_lanka", + "sudan", + "suriname", + "swaziland", + "sweden", + "switzerland", + "syria", + "taiwan", + "tajikistan", + "tanzania", + "thailand", + "timor_leste", + "togo", + "tokelau", + "tonga", + "trinidad_tobago", + "tunisia", + "tr", + "turkmenistan", + "turks_caicos_islands", + "tuvalu", + "uganda", + "ukraine", + "united_arab_emirates", + "uk", + "us_virgin_islands", + "uruguay", + "uzbekistan", + "vanuatu", + "vatican_city", + "venezuela", + "vietnam", + "wallis_futuna", + "western_sahara", + "yemen", + "zambia", + "zimbabwe" ] }, { - name:"objects", - fullname:"Objects & Symbols", - tabicon:"eyeglasses", - icons:[ + "name": "objects", + "fullname": "Objects & Symbols", + "tabicon": "eyeglasses", + "icons": [ "watch", "iphone", "calling", @@ -733,7 +1111,7 @@ const groups = [ "dress", "kimono", "womans_clothes", - "shirt", + "tshirt", "necktie", "jeans", "door", @@ -759,7 +1137,7 @@ const groups = [ "email", "envelope_with_arrow", "incoming_envelope", - "e-mail", + "email", "inbox_tray", "outbox_tray", "package", @@ -781,7 +1159,7 @@ const groups = [ "high_brightness", "scroll", "clipboard", - "book", + "open_book", "notebook", "notebook_with_decorative_cover", "ledger", @@ -803,7 +1181,6 @@ const groups = [ "open_file_folder", "black_nib", "pencil2", - "memo", "lock_with_ink_pen", "closed_lock_with_key", "lock", @@ -824,6 +1201,7 @@ const groups = [ "mag_right", "no_entry_sign", "no_entry", + "stop_sign", "name_badge", "no_pedestrians", "do_not_litter", @@ -834,6 +1212,7 @@ const groups = [ "accept", "ideograph_advantage", "white_flower", + "wilted_flower", "secret", "congratulations", "u5408", @@ -864,7 +1243,6 @@ const groups = [ "cl", "o2", "sos", - "id", "parking", "wc", "cool", @@ -874,6 +1252,7 @@ const groups = [ "ok", "up", "atm", + "id", "aries", "taurus", "gemini", @@ -886,6 +1265,18 @@ const groups = [ "capricorn", "aquarius", "pisces", + "ophiuchus", + "six_pointed_star", + "atom_symbol", + "latin_cross", + "orthodox_cross", + "star_and_crescent", + "om", + "star_of_david", + "wheel_of_dharma", + "yin_yang", + "menorah", + "peace_symbol", "restroom", "mens", "womens", @@ -931,7 +1322,7 @@ const groups = [ "eight", "nine", "keycap_ten", - "keycap_star", + "asterisk", "1234", "hash", "abc", @@ -972,8 +1363,6 @@ const groups = [ "soon", "cyclone", "m", - "ophiuchus", - "six_pointed_star", "beginner", "trident", "warning", @@ -1033,102 +1422,92 @@ const groups = [ "clock1230", "alembic", "amphora", - "atom", "biohazard", "bed", - "bellhop", - "calendar_spiral", - "camera_with_flash", + "sleeping_bed", + "bellhop_bell", + "spiral_calendar", + "camera_flash", "candle", - "card_box", + "card_file_box", "chains", - "clock", + "mantelpiece_clock", "coffin", - "compression", + "clamp", "control_knobs", - "couch", + "couch_and_lamp", "crayon", - "cross", "dagger", "dark_sunglasses", - "desktop", - "dividers", + "desktop_computer", + "card_index_dividers", "envelope", "file_cabinet", - "film_frames", - "fleur-de-lis", - "fork_knife_plate", - "frame_photo", + "film_strip", + "plate_with_cutlery", + "framed_picture", "gear", - "hammer_pick", - "helmet_with_cross", + "hammer_and_pick", + "rescue_worker_helmet", "joystick", - "key2", + "old_key", "keyboard", "knife", + "spoon", "label", "level_slider", - "levitate", - "lifter", - "medal", - "menorah", - "metal", - "microphone2", - "military_medal", + "business_suit_levitating", + "weight_lifting_woman", + "weight_lifting_man", + "medal_sports", + "1st_place_medal", + "2nd_place_medal", + "3rd_place_medal", + "studio_microphone", + "medal_military", + "computer_mouse", "mouse_three_button", - "newspaper2", - "notepad_spiral", - "oil", - "om_symbol", - "orthodox_cross", + "newspaper_roll", + "spiral_notepad", + "oil_drum", "paperclips", "pause_button", - "peace", - "pen_ballpoint", - "pen_fountain", - "pencil", + "record_button", + "stop_button", + "play_or_pause_button", + "next_track_button", + "previous_track_button", + "pen", + "fountain_pen", + "memo", "pick", "ping_pong", - "play_pause", "popcorn", "prayer_beads", "printer", - "projector", + "film_projector", "radioactive", - "record_button", "reminder_ribbon", "rosette", - "satellite_orbital", - "scales", + "artificial_satellite", + "balance_scale", "shamrock", "shield", - "shopping_bags", - "star_and_crescent", - "star_of_david", - "stop_button", + "shopping", + "shopping_cart", "stopwatch", "telephone", - "ten", "thermometer", - "thermometer_face", + "face_with_thermometer", "tickets", - "timer", - "tools", - "track_next", - "track_previous", + "timer_clock", + "hammer_and_wrench", "trackball", - "umbrella2", + "open_umbrella", "wastebasket", - "wheel_of_dharma", - "yin_yang", "left_speech_bubble" ] } ]; -// scrub groups -groups.forEach(group => { - group.icons = group.icons.reject(obj => !emojiExists(obj)); -}); - export default groups; diff --git a/app/assets/javascripts/pretty-text/emoji.js.es6 b/app/assets/javascripts/pretty-text/emoji.js.es6 index 3df9040a240..1675e6e5e20 100644 --- a/app/assets/javascripts/pretty-text/emoji.js.es6 +++ b/app/assets/javascripts/pretty-text/emoji.js.es6 @@ -1,7 +1,7 @@ -import { emoji, aliases, translations } from 'pretty-text/emoji/data'; +import { emojis, aliases, translations, tonableEmojis } from 'pretty-text/emoji/data'; // bump up this number to expire all emojis -export const IMAGE_VERSION = "3"; +export const IMAGE_VERSION = "5"; const extendedEmoji = {}; @@ -11,7 +11,7 @@ export function registerEmoji(code, url) { } export function emojiList() { - const result = emoji.slice(0); + const result = emojis.slice(0); _.each(extendedEmoji, (v,k) => result.push(k)); return result; } @@ -19,7 +19,7 @@ export function emojiList() { const emojiHash = {}; // add all default emojis -emoji.forEach(code => emojiHash[code] = true); +emojis.forEach(code => emojiHash[code] = true); // and their aliases const aliasHash = {}; @@ -30,7 +30,7 @@ Object.keys(aliases).forEach(name => { export function performEmojiUnescape(string, opts) { // this can be further improved by supporting matches of emoticons that don't begin with a colon if (string.indexOf(":") >= 0) { - return string.replace(/\B:[^\s:]+:?\B/g, m => { + return string.replace(/\B:[^\s:]+(?::t\d)?:?\B/g, m => { const isEmoticon = !!translations[m]; const emojiVal = isEmoticon ? translations[m] : m.slice(1, m.length - 1); const hasEndingColon = m.lastIndexOf(":") === m.length - 1; @@ -64,8 +64,9 @@ export function buildEmojiUrl(code, opts) { url = opts.customEmoji[code]; } - if (!url && emojiHash.hasOwnProperty(code)) { - url = opts.getURL(`/images/emoji/${opts.emojiSet}/${code}.png`); + const noToneMatch = code.match(/(.?[\w-]*)?:?/); + if (noToneMatch && !url && (emojiHash.hasOwnProperty(noToneMatch[1]) || aliasHash.hasOwnProperty(noToneMatch[1]))) { + url = opts.getURL(`/images/emoji/${opts.emojiSet}/${code.replace(/:t/, '/')}.png`); } if (url) { @@ -77,7 +78,7 @@ export function buildEmojiUrl(code, opts) { export function emojiExists(code) { code = code.toLowerCase(); - return !!(extendedEmoji.hasOwnProperty(code) || emojiHash.hasOwnProperty(code)); + return !!(extendedEmoji.hasOwnProperty(code) || emojiHash.hasOwnProperty(code) || aliasHash.hasOwnProperty(code)); }; let toSearch; @@ -113,3 +114,12 @@ export function emojiSearch(term, options) { return results; }; + +export function isSkinTonableEmoji(term) { + let match = term.match(/^:?(.*?):?$/); + if (match) { + return tonableEmojis.indexOf(match[1]) !== -1; + } else { + return tonableEmojis.indexOf(term) !== -1; + } +} diff --git a/app/assets/javascripts/pretty-text/emoji/data.js.es6.erb b/app/assets/javascripts/pretty-text/emoji/data.js.es6.erb index 90861fb7bb8..18648449574 100644 --- a/app/assets/javascripts/pretty-text/emoji/data.js.es6.erb +++ b/app/assets/javascripts/pretty-text/emoji/data.js.es6.erb @@ -1,4 +1,5 @@ -export const emoji = <%= Emoji.standard.map(&:name).flatten.inspect %>; +export const emojis = <%= Emoji.standard.map(&:name).flatten.inspect %>; +export const tonableEmojis = <%= Emoji.tonable_emojis.flatten.inspect %>; export const aliases = <%= Emoji.aliases.inspect.gsub("=>", ":") %>; export const translations = { ':)' : 'slight_smile', diff --git a/app/assets/javascripts/pretty-text/engines/discourse-markdown/emoji.js.es6 b/app/assets/javascripts/pretty-text/engines/discourse-markdown/emoji.js.es6 index 20577a97ad5..8ef552ee2a9 100644 --- a/app/assets/javascripts/pretty-text/engines/discourse-markdown/emoji.js.es6 +++ b/app/assets/javascripts/pretty-text/engines/discourse-markdown/emoji.js.es6 @@ -81,11 +81,17 @@ export function setup(helper) { return; } - // Simple find and replace from our array - const between = text.slice(1, endPos); + let between; + const emojiNameMatch = text.match(/(?:.*?)(:(?!:).?[\w-]*(?::t\d)?:)/); + if (emojiNameMatch) { + between = emojiNameMatch[0].slice(1, -1); + } else { + between = text.slice(1, -1); + } + const contents = imageFor(between); if (contents) { - return [endPos+1, contents]; + return [text.indexOf(between, 1) + between.length + 1, contents]; } }); diff --git a/app/models/emoji.rb b/app/models/emoji.rb index ab61a60257a..80c66b26ac2 100644 --- a/app/models/emoji.rb +++ b/app/models/emoji.rb @@ -1,6 +1,6 @@ class Emoji # update this to clear the cache - EMOJI_VERSION = "v3" + EMOJI_VERSION = "v5" include ActiveModel::SerializerSupport @@ -23,13 +23,17 @@ class Emoji end def self.aliases - Discourse.cache.fetch(cache_key("aliases_emojis")) { load_aliases } + Discourse.cache.fetch(cache_key("aliases_emojis")) { db['aliases'] } end def self.custom Discourse.cache.fetch(cache_key("custom_emojis")) { load_custom } end + def self.tonable_emojis + Discourse.cache.fetch(cache_key("tonable_emojis")) { db['tonableEmojis'] } + end + def self.exists?(name) Emoji[name].present? end @@ -63,32 +67,13 @@ class Emoji end def self.db - return @db if @db - @db = File.open(db_file, "r:UTF-8") { |f| JSON.parse(f.read) } - - # Small tweak to `emoji.json` from Emoji one - @db['emojis'] << {"code" => "1f44d", "name" => "+1", "filename" => "thumbsup"} - @db['emojis'] << {"code" => "1f44e", "name" => "-1", "filename" => "thumbsdown"} - - @db + @db ||= File.open(db_file, "r:UTF-8") { |f| JSON.parse(f.read) } end def self.load_standard db['emojis'].map {|e| Emoji.create_from_db_item(e) } end - def self.load_aliases - return @aliases if @aliases - - @aliases ||= db['aliases'] - - # Fix how `slightly_smiling` was mislabeled - @aliases['slight_smile'] ||= [] - @aliases['slight_smile'] << 'slightly_smiling' - - @aliases - end - def self.load_custom result = [] @@ -159,11 +144,20 @@ class Emoji def self.lookup_unicode(name) @reverse_map ||= begin map = {} + db['emojis'].each do |e| next if e['name'] == 'tm' code = replacement_code(e['code']) map[e['name']] = code if code end + + Emoji.aliases.each do |key, alias_names| + next unless alias_code = map[key] + alias_names.each do |alias_name| + map[alias_name] = alias_code + end + end + map end @reverse_map[name] diff --git a/lib/emoji/db.json b/lib/emoji/db.json index 0ae88e7309a..d5619dc4964 100644 --- a/lib/emoji/db.json +++ b/lib/emoji/db.json @@ -1,1564 +1,8 @@ { "emojis": [ { - "code": "1f4af", - "name": "100" - }, - { - "code": "1f522", - "name": "1234" - }, - { - "code": "1f3b1", - "name": "8ball" - }, - { - "code": "1f170", - "name": "a" - }, - { - "code": "1f18e", - "name": "ab" - }, - { - "code": "1f524", - "name": "abc" - }, - { - "code": "1f521", - "name": "abcd" - }, - { - "code": "1f251", - "name": "accept" - }, - { - "code": "1f6a1", - "name": "aerial_tramway" - }, - { - "code": "2708", - "name": "airplane" - }, - { - "code": "1f6ec", - "name": "airplane_arriving" - }, - { - "code": "1f6eb", - "name": "airplane_departure" - }, - { - "code": "1f6e9", - "name": "airplane_small" - }, - { - "code": "23f0", - "name": "alarm_clock" - }, - { - "code": "2697", - "name": "alembic" - }, - { - "code": "1f47d", - "name": "alien" - }, - { - "code": "1f691", - "name": "ambulance" - }, - { - "code": "1f3fa", - "name": "amphora" - }, - { - "code": "2693", - "name": "anchor" - }, - { - "code": "1f47c", - "name": "angel" - }, - { - "code": "1f4a2", - "name": "anger" - }, - { - "code": "1f5ef", - "name": "anger_right" - }, - { - "code": "1f620", - "name": "angry" - }, - { - "code": "1f627", - "name": "anguished" - }, - { - "code": "1f41c", - "name": "ant" - }, - { - "code": "1f34e", - "name": "apple" - }, - { - "code": "2652", - "name": "aquarius" - }, - { - "code": "2648", - "name": "aries" - }, - { - "code": "25c0", - "name": "arrow_backward" - }, - { - "code": "23ec", - "name": "arrow_double_down" - }, - { - "code": "23eb", - "name": "arrow_double_up" - }, - { - "code": "2b07", - "name": "arrow_down" - }, - { - "code": "1f53d", - "name": "arrow_down_small" - }, - { - "code": "25b6", - "name": "arrow_forward" - }, - { - "code": "2935", - "name": "arrow_heading_down" - }, - { - "code": "2934", - "name": "arrow_heading_up" - }, - { - "code": "2b05", - "name": "arrow_left" - }, - { - "code": "2199", - "name": "arrow_lower_left" - }, - { - "code": "2198", - "name": "arrow_lower_right" - }, - { - "code": "27a1", - "name": "arrow_right" - }, - { - "code": "21aa", - "name": "arrow_right_hook" - }, - { - "code": "2b06", - "name": "arrow_up" - }, - { - "code": "2195", - "name": "arrow_up_down" - }, - { - "code": "1f53c", - "name": "arrow_up_small" - }, - { - "code": "2196", - "name": "arrow_upper_left" - }, - { - "code": "2197", - "name": "arrow_upper_right" - }, - { - "code": "1f503", - "name": "arrows_clockwise" - }, - { - "code": "1f504", - "name": "arrows_counterclockwise" - }, - { - "code": "1f3a8", - "name": "art" - }, - { - "code": "1f69b", - "name": "articulated_lorry" - }, - { - "code": "1f632", - "name": "astonished" - }, - { - "code": "1f45f", - "name": "athletic_shoe" - }, - { - "code": "1f3e7", - "name": "atm" - }, - { - "code": "269b", - "name": "atom" - }, - { - "code": "1f171", - "name": "b" - }, - { - "code": "1f476", - "name": "baby" - }, - { - "code": "1f37c", - "name": "baby_bottle" - }, - { - "code": "1f424", - "name": "baby_chick" - }, - { - "code": "1f6bc", - "name": "baby_symbol" - }, - { - "code": "1f519", - "name": "back" - }, - { - "code": "1f3f8", - "name": "badminton" - }, - { - "code": "1f6c4", - "name": "baggage_claim" - }, - { - "code": "1f388", - "name": "balloon" - }, - { - "code": "1f5f3", - "name": "ballot_box" - }, - { - "code": "2611", - "name": "ballot_box_with_check" - }, - { - "code": "1f38d", - "name": "bamboo" - }, - { - "code": "1f34c", - "name": "banana" - }, - { - "code": "203c", - "name": "bangbang" - }, - { - "code": "1f3e6", - "name": "bank" - }, - { - "code": "1f4ca", - "name": "bar_chart" - }, - { - "code": "1f488", - "name": "barber" - }, - { - "code": "26be", - "name": "baseball" - }, - { - "code": "1f3c0", - "name": "basketball" - }, - { - "code": "26f9", - "name": "basketball_player" - }, - { - "code": "1f6c0", - "name": "bath" - }, - { - "code": "1f6c1", - "name": "bathtub" - }, - { - "code": "1f50b", - "name": "battery" - }, - { - "code": "1f3d6", - "name": "beach" - }, - { - "code": "26f1", - "name": "beach_umbrella" - }, - { - "code": "1f43b", - "name": "bear" - }, - { - "code": "1f6cf", - "name": "bed" - }, - { - "code": "1f41d", - "name": "bee" - }, - { - "code": "1f37a", - "name": "beer" - }, - { - "code": "1f37b", - "name": "beers" - }, - { - "code": "1f41e", - "name": "beetle" - }, - { - "code": "1f530", - "name": "beginner" - }, - { - "code": "1f514", - "name": "bell" - }, - { - "code": "1f6ce", - "name": "bellhop" - }, - { - "code": "1f371", - "name": "bento" - }, - { - "code": "1f6b4", - "name": "bicyclist" - }, - { - "code": "1f6b2", - "name": "bike" - }, - { - "code": "1f459", - "name": "bikini" - }, - { - "code": "2623", - "name": "biohazard" - }, - { - "code": "1f426", - "name": "bird" - }, - { - "code": "1f382", - "name": "birthday" - }, - { - "code": "26ab", - "name": "black_circle" - }, - { - "code": "1f0cf", - "name": "black_joker" - }, - { - "code": "2b1b", - "name": "black_large_square" - }, - { - "code": "25fe", - "name": "black_medium_small_square" - }, - { - "code": "25fc", - "name": "black_medium_square" - }, - { - "code": "2712", - "name": "black_nib" - }, - { - "code": "25aa", - "name": "black_small_square" - }, - { - "code": "1f532", - "name": "black_square_button" - }, - { - "code": "1f33c", - "name": "blossom" - }, - { - "code": "1f421", - "name": "blowfish" - }, - { - "code": "1f4d8", - "name": "blue_book" - }, - { - "code": "1f699", - "name": "blue_car" - }, - { - "code": "1f499", - "name": "blue_heart" - }, - { - "code": "1f60a", - "name": "blush" - }, - { - "code": "1f417", - "name": "boar" - }, - { - "code": "1f4a3", - "name": "bomb" - }, - { - "code": "1f4d6", - "name": "book" - }, - { - "code": "1f516", - "name": "bookmark" - }, - { - "code": "1f4d1", - "name": "bookmark_tabs" - }, - { - "code": "1f4da", - "name": "books" - }, - { - "code": "1f4a5", - "name": "boom" - }, - { - "code": "1f462", - "name": "boot" - }, - { - "code": "1f490", - "name": "bouquet" - }, - { - "code": "1f647", - "name": "bow" - }, - { - "code": "1f3f9", - "name": "bow_and_arrow" - }, - { - "code": "1f3b3", - "name": "bowling" - }, - { - "code": "1f466", - "name": "boy" - }, - { - "code": "1f35e", - "name": "bread" - }, - { - "code": "1f470", - "name": "bride_with_veil" - }, - { - "code": "1f309", - "name": "bridge_at_night" - }, - { - "code": "1f4bc", - "name": "briefcase" - }, - { - "code": "1f494", - "name": "broken_heart" - }, - { - "code": "1f41b", - "name": "bug" - }, - { - "code": "1f4a1", - "name": "bulb" - }, - { - "code": "1f685", - "name": "bullettrain_front" - }, - { - "code": "1f684", - "name": "bullettrain_side" - }, - { - "code": "1f32f", - "name": "burrito" - }, - { - "code": "1f68c", - "name": "bus" - }, - { - "code": "1f68f", - "name": "busstop" - }, - { - "code": "1f464", - "name": "bust_in_silhouette" - }, - { - "code": "1f465", - "name": "busts_in_silhouette" - }, - { - "code": "1f335", - "name": "cactus" - }, - { - "code": "1f370", - "name": "cake" - }, - { - "code": "1f4c6", - "name": "calendar" - }, - { - "code": "1f5d3", - "name": "calendar_spiral" - }, - { - "code": "1f4f2", - "name": "calling" - }, - { - "code": "1f42b", - "name": "camel" - }, - { - "code": "1f4f7", - "name": "camera" - }, - { - "code": "1f4f8", - "name": "camera_with_flash" - }, - { - "code": "1f3d5", - "name": "camping" - }, - { - "code": "264b", - "name": "cancer" - }, - { - "code": "1f56f", - "name": "candle" - }, - { - "code": "1f36c", - "name": "candy" - }, - { - "code": "1f520", - "name": "capital_abcd" - }, - { - "code": "2651", - "name": "capricorn" - }, - { - "code": "1f5c3", - "name": "card_box" - }, - { - "code": "1f4c7", - "name": "card_index" - }, - { - "code": "1f3a0", - "name": "carousel_horse" - }, - { - "code": "1f431", - "name": "cat" - }, - { - "code": "1f408", - "name": "cat2" - }, - { - "code": "1f4bf", - "name": "cd" - }, - { - "code": "26d3", - "name": "chains" - }, - { - "code": "1f37e", - "name": "champagne" - }, - { - "code": "1f4b9", - "name": "chart" - }, - { - "code": "1f4c9", - "name": "chart_with_downwards_trend" - }, - { - "code": "1f4c8", - "name": "chart_with_upwards_trend" - }, - { - "code": "1f3c1", - "name": "checkered_flag" - }, - { - "code": "1f9c0", - "name": "cheese" - }, - { - "code": "1f352", - "name": "cherries" - }, - { - "code": "1f338", - "name": "cherry_blossom" - }, - { - "code": "1f330", - "name": "chestnut" - }, - { - "code": "1f414", - "name": "chicken" - }, - { - "code": "1f6b8", - "name": "children_crossing" - }, - { - "code": "1f43f", - "name": "chipmunk" - }, - { - "code": "1f36b", - "name": "chocolate_bar" - }, - { - "code": "1f384", - "name": "christmas_tree" - }, - { - "code": "26ea", - "name": "church" - }, - { - "code": "1f3a6", - "name": "cinema" - }, - { - "code": "1f3aa", - "name": "circus_tent" - }, - { - "code": "1f306", - "name": "city_dusk" - }, - { - "code": "1f307", - "name": "city_sunset" - }, - { - "code": "1f3d9", - "name": "cityscape" - }, - { - "code": "1f191", - "name": "cl" - }, - { - "code": "1f44f", - "name": "clap" - }, - { - "code": "1f3ac", - "name": "clapper" - }, - { - "code": "1f3db", - "name": "classical_building" - }, - { - "code": "1f4cb", - "name": "clipboard" - }, - { - "code": "1f570", - "name": "clock" - }, - { - "code": "1f550", - "name": "clock1" - }, - { - "code": "1f559", - "name": "clock10" - }, - { - "code": "1f565", - "name": "clock1030" - }, - { - "code": "1f55a", - "name": "clock11" - }, - { - "code": "1f566", - "name": "clock1130" - }, - { - "code": "1f55b", - "name": "clock12" - }, - { - "code": "1f567", - "name": "clock1230" - }, - { - "code": "1f55c", - "name": "clock130" - }, - { - "code": "1f551", - "name": "clock2" - }, - { - "code": "1f55d", - "name": "clock230" - }, - { - "code": "1f552", - "name": "clock3" - }, - { - "code": "1f55e", - "name": "clock330" - }, - { - "code": "1f553", - "name": "clock4" - }, - { - "code": "1f55f", - "name": "clock430" - }, - { - "code": "1f554", - "name": "clock5" - }, - { - "code": "1f560", - "name": "clock530" - }, - { - "code": "1f555", - "name": "clock6" - }, - { - "code": "1f561", - "name": "clock630" - }, - { - "code": "1f556", - "name": "clock7" - }, - { - "code": "1f562", - "name": "clock730" - }, - { - "code": "1f557", - "name": "clock8" - }, - { - "code": "1f563", - "name": "clock830" - }, - { - "code": "1f558", - "name": "clock9" - }, - { - "code": "1f564", - "name": "clock930" - }, - { - "code": "1f4d5", - "name": "closed_book" - }, - { - "code": "1f510", - "name": "closed_lock_with_key" - }, - { - "code": "1f302", - "name": "closed_umbrella" - }, - { - "code": "2601", - "name": "cloud" - }, - { - "code": "1f329", - "name": "cloud_lightning" - }, - { - "code": "1f327", - "name": "cloud_rain" - }, - { - "code": "1f328", - "name": "cloud_snow" - }, - { - "code": "1f32a", - "name": "cloud_tornado" - }, - { - "code": "2663", - "name": "clubs" - }, - { - "code": "1f378", - "name": "cocktail" - }, - { - "code": "2615", - "name": "coffee" - }, - { - "code": "26b0", - "name": "coffin" - }, - { - "code": "1f630", - "name": "cold_sweat" - }, - { - "code": "2604", - "name": "comet" - }, - { - "code": "1f5dc", - "name": "compression" - }, - { - "code": "1f4bb", - "name": "computer" - }, - { - "code": "1f38a", - "name": "confetti_ball" - }, - { - "code": "1f616", - "name": "confounded" - }, - { - "code": "1f615", - "name": "confused" - }, - { - "code": "3297", - "name": "congratulations" - }, - { - "code": "1f6a7", - "name": "construction" - }, - { - "code": "1f3d7", - "name": "construction_site" - }, - { - "code": "1f477", - "name": "construction_worker" - }, - { - "code": "1f39b", - "name": "control_knobs" - }, - { - "code": "1f3ea", - "name": "convenience_store" - }, - { - "code": "1f36a", - "name": "cookie" - }, - { - "code": "1f192", - "name": "cool" - }, - { - "code": "1f46e", - "name": "cop" - }, - { - "code": "00a9", - "name": "copyright" - }, - { - "code": "1f33d", - "name": "corn" - }, - { - "code": "1f6cb", - "name": "couch" - }, - { - "code": "1f46b", - "name": "couple" - }, - { - "code": "1f491", - "name": "couple_with_heart" - }, - { - "code": "1f48f", - "name": "couplekiss" - }, - { - "code": "1f42e", - "name": "cow" - }, - { - "code": "1f404", - "name": "cow2" - }, - { - "code": "1f980", - "name": "crab" - }, - { - "code": "1f58d", - "name": "crayon" - }, - { - "code": "1f4b3", - "name": "credit_card" - }, - { - "code": "1f319", - "name": "crescent_moon" - }, - { - "code": "1f3cf", - "name": "cricket" - }, - { - "code": "1f40a", - "name": "crocodile" - }, - { - "code": "271d", - "name": "cross" - }, - { - "code": "1f38c", - "name": "crossed_flags" - }, - { - "code": "2694", - "name": "crossed_swords" - }, - { - "code": "1f451", - "name": "crown" - }, - { - "code": "1f6f3", - "name": "cruise_ship" - }, - { - "code": "1f622", - "name": "cry" - }, - { - "code": "1f63f", - "name": "crying_cat_face" - }, - { - "code": "1f52e", - "name": "crystal_ball" - }, - { - "code": "1f498", - "name": "cupid" - }, - { - "code": "27b0", - "name": "curly_loop" - }, - { - "code": "1f4b1", - "name": "currency_exchange" - }, - { - "code": "1f35b", - "name": "curry" - }, - { - "code": "1f36e", - "name": "custard" - }, - { - "code": "1f6c3", - "name": "customs" - }, - { - "code": "1f300", - "name": "cyclone" - }, - { - "code": "1f5e1", - "name": "dagger" - }, - { - "code": "1f483", - "name": "dancer" - }, - { - "code": "1f46f", - "name": "dancers" - }, - { - "code": "1f361", - "name": "dango" - }, - { - "code": "1f576", - "name": "dark_sunglasses" - }, - { - "code": "1f3af", - "name": "dart" - }, - { - "code": "1f4a8", - "name": "dash" - }, - { - "code": "1f4c5", - "name": "date" - }, - { - "code": "1f333", - "name": "deciduous_tree" - }, - { - "code": "1f3ec", - "name": "department_store" - }, - { - "code": "1f3dc", - "name": "desert" - }, - { - "code": "1f5a5", - "name": "desktop" - }, - { - "code": "1f4a0", - "name": "diamond_shape_with_a_dot_inside" - }, - { - "code": "2666", - "name": "diamonds" - }, - { - "code": "1f61e", - "name": "disappointed" - }, - { - "code": "1f625", - "name": "disappointed_relieved" - }, - { - "code": "1f5c2", - "name": "dividers" - }, - { - "code": "1f4ab", - "name": "dizzy" - }, - { - "code": "1f635", - "name": "dizzy_face" - }, - { - "code": "1f6af", - "name": "do_not_litter" - }, - { - "code": "1f436", - "name": "dog" - }, - { - "code": "1f415", - "name": "dog2" - }, - { - "code": "1f4b5", - "name": "dollar" - }, - { - "code": "1f38e", - "name": "dolls" - }, - { - "code": "1f42c", - "name": "dolphin" - }, - { - "code": "1f6aa", - "name": "door" - }, - { - "code": "1f369", - "name": "doughnut" - }, - { - "code": "1f54a", - "name": "dove" - }, - { - "code": "1f409", - "name": "dragon" - }, - { - "code": "1f432", - "name": "dragon_face" - }, - { - "code": "1f457", - "name": "dress" - }, - { - "code": "1f42a", - "name": "dromedary_camel" - }, - { - "code": "1f4a7", - "name": "droplet" - }, - { - "code": "1f4c0", - "name": "dvd" - }, - { - "code": "1f4e7", - "name": "e-mail" - }, - { - "code": "1f442", - "name": "ear" - }, - { - "code": "1f33e", - "name": "ear_of_rice" - }, - { - "code": "1f30d", - "name": "earth_africa" - }, - { - "code": "1f30e", - "name": "earth_americas" - }, - { - "code": "1f30f", - "name": "earth_asia" - }, - { - "code": "1f373", - "name": "egg" - }, - { - "code": "1f346", - "name": "eggplant" - }, - { - "code": "0038-20e3", - "name": "eight" - }, - { - "code": "2734", - "name": "eight_pointed_black_star" - }, - { - "code": "2733", - "name": "eight_spoked_asterisk" - }, - { - "code": "1f50c", - "name": "electric_plug" - }, - { - "code": "1f418", - "name": "elephant" - }, - { - "code": "1f51a", - "name": "end" - }, - { - "code": "2709", - "name": "envelope" - }, - { - "code": "1f4e9", - "name": "envelope_with_arrow" - }, - { - "code": "1f4b6", - "name": "euro" - }, - { - "code": "1f3f0", - "name": "european_castle" - }, - { - "code": "1f3e4", - "name": "european_post_office" - }, - { - "code": "1f332", - "name": "evergreen_tree" - }, - { - "code": "2757", - "name": "exclamation" - }, - { - "code": "1f611", - "name": "expressionless" - }, - { - "code": "1f441", - "name": "eye" - }, - { - "code": "1f453", - "name": "eyeglasses" - }, - { - "code": "1f440", - "name": "eyes" - }, - { - "code": "1f3ed", - "name": "factory" - }, - { - "code": "1f342", - "name": "fallen_leaf" - }, - { - "code": "23e9", - "name": "fast_forward" - }, - { - "code": "1f4e0", - "name": "fax" - }, - { - "code": "1f628", - "name": "fearful" - }, - { - "code": "1f43e", - "name": "feet" - }, - { - "code": "1f3a1", - "name": "ferris_wheel" - }, - { - "code": "26f4", - "name": "ferry" - }, - { - "code": "1f3d1", - "name": "field_hockey" - }, - { - "code": "1f5c4", - "name": "file_cabinet" - }, - { - "code": "1f4c1", - "name": "file_folder" - }, - { - "code": "1f39e", - "name": "film_frames" - }, - { - "code": "1f525", - "name": "fire" - }, - { - "code": "1f692", - "name": "fire_engine" - }, - { - "code": "1f386", - "name": "fireworks" - }, - { - "code": "1f313", - "name": "first_quarter_moon" - }, - { - "code": "1f31b", - "name": "first_quarter_moon_with_face" - }, - { - "code": "1f41f", - "name": "fish" - }, - { - "code": "1f365", - "name": "fish_cake" - }, - { - "code": "1f3a3", - "name": "fishing_pole_and_fish" - }, - { - "code": "270a", - "name": "fist" - }, - { - "code": "0035-20e3", - "name": "five" - }, - { - "code": "1f3f4", - "name": "flag_black" - }, - { - "code": "1f3f3", - "name": "flag_white" - }, - { - "code": "1f38f", - "name": "flags" - }, - { - "code": "1f526", - "name": "flashlight" - }, - { - "code": "269c", - "name": "fleur-de-lis" - }, - { - "code": "1f4be", - "name": "floppy_disk" - }, - { - "code": "1f3b4", - "name": "flower_playing_cards" - }, - { - "code": "1f633", - "name": "flushed" - }, - { - "code": "1f32b", - "name": "fog" - }, - { - "code": "1f301", - "name": "foggy" - }, - { - "code": "1f3c8", - "name": "football" - }, - { - "code": "1f463", - "name": "footprints" - }, - { - "code": "1f374", - "name": "fork_and_knife" - }, - { - "code": "1f37d", - "name": "fork_knife_plate" - }, - { - "code": "26f2", - "name": "fountain" - }, - { - "code": "0034-20e3", - "name": "four" - }, - { - "code": "1f340", - "name": "four_leaf_clover" - }, - { - "code": "1f5bc", - "name": "frame_photo" - }, - { - "code": "1f193", - "name": "free" - }, - { - "code": "1f364", - "name": "fried_shrimp" - }, - { - "code": "1f35f", - "name": "fries" - }, - { - "code": "1f438", - "name": "frog" - }, - { - "code": "1f626", - "name": "frowning" - }, - { - "code": "2639", - "name": "frowning2" - }, - { - "code": "26fd", - "name": "fuelpump" - }, - { - "code": "1f315", - "name": "full_moon" - }, - { - "code": "1f31d", - "name": "full_moon_with_face" - }, - { - "code": "1f3b2", - "name": "game_die" - }, - { - "code": "2699", - "name": "gear" - }, - { - "code": "1f48e", - "name": "gem" - }, - { - "code": "264a", - "name": "gemini" - }, - { - "code": "1f47b", - "name": "ghost" - }, - { - "code": "1f381", - "name": "gift" - }, - { - "code": "1f49d", - "name": "gift_heart" - }, - { - "code": "1f467", - "name": "girl" - }, - { - "code": "1f310", - "name": "globe_with_meridians" - }, - { - "code": "1f410", - "name": "goat" - }, - { - "code": "26f3", - "name": "golf" - }, - { - "code": "1f3cc", - "name": "golfer" - }, - { - "code": "1f347", - "name": "grapes" - }, - { - "code": "1f34f", - "name": "green_apple" - }, - { - "code": "1f4d7", - "name": "green_book" - }, - { - "code": "1f49a", - "name": "green_heart" - }, - { - "code": "2755", - "name": "grey_exclamation" - }, - { - "code": "2754", - "name": "grey_question" + "code": "1f600", + "name": "grinning" }, { "code": "1f62c", @@ -1568,1141 +12,441 @@ "code": "1f601", "name": "grin" }, - { - "code": "1f600", - "name": "grinning" - }, - { - "code": "1f482", - "name": "guardsman" - }, - { - "code": "1f3b8", - "name": "guitar" - }, - { - "code": "1f52b", - "name": "gun" - }, - { - "code": "1f487", - "name": "haircut" - }, - { - "code": "1f354", - "name": "hamburger" - }, - { - "code": "1f528", - "name": "hammer" - }, - { - "code": "2692", - "name": "hammer_pick" - }, - { - "code": "1f439", - "name": "hamster" - }, - { - "code": "1f590", - "name": "hand_splayed" - }, - { - "code": "1f45c", - "name": "handbag" - }, - { - "code": "0023-20e3", - "name": "hash" - }, - { - "code": "1f425", - "name": "hatched_chick" - }, - { - "code": "1f423", - "name": "hatching_chick" - }, - { - "code": "1f915", - "name": "head_bandage" - }, - { - "code": "1f3a7", - "name": "headphones" - }, - { - "code": "1f649", - "name": "hear_no_evil" - }, - { - "code": "2764", - "name": "heart" - }, - { - "code": "1f49f", - "name": "heart_decoration" - }, - { - "code": "2763", - "name": "heart_exclamation" - }, - { - "code": "1f60d", - "name": "heart_eyes" - }, - { - "code": "1f63b", - "name": "heart_eyes_cat" - }, - { - "code": "1f493", - "name": "heartbeat" - }, - { - "code": "1f497", - "name": "heartpulse" - }, - { - "code": "2665", - "name": "hearts" - }, - { - "code": "2714", - "name": "heavy_check_mark" - }, - { - "code": "2797", - "name": "heavy_division_sign" - }, - { - "code": "1f4b2", - "name": "heavy_dollar_sign" - }, - { - "code": "2796", - "name": "heavy_minus_sign" - }, - { - "code": "2716", - "name": "heavy_multiplication_x" - }, - { - "code": "2795", - "name": "heavy_plus_sign" - }, - { - "code": "1f681", - "name": "helicopter" - }, - { - "code": "26d1", - "name": "helmet_with_cross" - }, - { - "code": "1f33f", - "name": "herb" - }, - { - "code": "1f33a", - "name": "hibiscus" - }, - { - "code": "1f506", - "name": "high_brightness" - }, - { - "code": "1f460", - "name": "high_heel" - }, - { - "code": "1f3d2", - "name": "hockey" - }, - { - "code": "1f573", - "name": "hole" - }, - { - "code": "1f3d8", - "name": "homes" - }, - { - "code": "1f36f", - "name": "honey_pot" - }, - { - "code": "1f434", - "name": "horse" - }, - { - "code": "1f3c7", - "name": "horse_racing" - }, - { - "code": "1f3e5", - "name": "hospital" - }, - { - "code": "1f336", - "name": "hot_pepper" - }, - { - "code": "1f32d", - "name": "hotdog" - }, - { - "code": "1f3e8", - "name": "hotel" - }, - { - "code": "2668", - "name": "hotsprings" - }, - { - "code": "231b", - "name": "hourglass" - }, - { - "code": "23f3", - "name": "hourglass_flowing_sand" - }, - { - "code": "1f3e0", - "name": "house" - }, - { - "code": "1f3da", - "name": "house_abandoned" - }, - { - "code": "1f3e1", - "name": "house_with_garden" - }, - { - "code": "1f917", - "name": "hugging" - }, - { - "code": "1f62f", - "name": "hushed" - }, - { - "code": "1f368", - "name": "ice_cream" - }, - { - "code": "26f8", - "name": "ice_skate" - }, - { - "code": "1f366", - "name": "icecream" - }, - { - "code": "1f194", - "name": "id" - }, - { - "code": "1f250", - "name": "ideograph_advantage" - }, - { - "code": "1f47f", - "name": "imp" - }, - { - "code": "1f4e5", - "name": "inbox_tray" - }, - { - "code": "1f4e8", - "name": "incoming_envelope" - }, - { - "code": "1f481", - "name": "information_desk_person" - }, - { - "code": "2139", - "name": "information_source" - }, - { - "code": "1f607", - "name": "innocent" - }, - { - "code": "2049", - "name": "interrobang" - }, - { - "code": "1f4f1", - "name": "iphone" - }, - { - "code": "1f3dd", - "name": "island" - }, - { - "code": "1f3ee", - "name": "izakaya_lantern" - }, - { - "code": "1f383", - "name": "jack_o_lantern" - }, - { - "code": "1f5fe", - "name": "japan" - }, - { - "code": "1f3ef", - "name": "japanese_castle" - }, - { - "code": "1f47a", - "name": "japanese_goblin" - }, - { - "code": "1f479", - "name": "japanese_ogre" - }, - { - "code": "1f456", - "name": "jeans" - }, { "code": "1f602", "name": "joy" }, { - "code": "1f639", - "name": "joy_cat" + "code": "1f923", + "name": "rofl" }, { - "code": "1f579", - "name": "joystick" + "code": "1f603", + "name": "smiley" }, { - "code": "1f54b", - "name": "kaaba" + "code": "1f604", + "name": "smile" }, { - "code": "1f511", - "name": "key" - }, - { - "code": "1f5dd", - "name": "key2" - }, - { - "code": "2328", - "name": "keyboard" - }, - { - "code": "1f458", - "name": "kimono" - }, - { - "code": "1f48b", - "name": "kiss" - }, - { - "code": "1f617", - "name": "kissing" - }, - { - "code": "1f63d", - "name": "kissing_cat" - }, - { - "code": "1f61a", - "name": "kissing_closed_eyes" - }, - { - "code": "1f618", - "name": "kissing_heart" - }, - { - "code": "1f619", - "name": "kissing_smiling_eyes" - }, - { - "code": "1f52a", - "name": "knife" - }, - { - "code": "1f428", - "name": "koala" - }, - { - "code": "1f201", - "name": "koko" - }, - { - "code": "1f3f7", - "name": "label" - }, - { - "code": "1f535", - "name": "large_blue_circle" - }, - { - "code": "1f537", - "name": "large_blue_diamond" - }, - { - "code": "1f536", - "name": "large_orange_diamond" - }, - { - "code": "1f317", - "name": "last_quarter_moon" - }, - { - "code": "1f31c", - "name": "last_quarter_moon_with_face" + "code": "1f605", + "name": "sweat_smile" }, { "code": "1f606", "name": "laughing" }, { - "code": "1f343", - "name": "leaves" + "code": "1f607", + "name": "innocent" }, { - "code": "1f4d2", - "name": "ledger" + "code": "1f609", + "name": "wink" }, { - "code": "1f6c5", - "name": "left_luggage" + "code": "1f60a", + "name": "blush" }, { - "code": "2194", - "name": "left_right_arrow" + "code": "1f642", + "name": "slightly_smiling_face" }, { - "code": "21a9", - "name": "leftwards_arrow_with_hook" + "code": "1f643", + "name": "upside_down_face" }, { - "code": "1f34b", - "name": "lemon" + "code": "263a", + "name": "relaxed" }, { - "code": "264c", - "name": "leo" + "code": "1f60b", + "name": "yum" }, { - "code": "1f406", - "name": "leopard" + "code": "1f60c", + "name": "relieved" }, { - "code": "1f39a", - "name": "level_slider" + "code": "1f60d", + "name": "heart_eyes" }, { - "code": "1f574", - "name": "levitate" + "code": "1f618", + "name": "kissing_heart" }, { - "code": "264e", - "name": "libra" + "code": "1f617", + "name": "kissing" }, { - "code": "1f3cb", - "name": "lifter" + "code": "1f619", + "name": "kissing_smiling_eyes" }, { - "code": "1f688", - "name": "light_rail" + "code": "1f61a", + "name": "kissing_closed_eyes" }, { - "code": "1f517", - "name": "link" + "code": "1f61c", + "name": "stuck_out_tongue_winking_eye" }, { - "code": "1f981", - "name": "lion_face" + "code": "1f61d", + "name": "stuck_out_tongue_closed_eyes" }, { - "code": "1f444", - "name": "lips" - }, - { - "code": "1f484", - "name": "lipstick" - }, - { - "code": "1f512", - "name": "lock" - }, - { - "code": "1f50f", - "name": "lock_with_ink_pen" - }, - { - "code": "1f36d", - "name": "lollipop" - }, - { - "code": "27bf", - "name": "loop" - }, - { - "code": "1f50a", - "name": "loud_sound" - }, - { - "code": "1f4e2", - "name": "loudspeaker" - }, - { - "code": "1f3e9", - "name": "love_hotel" - }, - { - "code": "1f48c", - "name": "love_letter" - }, - { - "code": "1f505", - "name": "low_brightness" - }, - { - "code": "24c2", - "name": "m" - }, - { - "code": "1f50d", - "name": "mag" - }, - { - "code": "1f50e", - "name": "mag_right" - }, - { - "code": "1f004", - "name": "mahjong" - }, - { - "code": "1f4eb", - "name": "mailbox" - }, - { - "code": "1f4ea", - "name": "mailbox_closed" - }, - { - "code": "1f4ec", - "name": "mailbox_with_mail" - }, - { - "code": "1f4ed", - "name": "mailbox_with_no_mail" - }, - { - "code": "1f468", - "name": "man" - }, - { - "code": "1f472", - "name": "man_with_gua_pi_mao" - }, - { - "code": "1f473", - "name": "man_with_turban" - }, - { - "code": "1f45e", - "name": "mans_shoe" - }, - { - "code": "1f5fa", - "name": "map" - }, - { - "code": "1f341", - "name": "maple_leaf" - }, - { - "code": "1f637", - "name": "mask" - }, - { - "code": "1f486", - "name": "massage" - }, - { - "code": "1f356", - "name": "meat_on_bone" - }, - { - "code": "1f3c5", - "name": "medal" - }, - { - "code": "1f4e3", - "name": "mega" - }, - { - "code": "1f348", - "name": "melon" - }, - { - "code": "1f54e", - "name": "menorah" - }, - { - "code": "1f6b9", - "name": "mens" - }, - { - "code": "1f918", - "name": "metal" - }, - { - "code": "1f687", - "name": "metro" - }, - { - "code": "1f3a4", - "name": "microphone" - }, - { - "code": "1f399", - "name": "microphone2" - }, - { - "code": "1f52c", - "name": "microscope" - }, - { - "code": "1f595", - "name": "middle_finger" - }, - { - "code": "1f396", - "name": "military_medal" - }, - { - "code": "1f30c", - "name": "milky_way" - }, - { - "code": "1f690", - "name": "minibus" - }, - { - "code": "1f4bd", - "name": "minidisc" - }, - { - "code": "1f4f4", - "name": "mobile_phone_off" + "code": "1f61b", + "name": "stuck_out_tongue" }, { "code": "1f911", - "name": "money_mouth" - }, - { - "code": "1f4b8", - "name": "money_with_wings" - }, - { - "code": "1f4b0", - "name": "moneybag" - }, - { - "code": "1f412", - "name": "monkey" - }, - { - "code": "1f435", - "name": "monkey_face" - }, - { - "code": "1f69d", - "name": "monorail" - }, - { - "code": "1f393", - "name": "mortar_board" - }, - { - "code": "1f54c", - "name": "mosque" - }, - { - "code": "1f6e5", - "name": "motorboat" - }, - { - "code": "1f3cd", - "name": "motorcycle" - }, - { - "code": "1f6e3", - "name": "motorway" - }, - { - "code": "1f5fb", - "name": "mount_fuji" - }, - { - "code": "26f0", - "name": "mountain" - }, - { - "code": "1f6b5", - "name": "mountain_bicyclist" - }, - { - "code": "1f6a0", - "name": "mountain_cableway" - }, - { - "code": "1f69e", - "name": "mountain_railway" - }, - { - "code": "1f3d4", - "name": "mountain_snow" - }, - { - "code": "1f42d", - "name": "mouse" - }, - { - "code": "1f401", - "name": "mouse2" - }, - { - "code": "1f5b1", - "name": "mouse_three_button" - }, - { - "code": "1f3a5", - "name": "movie_camera" - }, - { - "code": "1f5ff", - "name": "moyai" - }, - { - "code": "1f4aa", - "name": "muscle" - }, - { - "code": "1f344", - "name": "mushroom" - }, - { - "code": "1f3b9", - "name": "musical_keyboard" - }, - { - "code": "1f3b5", - "name": "musical_note" - }, - { - "code": "1f3bc", - "name": "musical_score" - }, - { - "code": "1f507", - "name": "mute" - }, - { - "code": "1f485", - "name": "nail_care" - }, - { - "code": "1f4db", - "name": "name_badge" - }, - { - "code": "1f454", - "name": "necktie" - }, - { - "code": "274e", - "name": "negative_squared_cross_mark" + "name": "money_mouth_face" }, { "code": "1f913", - "name": "nerd" + "name": "nerd_face" }, { - "code": "1f610", - "name": "neutral_face" + "code": "1f60e", + "name": "sunglasses" }, { - "code": "1f195", - "name": "new" + "code": "1f921", + "name": "clown_face" }, { - "code": "1f311", - "name": "new_moon" + "code": "1f920", + "name": "cowboy_hat_face" }, { - "code": "1f31a", - "name": "new_moon_with_face" + "code": "1f917", + "name": "hugs" }, { - "code": "1f4f0", - "name": "newspaper" - }, - { - "code": "1f5de", - "name": "newspaper2" - }, - { - "code": "1f196", - "name": "ng" - }, - { - "code": "1f303", - "name": "night_with_stars" - }, - { - "code": "0039-20e3", - "name": "nine" - }, - { - "code": "1f515", - "name": "no_bell" - }, - { - "code": "1f6b3", - "name": "no_bicycles" - }, - { - "code": "26d4", - "name": "no_entry" - }, - { - "code": "1f6ab", - "name": "no_entry_sign" - }, - { - "code": "1f645", - "name": "no_good" - }, - { - "code": "1f4f5", - "name": "no_mobile_phones" + "code": "1f60f", + "name": "smirk" }, { "code": "1f636", "name": "no_mouth" }, { - "code": "1f6b7", - "name": "no_pedestrians" + "code": "1f610", + "name": "neutral_face" }, { - "code": "1f6ad", - "name": "no_smoking" + "code": "1f611", + "name": "expressionless" }, { - "code": "1f6b1", - "name": "non-potable_water" + "code": "1f612", + "name": "unamused" }, { - "code": "1f443", - "name": "nose" + "code": "1f644", + "name": "roll_eyes" }, { - "code": "1f4d3", - "name": "notebook" + "code": "1f914", + "name": "thinking" }, { - "code": "1f4d4", - "name": "notebook_with_decorative_cover" + "code": "1f925", + "name": "lying_face" }, { - "code": "1f5d2", - "name": "notepad_spiral" + "code": "1f633", + "name": "flushed" }, { - "code": "1f3b6", - "name": "notes" + "code": "1f61e", + "name": "disappointed" }, { - "code": "1f529", - "name": "nut_and_bolt" + "code": "1f61f", + "name": "worried" }, { - "code": "2b55", - "name": "o" + "code": "1f620", + "name": "angry" }, { - "code": "1f17e", - "name": "o2" - }, - { - "code": "1f30a", - "name": "ocean" - }, - { - "code": "1f419", - "name": "octopus" - }, - { - "code": "1f362", - "name": "oden" - }, - { - "code": "1f3e2", - "name": "office" - }, - { - "code": "1f6e2", - "name": "oil" - }, - { - "code": "1f197", - "name": "ok" - }, - { - "code": "1f44c", - "name": "ok_hand" - }, - { - "code": "1f646", - "name": "ok_woman" - }, - { - "code": "1f474", - "name": "older_man" - }, - { - "code": "1f475", - "name": "older_woman" - }, - { - "code": "1f549", - "name": "om_symbol" - }, - { - "code": "1f51b", - "name": "on" - }, - { - "code": "1f698", - "name": "oncoming_automobile" - }, - { - "code": "1f68d", - "name": "oncoming_bus" - }, - { - "code": "1f694", - "name": "oncoming_police_car" - }, - { - "code": "1f696", - "name": "oncoming_taxi" - }, - { - "code": "0031-20e3", - "name": "one" - }, - { - "code": "1f4c2", - "name": "open_file_folder" - }, - { - "code": "1f450", - "name": "open_hands" - }, - { - "code": "1f62e", - "name": "open_mouth" - }, - { - "code": "26ce", - "name": "ophiuchus" - }, - { - "code": "1f4d9", - "name": "orange_book" - }, - { - "code": "2626", - "name": "orthodox_cross" - }, - { - "code": "1f4e4", - "name": "outbox_tray" - }, - { - "code": "1f402", - "name": "ox" - }, - { - "code": "1f4e6", - "name": "package" - }, - { - "code": "1f4c4", - "name": "page_facing_up" - }, - { - "code": "1f4c3", - "name": "page_with_curl" - }, - { - "code": "1f4df", - "name": "pager" - }, - { - "code": "1f58c", - "name": "paintbrush" - }, - { - "code": "1f334", - "name": "palm_tree" - }, - { - "code": "1f43c", - "name": "panda_face" - }, - { - "code": "1f4ce", - "name": "paperclip" - }, - { - "code": "1f587", - "name": "paperclips" - }, - { - "code": "1f3de", - "name": "park" - }, - { - "code": "1f17f", - "name": "parking" - }, - { - "code": "303d", - "name": "part_alternation_mark" - }, - { - "code": "26c5", - "name": "partly_sunny" - }, - { - "code": "1f6c2", - "name": "passport_control" - }, - { - "code": "23f8", - "name": "pause_button" - }, - { - "code": "262e", - "name": "peace" - }, - { - "code": "1f351", - "name": "peach" - }, - { - "code": "1f350", - "name": "pear" - }, - { - "code": "1f58a", - "name": "pen_ballpoint" - }, - { - "code": "1f58b", - "name": "pen_fountain" - }, - { - "code": "1f4dd", - "name": "pencil" - }, - { - "code": "270f", - "name": "pencil2" - }, - { - "code": "1f427", - "name": "penguin" + "code": "1f621", + "name": "rage" }, { "code": "1f614", "name": "pensive" }, { - "code": "1f3ad", - "name": "performing_arts" + "code": "1f615", + "name": "confused" + }, + { + "code": "1f641", + "name": "slightly_frowning_face" + }, + { + "code": "2639", + "name": "frowning_face" }, { "code": "1f623", "name": "persevere" }, { - "code": "1f64d", - "name": "person_frowning" + "code": "1f616", + "name": "confounded" }, { - "code": "1f471", - "name": "person_with_blond_hair" + "code": "1f62b", + "name": "tired_face" }, { - "code": "1f64e", - "name": "person_with_pouting_face" + "code": "1f629", + "name": "weary" }, { - "code": "26cf", - "name": "pick" + "code": "1f624", + "name": "triumph" }, { - "code": "1f437", - "name": "pig" + "code": "1f62e", + "name": "open_mouth" }, { - "code": "1f416", - "name": "pig2" + "code": "1f631", + "name": "scream" }, { - "code": "1f43d", - "name": "pig_nose" + "code": "1f628", + "name": "fearful" }, { - "code": "1f48a", - "name": "pill" + "code": "1f630", + "name": "cold_sweat" }, { - "code": "1f34d", - "name": "pineapple" + "code": "1f62f", + "name": "hushed" }, { - "code": "1f3d3", - "name": "ping_pong" + "code": "1f626", + "name": "frowning" }, { - "code": "2653", - "name": "pisces" + "code": "1f627", + "name": "anguished" }, { - "code": "1f355", - "name": "pizza" + "code": "1f622", + "name": "cry" }, { - "code": "1f6d0", - "name": "place_of_worship" + "code": "1f625", + "name": "disappointed_relieved" }, { - "code": "23ef", - "name": "play_pause" + "code": "1f924", + "name": "drooling_face" + }, + { + "code": "1f62a", + "name": "sleepy" + }, + { + "code": "1f613", + "name": "sweat" + }, + { + "code": "1f62d", + "name": "sob" + }, + { + "code": "1f635", + "name": "dizzy_face" + }, + { + "code": "1f632", + "name": "astonished" + }, + { + "code": "1f910", + "name": "zipper_mouth_face" + }, + { + "code": "1f922", + "name": "nauseated_face" + }, + { + "code": "1f927", + "name": "sneezing_face" + }, + { + "code": "1f637", + "name": "mask" + }, + { + "code": "1f912", + "name": "face_with_thermometer" + }, + { + "code": "1f915", + "name": "face_with_head_bandage" + }, + { + "code": "1f634", + "name": "sleeping" + }, + { + "code": "1f4a4", + "name": "zzz" + }, + { + "code": "1f4a9", + "name": "poop" + }, + { + "code": "1f608", + "name": "smiling_imp" + }, + { + "code": "1f47f", + "name": "imp" + }, + { + "code": "1f479", + "name": "japanese_ogre" + }, + { + "code": "1f47a", + "name": "japanese_goblin" + }, + { + "code": "1f480", + "name": "skull" + }, + { + "code": "1f47b", + "name": "ghost" + }, + { + "code": "1f47d", + "name": "alien" + }, + { + "code": "1f916", + "name": "robot" + }, + { + "code": "1f63a", + "name": "smiley_cat" + }, + { + "code": "1f638", + "name": "smile_cat" + }, + { + "code": "1f639", + "name": "joy_cat" + }, + { + "code": "1f63b", + "name": "heart_eyes_cat" + }, + { + "code": "1f63c", + "name": "smirk_cat" + }, + { + "code": "1f63d", + "name": "kissing_cat" + }, + { + "code": "1f640", + "name": "scream_cat" + }, + { + "code": "1f63f", + "name": "crying_cat_face" + }, + { + "code": "1f63e", + "name": "pouting_cat" + }, + { + "code": "1f64c", + "name": "raised_hands" + }, + { + "code": "1f44f", + "name": "clap" + }, + { + "code": "1f44b", + "name": "wave" + }, + { + "code": "1f919", + "name": "call_me_hand" + }, + { + "code": "1f44a", + "name": "facepunch" + }, + { + "code": "270a", + "name": "fist" + }, + { + "code": "1f91b", + "name": "fist_left" + }, + { + "code": "1f91c", + "name": "fist_right" + }, + { + "code": "270c", + "name": "v" + }, + { + "code": "1f44c", + "name": "ok_hand" + }, + { + "code": "270b", + "name": "raised_hand" + }, + { + "code": "1f91a", + "name": "raised_back_of_hand" + }, + { + "code": "1f450", + "name": "open_hands" + }, + { + "code": "1f4aa", + "name": "muscle" + }, + { + "code": "1f64f", + "name": "pray" + }, + { + "code": "1f91d", + "name": "handshake" + }, + { + "code": "261d", + "name": "point_up" + }, + { + "code": "1f446", + "name": "point_up_2" }, { "code": "1f447", @@ -2717,1012 +461,348 @@ "name": "point_right" }, { - "code": "261d", - "name": "point_up" + "code": "1f595", + "name": "fu" }, { - "code": "1f446", - "name": "point_up_2" + "code": "1f590", + "name": "raised_hand_with_fingers_splayed" }, { - "code": "1f693", - "name": "police_car" + "code": "1f918", + "name": "metal" }, { - "code": "1f429", - "name": "poodle" + "code": "1f91e", + "name": "crossed_fingers" }, { - "code": "1f4a9", - "name": "poop" + "code": "1f596", + "name": "vulcan_salute" }, { - "code": "1f37f", - "name": "popcorn" + "code": "270d", + "name": "writing_hand" }, { - "code": "1f3e3", - "name": "post_office" + "code": "1f933", + "name": "selfie" }, { - "code": "1f4ef", - "name": "postal_horn" + "code": "1f485", + "name": "nail_care" }, { - "code": "1f4ee", - "name": "postbox" - }, - { - "code": "1f6b0", - "name": "potable_water" - }, - { - "code": "1f45d", - "name": "pouch" - }, - { - "code": "1f357", - "name": "poultry_leg" - }, - { - "code": "1f4b7", - "name": "pound" - }, - { - "code": "1f63e", - "name": "pouting_cat" - }, - { - "code": "1f64f", - "name": "pray" - }, - { - "code": "1f4ff", - "name": "prayer_beads" - }, - { - "code": "1f478", - "name": "princess" - }, - { - "code": "1f5a8", - "name": "printer" - }, - { - "code": "1f4fd", - "name": "projector" - }, - { - "code": "1f44a", - "name": "punch" - }, - { - "code": "1f49c", - "name": "purple_heart" - }, - { - "code": "1f45b", - "name": "purse" - }, - { - "code": "1f4cc", - "name": "pushpin" - }, - { - "code": "1f6ae", - "name": "put_litter_in_its_place" - }, - { - "code": "2753", - "name": "question" - }, - { - "code": "1f430", - "name": "rabbit" - }, - { - "code": "1f407", - "name": "rabbit2" - }, - { - "code": "1f3ce", - "name": "race_car" - }, - { - "code": "1f40e", - "name": "racehorse" - }, - { - "code": "1f4fb", - "name": "radio" - }, - { - "code": "1f518", - "name": "radio_button" - }, - { - "code": "2622", - "name": "radioactive" - }, - { - "code": "1f621", - "name": "rage" - }, - { - "code": "1f683", - "name": "railway_car" - }, - { - "code": "1f6e4", - "name": "railway_track" - }, - { - "code": "1f308", - "name": "rainbow" - }, - { - "code": "270b", - "name": "raised_hand" - }, - { - "code": "1f64c", - "name": "raised_hands" - }, - { - "code": "1f64b", - "name": "raising_hand" - }, - { - "code": "1f40f", - "name": "ram" - }, - { - "code": "1f35c", - "name": "ramen" - }, - { - "code": "1f400", - "name": "rat" - }, - { - "code": "23fa", - "name": "record_button" - }, - { - "code": "267b", - "name": "recycle" - }, - { - "code": "1f697", - "name": "red_car" - }, - { - "code": "1f534", - "name": "red_circle" - }, - { - "code": "00ae", - "name": "registered" - }, - { - "code": "263a", - "name": "relaxed" - }, - { - "code": "1f60c", - "name": "relieved" - }, - { - "code": "1f397", - "name": "reminder_ribbon" - }, - { - "code": "1f501", - "name": "repeat" - }, - { - "code": "1f502", - "name": "repeat_one" - }, - { - "code": "1f6bb", - "name": "restroom" - }, - { - "code": "1f49e", - "name": "revolving_hearts" - }, - { - "code": "23ea", - "name": "rewind" - }, - { - "code": "1f380", - "name": "ribbon" - }, - { - "code": "1f35a", - "name": "rice" - }, - { - "code": "1f359", - "name": "rice_ball" - }, - { - "code": "1f358", - "name": "rice_cracker" - }, - { - "code": "1f391", - "name": "rice_scene" - }, - { - "code": "1f48d", - "name": "ring" - }, - { - "code": "1f916", - "name": "robot" - }, - { - "code": "1f680", - "name": "rocket" - }, - { - "code": "1f3a2", - "name": "roller_coaster" - }, - { - "code": "1f644", - "name": "rolling_eyes" - }, - { - "code": "1f413", - "name": "rooster" - }, - { - "code": "1f339", - "name": "rose" - }, - { - "code": "1f3f5", - "name": "rosette" - }, - { - "code": "1f6a8", - "name": "rotating_light" - }, - { - "code": "1f4cd", - "name": "round_pushpin" - }, - { - "code": "1f6a3", - "name": "rowboat" - }, - { - "code": "1f3c9", - "name": "rugby_football" - }, - { - "code": "1f3c3", - "name": "runner" - }, - { - "code": "1f3bd", - "name": "running_shirt_with_sash" - }, - { - "code": "1f202", - "name": "sa" - }, - { - "code": "2650", - "name": "sagittarius" - }, - { - "code": "26f5", - "name": "sailboat" - }, - { - "code": "1f376", - "name": "sake" - }, - { - "code": "1f461", - "name": "sandal" - }, - { - "code": "1f385", - "name": "santa" - }, - { - "code": "1f4e1", - "name": "satellite" - }, - { - "code": "1f6f0", - "name": "satellite_orbital" - }, - { - "code": "1f3b7", - "name": "saxophone" - }, - { - "code": "2696", - "name": "scales" - }, - { - "code": "1f3eb", - "name": "school" - }, - { - "code": "1f392", - "name": "school_satchel" - }, - { - "code": "2702", - "name": "scissors" - }, - { - "code": "1f982", - "name": "scorpion" - }, - { - "code": "264f", - "name": "scorpius" - }, - { - "code": "1f631", - "name": "scream" - }, - { - "code": "1f640", - "name": "scream_cat" - }, - { - "code": "1f4dc", - "name": "scroll" - }, - { - "code": "1f4ba", - "name": "seat" - }, - { - "code": "3299", - "name": "secret" - }, - { - "code": "1f648", - "name": "see_no_evil" - }, - { - "code": "1f331", - "name": "seedling" - }, - { - "code": "0037-20e3", - "name": "seven" - }, - { - "code": "2618", - "name": "shamrock" - }, - { - "code": "1f367", - "name": "shaved_ice" - }, - { - "code": "1f411", - "name": "sheep" - }, - { - "code": "1f41a", - "name": "shell" - }, - { - "code": "1f6e1", - "name": "shield" - }, - { - "code": "26e9", - "name": "shinto_shrine" - }, - { - "code": "1f6a2", - "name": "ship" - }, - { - "code": "1f455", - "name": "shirt" - }, - { - "code": "1f6cd", - "name": "shopping_bags" - }, - { - "code": "1f6bf", - "name": "shower" - }, - { - "code": "1f4f6", - "name": "signal_strength" - }, - { - "code": "0036-20e3", - "name": "six" - }, - { - "code": "1f52f", - "name": "six_pointed_star" - }, - { - "code": "1f3bf", - "name": "ski" - }, - { - "code": "26f7", - "name": "skier" - }, - { - "code": "1f480", - "name": "skull" - }, - { - "code": "2620", - "name": "skull_crossbones" - }, - { - "code": "1f634", - "name": "sleeping" - }, - { - "code": "1f6cc", - "name": "sleeping_accommodation" - }, - { - "code": "1f62a", - "name": "sleepy" - }, - { - "code": "1f641", - "name": "slight_frown" - }, - { - "code": "1f642", - "name": "slight_smile" - }, - { - "code": "1f3b0", - "name": "slot_machine" - }, - { - "code": "1f539", - "name": "small_blue_diamond" - }, - { - "code": "1f538", - "name": "small_orange_diamond" - }, - { - "code": "1f53a", - "name": "small_red_triangle" - }, - { - "code": "1f53b", - "name": "small_red_triangle_down" - }, - { - "code": "1f604", - "name": "smile" - }, - { - "code": "1f638", - "name": "smile_cat" - }, - { - "code": "1f603", - "name": "smiley" - }, - { - "code": "1f63a", - "name": "smiley_cat" - }, - { - "code": "1f608", - "name": "smiling_imp" - }, - { - "code": "1f60f", - "name": "smirk" - }, - { - "code": "1f63c", - "name": "smirk_cat" - }, - { - "code": "1f6ac", - "name": "smoking" - }, - { - "code": "1f40c", - "name": "snail" - }, - { - "code": "1f40d", - "name": "snake" - }, - { - "code": "1f3c2", - "name": "snowboarder" - }, - { - "code": "2744", - "name": "snowflake" - }, - { - "code": "26c4", - "name": "snowman" - }, - { - "code": "2603", - "name": "snowman2" - }, - { - "code": "1f62d", - "name": "sob" - }, - { - "code": "26bd", - "name": "soccer" - }, - { - "code": "1f51c", - "name": "soon" - }, - { - "code": "1f198", - "name": "sos" - }, - { - "code": "1f509", - "name": "sound" - }, - { - "code": "1f47e", - "name": "space_invader" - }, - { - "code": "2660", - "name": "spades" - }, - { - "code": "1f35d", - "name": "spaghetti" - }, - { - "code": "2747", - "name": "sparkle" - }, - { - "code": "1f387", - "name": "sparkler" - }, - { - "code": "2728", - "name": "sparkles" - }, - { - "code": "1f496", - "name": "sparkling_heart" - }, - { - "code": "1f64a", - "name": "speak_no_evil" - }, - { - "code": "1f508", - "name": "speaker" - }, - { - "code": "1f5e3", - "name": "speaking_head" - }, - { - "code": "1f4ac", - "name": "speech_balloon" - }, - { - "code": "1f6a4", - "name": "speedboat" - }, - { - "code": "1f577", - "name": "spider" - }, - { - "code": "1f578", - "name": "spider_web" - }, - { - "code": "1f575", - "name": "spy" - }, - { - "code": "1f3df", - "name": "stadium" - }, - { - "code": "2b50", - "name": "star" - }, - { - "code": "1f31f", - "name": "star2" - }, - { - "code": "262a", - "name": "star_and_crescent" - }, - { - "code": "2721", - "name": "star_of_david" - }, - { - "code": "1f320", - "name": "stars" - }, - { - "code": "1f689", - "name": "station" - }, - { - "code": "1f5fd", - "name": "statue_of_liberty" - }, - { - "code": "1f682", - "name": "steam_locomotive" - }, - { - "code": "1f372", - "name": "stew" - }, - { - "code": "23f9", - "name": "stop_button" - }, - { - "code": "23f1", - "name": "stopwatch" - }, - { - "code": "1f4cf", - "name": "straight_ruler" - }, - { - "code": "1f353", - "name": "strawberry" - }, - { - "code": "1f61b", - "name": "stuck_out_tongue" - }, - { - "code": "1f61d", - "name": "stuck_out_tongue_closed_eyes" - }, - { - "code": "1f61c", - "name": "stuck_out_tongue_winking_eye" - }, - { - "code": "1f31e", - "name": "sun_with_face" - }, - { - "code": "1f33b", - "name": "sunflower" - }, - { - "code": "1f60e", - "name": "sunglasses" - }, - { - "code": "2600", - "name": "sunny" - }, - { - "code": "1f305", - "name": "sunrise" - }, - { - "code": "1f304", - "name": "sunrise_over_mountains" - }, - { - "code": "1f3c4", - "name": "surfer" - }, - { - "code": "1f363", - "name": "sushi" - }, - { - "code": "1f69f", - "name": "suspension_railway" - }, - { - "code": "1f613", - "name": "sweat" - }, - { - "code": "1f4a6", - "name": "sweat_drops" - }, - { - "code": "1f605", - "name": "sweat_smile" - }, - { - "code": "1f360", - "name": "sweet_potato" - }, - { - "code": "1f3ca", - "name": "swimmer" - }, - { - "code": "1f523", - "name": "symbols" - }, - { - "code": "1f54d", - "name": "synagogue" - }, - { - "code": "1f489", - "name": "syringe" - }, - { - "code": "1f32e", - "name": "taco" - }, - { - "code": "1f389", - "name": "tada" - }, - { - "code": "1f38b", - "name": "tanabata_tree" - }, - { - "code": "1f34a", - "name": "tangerine" - }, - { - "code": "2649", - "name": "taurus" - }, - { - "code": "1f695", - "name": "taxi" - }, - { - "code": "1f375", - "name": "tea" - }, - { - "code": "260e", - "name": "telephone" - }, - { - "code": "1f4de", - "name": "telephone_receiver" - }, - { - "code": "1f52d", - "name": "telescope" - }, - { - "code": "1f51f", - "name": "ten" - }, - { - "code": "1f3be", - "name": "tennis" - }, - { - "code": "26fa", - "name": "tent" - }, - { - "code": "1f321", - "name": "thermometer" - }, - { - "code": "1f912", - "name": "thermometer_face" - }, - { - "code": "1f914", - "name": "thinking" - }, - { - "code": "1f4ad", - "name": "thought_balloon" - }, - { - "code": "0033-20e3", - "name": "three" - }, - { - "code": "1f44e", - "name": "thumbsdown" - }, - { - "code": "1f44d", - "name": "thumbsup" - }, - { - "code": "26c8", - "name": "thunder_cloud_rain" - }, - { - "code": "1f3ab", - "name": "ticket" - }, - { - "code": "1f39f", - "name": "tickets" - }, - { - "code": "1f42f", - "name": "tiger" - }, - { - "code": "1f405", - "name": "tiger2" - }, - { - "code": "23f2", - "name": "timer" - }, - { - "code": "1f62b", - "name": "tired_face" - }, - { - "code": "2122", - "name": "tm" - }, - { - "code": "1f6bd", - "name": "toilet" - }, - { - "code": "1f5fc", - "name": "tokyo_tower" - }, - { - "code": "1f345", - "name": "tomato" + "code": "1f444", + "name": "lips" }, { "code": "1f445", "name": "tongue" }, { - "code": "1f6e0", - "name": "tools" + "code": "1f442", + "name": "ear" }, { - "code": "1f51d", - "name": "top" + "code": "1f443", + "name": "nose" }, { - "code": "1f3a9", - "name": "tophat" + "code": "1f441", + "name": "eye" }, { - "code": "23ed", - "name": "track_next" + "code": "1f440", + "name": "eyes" }, { - "code": "23ee", - "name": "track_previous" + "code": "1f464", + "name": "bust_in_silhouette" }, { - "code": "1f5b2", - "name": "trackball" + "code": "1f465", + "name": "busts_in_silhouette" }, { - "code": "1f69c", - "name": "tractor" + "code": "1f5e3", + "name": "speaking_head" }, { - "code": "1f6a5", - "name": "traffic_light" + "code": "1f476", + "name": "baby" }, { - "code": "1f68b", - "name": "train" + "code": "1f466", + "name": "boy" }, { - "code": "1f686", - "name": "train2" + "code": "1f467", + "name": "girl" }, { - "code": "1f68a", - "name": "tram" + "code": "1f468", + "name": "man" }, { - "code": "1f6a9", - "name": "triangular_flag_on_post" + "code": "1f469", + "name": "woman" }, { - "code": "1f4d0", - "name": "triangular_ruler" + "code": "1f471-200d-2640-fe0f", + "name": "blonde_woman" }, { - "code": "1f531", - "name": "trident" + "code": "1f471", + "name": "blonde_man" }, { - "code": "1f624", - "name": "triumph" + "code": "1f474", + "name": "older_man" }, { - "code": "1f68e", - "name": "trolleybus" + "code": "1f475", + "name": "older_woman" }, { - "code": "1f3c6", - "name": "trophy" + "code": "1f472", + "name": "man_with_gua_pi_mao" }, { - "code": "1f379", - "name": "tropical_drink" + "code": "1f473-200d-2640-fe0f", + "name": "woman_with_turban" }, { - "code": "1f420", - "name": "tropical_fish" + "code": "1f473", + "name": "man_with_turban" }, { - "code": "1f69a", - "name": "truck" + "code": "1f46e-200d-2640-fe0f", + "name": "policewoman" }, { - "code": "1f3ba", - "name": "trumpet" + "code": "1f46e", + "name": "policeman" }, { - "code": "1f337", - "name": "tulip" + "code": "1f477-200d-2640-fe0f", + "name": "construction_worker_woman" }, { - "code": "1f983", - "name": "turkey" + "code": "1f477", + "name": "construction_worker_man" }, { - "code": "1f422", - "name": "turtle" + "code": "1f482-200d-2640-fe0f", + "name": "guardswoman" }, { - "code": "1f4fa", - "name": "tv" + "code": "1f482", + "name": "guardsman" }, { - "code": "1f500", - "name": "twisted_rightwards_arrows" + "code": "1f575-fe0f-200d-2640-fe0f", + "name": "female_detective" }, { - "code": "0032-20e3", - "name": "two" + "code": "1f575", + "name": "male_detective" }, { - "code": "1f495", - "name": "two_hearts" + "code": "1f469-200d-2695-fe0f", + "name": "woman_health_worker" + }, + { + "code": "1f468-200d-2695-fe0f", + "name": "man_health_worker" + }, + { + "code": "1f469-200d-1f33e", + "name": "woman_farmer" + }, + { + "code": "1f468-200d-1f33e", + "name": "man_farmer" + }, + { + "code": "1f469-200d-1f373", + "name": "woman_cook" + }, + { + "code": "1f468-200d-1f373", + "name": "man_cook" + }, + { + "code": "1f469-200d-1f393", + "name": "woman_student" + }, + { + "code": "1f468-200d-1f393", + "name": "man_student" + }, + { + "code": "1f469-200d-1f3a4", + "name": "woman_singer" + }, + { + "code": "1f468-200d-1f3a4", + "name": "man_singer" + }, + { + "code": "1f469-200d-1f3eb", + "name": "woman_teacher" + }, + { + "code": "1f468-200d-1f3eb", + "name": "man_teacher" + }, + { + "code": "1f469-200d-1f3ed", + "name": "woman_factory_worker" + }, + { + "code": "1f468-200d-1f3ed", + "name": "man_factory_worker" + }, + { + "code": "1f469-200d-1f4bb", + "name": "woman_technologist" + }, + { + "code": "1f468-200d-1f4bb", + "name": "man_technologist" + }, + { + "code": "1f469-200d-1f4bc", + "name": "woman_office_worker" + }, + { + "code": "1f468-200d-1f4bc", + "name": "man_office_worker" + }, + { + "code": "1f469-200d-1f527", + "name": "woman_mechanic" + }, + { + "code": "1f468-200d-1f527", + "name": "man_mechanic" + }, + { + "code": "1f469-200d-1f52c", + "name": "woman_scientist" + }, + { + "code": "1f468-200d-1f52c", + "name": "man_scientist" + }, + { + "code": "1f469-200d-1f3a8", + "name": "woman_artist" + }, + { + "code": "1f468-200d-1f3a8", + "name": "man_artist" + }, + { + "code": "1f469-200d-1f692", + "name": "woman_firefighter" + }, + { + "code": "1f468-200d-1f692", + "name": "man_firefighter" + }, + { + "code": "1f469-200d-2708-fe0f", + "name": "woman_pilot" + }, + { + "code": "1f468-200d-2708-fe0f", + "name": "man_pilot" + }, + { + "code": "1f469-200d-1f680", + "name": "woman_astronaut" + }, + { + "code": "1f468-200d-1f680", + "name": "man_astronaut" + }, + { + "code": "1f469-200d-2696-fe0f", + "name": "woman_judge" + }, + { + "code": "1f468-200d-2696-fe0f", + "name": "man_judge" + }, + { + "code": "1f936", + "name": "mrs_claus" + }, + { + "code": "1f385", + "name": "santa" + }, + { + "code": "1f47c", + "name": "angel" + }, + { + "code": "1f930", + "name": "pregnant_woman" + }, + { + "code": "1f478", + "name": "princess" + }, + { + "code": "1f934", + "name": "prince" + }, + { + "code": "1f470", + "name": "bride_with_veil" + }, + { + "code": "1f935", + "name": "man_in_tuxedo" + }, + { + "code": "1f3c3-200d-2640-fe0f", + "name": "running_woman" + }, + { + "code": "1f3c3", + "name": "running_man" + }, + { + "code": "1f6b6-200d-2640-fe0f", + "name": "walking_woman" + }, + { + "code": "1f6b6", + "name": "walking_man" + }, + { + "code": "1f483", + "name": "dancer" + }, + { + "code": "1f57a", + "name": "man_dancing" + }, + { + "code": "1f46f", + "name": "dancing_women" + }, + { + "code": "1f46f-200d-2642-fe0f", + "name": "dancing_men" + }, + { + "code": "1f46b", + "name": "couple" }, { "code": "1f46c", @@ -3733,352 +813,120 @@ "name": "two_women_holding_hands" }, { - "code": "1f239", - "name": "u5272" + "code": "1f647-200d-2640-fe0f", + "name": "bowing_woman" }, { - "code": "1f234", - "name": "u5408" + "code": "1f647", + "name": "bowing_man" }, { - "code": "1f23a", - "name": "u55b6" + "code": "1f926", + "name": "man_facepalming" }, { - "code": "1f22f", - "name": "u6307" + "code": "1f926-200d-2640-fe0f", + "name": "woman_facepalming" }, { - "code": "1f237", - "name": "u6708" + "code": "1f937", + "name": "woman_shrugging" }, { - "code": "1f236", - "name": "u6709" + "code": "1f937-200d-2642-fe0f", + "name": "man_shrugging" }, { - "code": "1f235", - "name": "u6e80" + "code": "1f481", + "name": "tipping_hand_woman" }, { - "code": "1f21a", - "name": "u7121" + "code": "1f481-200d-2642-fe0f", + "name": "tipping_hand_man" }, { - "code": "1f238", - "name": "u7533" + "code": "1f645", + "name": "no_good_woman" }, { - "code": "1f232", - "name": "u7981" + "code": "1f645-200d-2642-fe0f", + "name": "no_good_man" }, { - "code": "1f233", - "name": "u7a7a" + "code": "1f646", + "name": "ok_woman" }, { - "code": "2614", - "name": "umbrella" + "code": "1f646-200d-2642-fe0f", + "name": "ok_man" }, { - "code": "2602", - "name": "umbrella2" + "code": "1f64b", + "name": "raising_hand_woman" }, { - "code": "1f612", - "name": "unamused" + "code": "1f64b-200d-2642-fe0f", + "name": "raising_hand_man" }, { - "code": "1f51e", - "name": "underage" + "code": "1f64e", + "name": "pouting_woman" }, { - "code": "1f984", - "name": "unicorn" + "code": "1f64e-200d-2642-fe0f", + "name": "pouting_man" }, { - "code": "1f513", - "name": "unlock" + "code": "1f64d", + "name": "frowning_woman" }, { - "code": "1f199", - "name": "up" + "code": "1f64d-200d-2642-fe0f", + "name": "frowning_man" }, { - "code": "1f643", - "name": "upside_down" + "code": "1f487", + "name": "haircut_woman" }, { - "code": "26b1", - "name": "urn" + "code": "1f487-200d-2642-fe0f", + "name": "haircut_man" }, { - "code": "270c", - "name": "v" + "code": "1f486", + "name": "massage_woman" }, { - "code": "1f6a6", - "name": "vertical_traffic_light" + "code": "1f486-200d-2642-fe0f", + "name": "massage_man" }, { - "code": "1f4fc", - "name": "vhs" - }, - { - "code": "1f4f3", - "name": "vibration_mode" - }, - { - "code": "1f4f9", - "name": "video_camera" - }, - { - "code": "1f3ae", - "name": "video_game" - }, - { - "code": "1f3bb", - "name": "violin" - }, - { - "code": "264d", - "name": "virgo" - }, - { - "code": "1f30b", - "name": "volcano" - }, - { - "code": "1f3d0", - "name": "volleyball" - }, - { - "code": "1f19a", - "name": "vs" - }, - { - "code": "1f596", - "name": "vulcan" - }, - { - "code": "1f6b6", - "name": "walking" - }, - { - "code": "1f318", - "name": "waning_crescent_moon" - }, - { - "code": "1f316", - "name": "waning_gibbous_moon" - }, - { - "code": "26a0", - "name": "warning" - }, - { - "code": "1f5d1", - "name": "wastebasket" - }, - { - "code": "231a", - "name": "watch" - }, - { - "code": "1f403", - "name": "water_buffalo" - }, - { - "code": "1f349", - "name": "watermelon" - }, - { - "code": "1f44b", - "name": "wave" - }, - { - "code": "3030", - "name": "wavy_dash" - }, - { - "code": "1f312", - "name": "waxing_crescent_moon" - }, - { - "code": "1f314", - "name": "waxing_gibbous_moon" - }, - { - "code": "1f6be", - "name": "wc" - }, - { - "code": "1f629", - "name": "weary" - }, - { - "code": "1f492", - "name": "wedding" - }, - { - "code": "1f433", - "name": "whale" - }, - { - "code": "1f40b", - "name": "whale2" - }, - { - "code": "2638", - "name": "wheel_of_dharma" - }, - { - "code": "267f", - "name": "wheelchair" - }, - { - "code": "2705", - "name": "white_check_mark" - }, - { - "code": "26aa", - "name": "white_circle" - }, - { - "code": "1f4ae", - "name": "white_flower" - }, - { - "code": "2b1c", - "name": "white_large_square" - }, - { - "code": "25fd", - "name": "white_medium_small_square" - }, - { - "code": "25fb", - "name": "white_medium_square" - }, - { - "code": "25ab", - "name": "white_small_square" - }, - { - "code": "1f533", - "name": "white_square_button" - }, - { - "code": "1f325", - "name": "white_sun_cloud" - }, - { - "code": "1f326", - "name": "white_sun_rain_cloud" - }, - { - "code": "1f324", - "name": "white_sun_small_cloud" - }, - { - "code": "1f32c", - "name": "wind_blowing_face" - }, - { - "code": "1f390", - "name": "wind_chime" - }, - { - "code": "1f377", - "name": "wine_glass" - }, - { - "code": "1f609", - "name": "wink" - }, - { - "code": "1f43a", - "name": "wolf" - }, - { - "code": "1f469", - "name": "woman" - }, - { - "code": "1f45a", - "name": "womans_clothes" - }, - { - "code": "1f452", - "name": "womans_hat" - }, - { - "code": "1f6ba", - "name": "womens" - }, - { - "code": "1f61f", - "name": "worried" - }, - { - "code": "1f527", - "name": "wrench" - }, - { - "code": "270d", - "name": "writing_hand" - }, - { - "code": "274c", - "name": "x" - }, - { - "code": "1f49b", - "name": "yellow_heart" - }, - { - "code": "1f4b4", - "name": "yen" - }, - { - "code": "262f", - "name": "yin_yang" - }, - { - "code": "1f60b", - "name": "yum" - }, - { - "code": "26a1", - "name": "zap" - }, - { - "code": "0030-20e3", - "name": "zero" - }, - { - "code": "1f910", - "name": "zipper_mouth" - }, - { - "code": "1f4a4", - "name": "zzz" + "code": "1f491", + "name": "couple_with_heart_woman_man" }, { "code": "1f469-200d-2764-fe0f-200d-1f469", - "name": "female_couple_with_heart" + "name": "couple_with_heart_woman_woman" }, { "code": "1f468-200d-2764-fe0f-200d-1f468", - "name": "male_couple_with_heart" + "name": "couple_with_heart_man_man" + }, + { + "code": "1f48f", + "name": "couplekiss_man_woman" }, { "code": "1f469-200d-2764-fe0f-200d-1f48b-200d-1f469", - "name": "female_couplekiss" + "name": "couplekiss_woman_woman" }, { "code": "1f468-200d-2764-fe0f-200d-1f48b-200d-1f468", - "name": "male_couplekiss" + "name": "couplekiss_man_man" + }, + { + "code": "1f46a", + "name": "family_man_woman_boy" }, { "code": "1f468-200d-1f469-200d-1f467", @@ -4090,125 +938,4943 @@ }, { "code": "1f468-200d-1f469-200d-1f466-200d-1f466", - "name": "family_man_woman_boys" + "name": "family_man_woman_boy_boy" }, { "code": "1f468-200d-1f469-200d-1f467-200d-1f467", - "name": "family_man_woman_girls" + "name": "family_man_woman_girl_girl" }, { "code": "1f469-200d-1f469-200d-1f466", - "name": "family_women_boy" + "name": "family_woman_woman_boy" }, { "code": "1f469-200d-1f469-200d-1f467", - "name": "family_women_girl" + "name": "family_woman_woman_girl" }, { "code": "1f469-200d-1f469-200d-1f467-200d-1f466", - "name": "family_women_girl_boy" + "name": "family_woman_woman_girl_boy" }, { "code": "1f469-200d-1f469-200d-1f466-200d-1f466", - "name": "family_women_boys" + "name": "family_woman_woman_boy_boy" }, { "code": "1f469-200d-1f469-200d-1f467-200d-1f467", - "name": "family_women_girls" + "name": "family_woman_woman_girl_girl" }, { "code": "1f468-200d-1f468-200d-1f466", - "name": "family_men_boy" + "name": "family_man_man_boy" }, { "code": "1f468-200d-1f468-200d-1f467", - "name": "family_men_girl" + "name": "family_man_man_girl" }, { "code": "1f468-200d-1f468-200d-1f467-200d-1f466", - "name": "family_men_girl_boy" + "name": "family_man_man_girl_boy" }, { "code": "1f468-200d-1f468-200d-1f466-200d-1f466", - "name": "family_men_boys" + "name": "family_man_man_boy_boy" }, { "code": "1f468-200d-1f468-200d-1f467-200d-1f467", - "name": "family_men_girls" + "name": "family_man_man_girl_girl" }, { - "code": "002a-20e3", - "name": "keycap_star" + "code": "1f469-200d-1f466", + "name": "family_woman_boy" + }, + { + "code": "1f469-200d-1f467", + "name": "family_woman_girl" + }, + { + "code": "1f469-200d-1f467-200d-1f466", + "name": "family_woman_girl_boy" + }, + { + "code": "1f469-200d-1f466-200d-1f466", + "name": "family_woman_boy_boy" + }, + { + "code": "1f469-200d-1f467-200d-1f467", + "name": "family_woman_girl_girl" + }, + { + "code": "1f468-200d-1f466", + "name": "family_man_boy" + }, + { + "code": "1f468-200d-1f467", + "name": "family_man_girl" + }, + { + "code": "1f468-200d-1f467-200d-1f466", + "name": "family_man_girl_boy" + }, + { + "code": "1f468-200d-1f466-200d-1f466", + "name": "family_man_boy_boy" + }, + { + "code": "1f468-200d-1f467-200d-1f467", + "name": "family_man_girl_girl" + }, + { + "code": "1f45a", + "name": "womans_clothes" + }, + { + "code": "1f455", + "name": "tshirt" + }, + { + "code": "1f456", + "name": "jeans" + }, + { + "code": "1f454", + "name": "necktie" + }, + { + "code": "1f457", + "name": "dress" + }, + { + "code": "1f459", + "name": "bikini" + }, + { + "code": "1f458", + "name": "kimono" + }, + { + "code": "1f484", + "name": "lipstick" + }, + { + "code": "1f48b", + "name": "kiss" + }, + { + "code": "1f463", + "name": "footprints" + }, + { + "code": "1f460", + "name": "high_heel" + }, + { + "code": "1f461", + "name": "sandal" + }, + { + "code": "1f462", + "name": "boot" + }, + { + "code": "1f45e", + "name": "mans_shoe" + }, + { + "code": "1f45f", + "name": "athletic_shoe" + }, + { + "code": "1f452", + "name": "womans_hat" + }, + { + "code": "1f3a9", + "name": "tophat" + }, + { + "code": "26d1", + "name": "rescue_worker_helmet" + }, + { + "code": "1f393", + "name": "mortar_board" + }, + { + "code": "1f451", + "name": "crown" + }, + { + "code": "1f392", + "name": "school_satchel" + }, + { + "code": "1f45d", + "name": "pouch" + }, + { + "code": "1f45b", + "name": "purse" + }, + { + "code": "1f45c", + "name": "handbag" + }, + { + "code": "1f4bc", + "name": "briefcase" + }, + { + "code": "1f453", + "name": "eyeglasses" + }, + { + "code": "1f576", + "name": "dark_sunglasses" + }, + { + "code": "1f48d", + "name": "ring" + }, + { + "code": "1f302", + "name": "closed_umbrella" + }, + { + "code": "1f436", + "name": "dog" + }, + { + "code": "1f431", + "name": "cat" + }, + { + "code": "1f42d", + "name": "mouse" + }, + { + "code": "1f439", + "name": "hamster" + }, + { + "code": "1f430", + "name": "rabbit" + }, + { + "code": "1f98a", + "name": "fox_face" + }, + { + "code": "1f43b", + "name": "bear" + }, + { + "code": "1f43c", + "name": "panda_face" + }, + { + "code": "1f428", + "name": "koala" + }, + { + "code": "1f42f", + "name": "tiger" + }, + { + "code": "1f981", + "name": "lion" + }, + { + "code": "1f42e", + "name": "cow" + }, + { + "code": "1f437", + "name": "pig" + }, + { + "code": "1f43d", + "name": "pig_nose" + }, + { + "code": "1f438", + "name": "frog" + }, + { + "code": "1f991", + "name": "squid" + }, + { + "code": "1f419", + "name": "octopus" + }, + { + "code": "1f990", + "name": "shrimp" + }, + { + "code": "1f435", + "name": "monkey_face" + }, + { + "code": "1f98d", + "name": "gorilla" + }, + { + "code": "1f648", + "name": "see_no_evil" + }, + { + "code": "1f649", + "name": "hear_no_evil" + }, + { + "code": "1f64a", + "name": "speak_no_evil" + }, + { + "code": "1f412", + "name": "monkey" + }, + { + "code": "1f414", + "name": "chicken" + }, + { + "code": "1f427", + "name": "penguin" + }, + { + "code": "1f426", + "name": "bird" + }, + { + "code": "1f424", + "name": "baby_chick" + }, + { + "code": "1f423", + "name": "hatching_chick" + }, + { + "code": "1f425", + "name": "hatched_chick" + }, + { + "code": "1f986", + "name": "duck" + }, + { + "code": "1f985", + "name": "eagle" + }, + { + "code": "1f989", + "name": "owl" + }, + { + "code": "1f987", + "name": "bat" + }, + { + "code": "1f43a", + "name": "wolf" + }, + { + "code": "1f417", + "name": "boar" + }, + { + "code": "1f434", + "name": "horse" + }, + { + "code": "1f984", + "name": "unicorn" + }, + { + "code": "1f41d", + "name": "honeybee" + }, + { + "code": "1f41b", + "name": "bug" + }, + { + "code": "1f98b", + "name": "butterfly" + }, + { + "code": "1f40c", + "name": "snail" + }, + { + "code": "1f41e", + "name": "beetle" + }, + { + "code": "1f41c", + "name": "ant" + }, + { + "code": "1f577", + "name": "spider" + }, + { + "code": "1f982", + "name": "scorpion" + }, + { + "code": "1f980", + "name": "crab" + }, + { + "code": "1f40d", + "name": "snake" + }, + { + "code": "1f98e", + "name": "lizard" + }, + { + "code": "1f422", + "name": "turtle" + }, + { + "code": "1f420", + "name": "tropical_fish" + }, + { + "code": "1f41f", + "name": "fish" + }, + { + "code": "1f421", + "name": "blowfish" + }, + { + "code": "1f42c", + "name": "dolphin" + }, + { + "code": "1f988", + "name": "shark" + }, + { + "code": "1f433", + "name": "whale" + }, + { + "code": "1f40b", + "name": "whale2" + }, + { + "code": "1f40a", + "name": "crocodile" + }, + { + "code": "1f406", + "name": "leopard" + }, + { + "code": "1f405", + "name": "tiger2" + }, + { + "code": "1f403", + "name": "water_buffalo" + }, + { + "code": "1f402", + "name": "ox" + }, + { + "code": "1f404", + "name": "cow2" + }, + { + "code": "1f98c", + "name": "deer" + }, + { + "code": "1f42a", + "name": "dromedary_camel" + }, + { + "code": "1f42b", + "name": "camel" + }, + { + "code": "1f418", + "name": "elephant" + }, + { + "code": "1f98f", + "name": "rhinoceros" + }, + { + "code": "1f410", + "name": "goat" + }, + { + "code": "1f40f", + "name": "ram" + }, + { + "code": "1f411", + "name": "sheep" + }, + { + "code": "1f40e", + "name": "racehorse" + }, + { + "code": "1f416", + "name": "pig2" + }, + { + "code": "1f400", + "name": "rat" + }, + { + "code": "1f401", + "name": "mouse2" + }, + { + "code": "1f413", + "name": "rooster" + }, + { + "code": "1f983", + "name": "turkey" + }, + { + "code": "1f54a", + "name": "dove" + }, + { + "code": "1f415", + "name": "dog2" + }, + { + "code": "1f429", + "name": "poodle" + }, + { + "code": "1f408", + "name": "cat2" + }, + { + "code": "1f407", + "name": "rabbit2" + }, + { + "code": "1f43f", + "name": "chipmunk" + }, + { + "code": "1f43e", + "name": "paw_prints" + }, + { + "code": "1f409", + "name": "dragon" + }, + { + "code": "1f432", + "name": "dragon_face" + }, + { + "code": "1f335", + "name": "cactus" + }, + { + "code": "1f384", + "name": "christmas_tree" + }, + { + "code": "1f332", + "name": "evergreen_tree" + }, + { + "code": "1f333", + "name": "deciduous_tree" + }, + { + "code": "1f334", + "name": "palm_tree" + }, + { + "code": "1f331", + "name": "seedling" + }, + { + "code": "1f33f", + "name": "herb" + }, + { + "code": "2618", + "name": "shamrock" + }, + { + "code": "1f340", + "name": "four_leaf_clover" + }, + { + "code": "1f38d", + "name": "bamboo" + }, + { + "code": "1f38b", + "name": "tanabata_tree" + }, + { + "code": "1f343", + "name": "leaves" + }, + { + "code": "1f342", + "name": "fallen_leaf" + }, + { + "code": "1f341", + "name": "maple_leaf" + }, + { + "code": "1f33e", + "name": "ear_of_rice" + }, + { + "code": "1f33a", + "name": "hibiscus" + }, + { + "code": "1f33b", + "name": "sunflower" + }, + { + "code": "1f339", + "name": "rose" + }, + { + "code": "1f940", + "name": "wilted_flower" + }, + { + "code": "1f337", + "name": "tulip" + }, + { + "code": "1f33c", + "name": "blossom" + }, + { + "code": "1f338", + "name": "cherry_blossom" + }, + { + "code": "1f490", + "name": "bouquet" + }, + { + "code": "1f344", + "name": "mushroom" + }, + { + "code": "1f330", + "name": "chestnut" + }, + { + "code": "1f383", + "name": "jack_o_lantern" + }, + { + "code": "1f41a", + "name": "shell" + }, + { + "code": "1f578", + "name": "spider_web" + }, + { + "code": "1f30e", + "name": "earth_americas" + }, + { + "code": "1f30d", + "name": "earth_africa" + }, + { + "code": "1f30f", + "name": "earth_asia" + }, + { + "code": "1f315", + "name": "full_moon" + }, + { + "code": "1f316", + "name": "waning_gibbous_moon" + }, + { + "code": "1f317", + "name": "last_quarter_moon" + }, + { + "code": "1f318", + "name": "waning_crescent_moon" + }, + { + "code": "1f311", + "name": "new_moon" + }, + { + "code": "1f312", + "name": "waxing_crescent_moon" + }, + { + "code": "1f313", + "name": "first_quarter_moon" + }, + { + "code": "1f314", + "name": "waxing_gibbous_moon" + }, + { + "code": "1f31a", + "name": "new_moon_with_face" + }, + { + "code": "1f31d", + "name": "full_moon_with_face" + }, + { + "code": "1f31b", + "name": "first_quarter_moon_with_face" + }, + { + "code": "1f31c", + "name": "last_quarter_moon_with_face" + }, + { + "code": "1f31e", + "name": "sun_with_face" + }, + { + "code": "1f319", + "name": "crescent_moon" + }, + { + "code": "2b50", + "name": "star" + }, + { + "code": "1f31f", + "name": "star2" + }, + { + "code": "1f4ab", + "name": "dizzy" + }, + { + "code": "2728", + "name": "sparkles" + }, + { + "code": "2604", + "name": "comet" + }, + { + "code": "2600", + "name": "sunny" + }, + { + "code": "1f324", + "name": "sun_behind_small_cloud" + }, + { + "code": "26c5", + "name": "partly_sunny" + }, + { + "code": "1f325", + "name": "sun_behind_large_cloud" + }, + { + "code": "1f326", + "name": "sun_behind_rain_cloud" + }, + { + "code": "2601", + "name": "cloud" + }, + { + "code": "1f327", + "name": "cloud_with_rain" + }, + { + "code": "26c8", + "name": "cloud_with_lightning_and_rain" + }, + { + "code": "1f329", + "name": "cloud_with_lightning" + }, + { + "code": "26a1", + "name": "zap" + }, + { + "code": "1f525", + "name": "fire" + }, + { + "code": "1f4a5", + "name": "boom" + }, + { + "code": "2744", + "name": "snowflake" + }, + { + "code": "1f328", + "name": "cloud_with_snow" + }, + { + "code": "26c4", + "name": "snowman" + }, + { + "code": "2603", + "name": "snowman_with_snow" + }, + { + "code": "1f32c", + "name": "wind_face" + }, + { + "code": "1f4a8", + "name": "dash" + }, + { + "code": "1f32a", + "name": "tornado" + }, + { + "code": "1f32b", + "name": "fog" + }, + { + "code": "2602", + "name": "open_umbrella" + }, + { + "code": "2614", + "name": "umbrella" + }, + { + "code": "1f4a7", + "name": "droplet" + }, + { + "code": "1f4a6", + "name": "sweat_drops" + }, + { + "code": "1f30a", + "name": "ocean" + }, + { + "code": "1f34f", + "name": "green_apple" + }, + { + "code": "1f34e", + "name": "apple" + }, + { + "code": "1f350", + "name": "pear" + }, + { + "code": "1f34a", + "name": "tangerine" + }, + { + "code": "1f34b", + "name": "lemon" + }, + { + "code": "1f34c", + "name": "banana" + }, + { + "code": "1f349", + "name": "watermelon" + }, + { + "code": "1f347", + "name": "grapes" + }, + { + "code": "1f353", + "name": "strawberry" + }, + { + "code": "1f348", + "name": "melon" + }, + { + "code": "1f352", + "name": "cherries" + }, + { + "code": "1f351", + "name": "peach" + }, + { + "code": "1f34d", + "name": "pineapple" + }, + { + "code": "1f95d", + "name": "kiwi_fruit" + }, + { + "code": "1f951", + "name": "avocado" + }, + { + "code": "1f345", + "name": "tomato" + }, + { + "code": "1f346", + "name": "eggplant" + }, + { + "code": "1f952", + "name": "cucumber" + }, + { + "code": "1f955", + "name": "carrot" + }, + { + "code": "1f336", + "name": "hot_pepper" + }, + { + "code": "1f954", + "name": "potato" + }, + { + "code": "1f33d", + "name": "corn" + }, + { + "code": "1f360", + "name": "sweet_potato" + }, + { + "code": "1f95c", + "name": "peanuts" + }, + { + "code": "1f36f", + "name": "honey_pot" + }, + { + "code": "1f950", + "name": "croissant" + }, + { + "code": "1f35e", + "name": "bread" + }, + { + "code": "1f956", + "name": "baguette_bread" + }, + { + "code": "1f9c0", + "name": "cheese" + }, + { + "code": "1f95a", + "name": "egg" + }, + { + "code": "1f953", + "name": "bacon" + }, + { + "code": "1f95e", + "name": "pancakes" + }, + { + "code": "1f357", + "name": "poultry_leg" + }, + { + "code": "1f356", + "name": "meat_on_bone" + }, + { + "code": "1f364", + "name": "fried_shrimp" + }, + { + "code": "1f373", + "name": "fried_egg" + }, + { + "code": "1f354", + "name": "hamburger" + }, + { + "code": "1f35f", + "name": "fries" + }, + { + "code": "1f959", + "name": "stuffed_flatbread" + }, + { + "code": "1f32d", + "name": "hotdog" + }, + { + "code": "1f355", + "name": "pizza" + }, + { + "code": "1f35d", + "name": "spaghetti" + }, + { + "code": "1f32e", + "name": "taco" + }, + { + "code": "1f32f", + "name": "burrito" + }, + { + "code": "1f957", + "name": "green_salad" + }, + { + "code": "1f958", + "name": "shallow_pan_of_food" + }, + { + "code": "1f35c", + "name": "ramen" + }, + { + "code": "1f372", + "name": "stew" + }, + { + "code": "1f365", + "name": "fish_cake" + }, + { + "code": "1f363", + "name": "sushi" + }, + { + "code": "1f371", + "name": "bento" + }, + { + "code": "1f35b", + "name": "curry" + }, + { + "code": "1f359", + "name": "rice_ball" + }, + { + "code": "1f35a", + "name": "rice" + }, + { + "code": "1f358", + "name": "rice_cracker" + }, + { + "code": "1f362", + "name": "oden" + }, + { + "code": "1f361", + "name": "dango" + }, + { + "code": "1f367", + "name": "shaved_ice" + }, + { + "code": "1f368", + "name": "ice_cream" + }, + { + "code": "1f366", + "name": "icecream" + }, + { + "code": "1f370", + "name": "cake" + }, + { + "code": "1f382", + "name": "birthday" + }, + { + "code": "1f36e", + "name": "custard" + }, + { + "code": "1f36c", + "name": "candy" + }, + { + "code": "1f36d", + "name": "lollipop" + }, + { + "code": "1f36b", + "name": "chocolate_bar" + }, + { + "code": "1f37f", + "name": "popcorn" + }, + { + "code": "1f369", + "name": "doughnut" + }, + { + "code": "1f36a", + "name": "cookie" + }, + { + "code": "1f95b", + "name": "milk_glass" + }, + { + "code": "1f37a", + "name": "beer" + }, + { + "code": "1f37b", + "name": "beers" + }, + { + "code": "1f942", + "name": "clinking_glasses" + }, + { + "code": "1f377", + "name": "wine_glass" + }, + { + "code": "1f943", + "name": "tumbler_glass" + }, + { + "code": "1f378", + "name": "cocktail" + }, + { + "code": "1f379", + "name": "tropical_drink" + }, + { + "code": "1f37e", + "name": "champagne" + }, + { + "code": "1f376", + "name": "sake" + }, + { + "code": "1f375", + "name": "tea" + }, + { + "code": "2615", + "name": "coffee" + }, + { + "code": "1f37c", + "name": "baby_bottle" + }, + { + "code": "1f944", + "name": "spoon" + }, + { + "code": "1f374", + "name": "fork_and_knife" + }, + { + "code": "1f37d", + "name": "plate_with_cutlery" + }, + { + "code": "26bd", + "name": "soccer" + }, + { + "code": "1f3c0", + "name": "basketball" + }, + { + "code": "1f3c8", + "name": "football" + }, + { + "code": "26be", + "name": "baseball" + }, + { + "code": "1f3be", + "name": "tennis" + }, + { + "code": "1f3d0", + "name": "volleyball" + }, + { + "code": "1f3c9", + "name": "rugby_football" + }, + { + "code": "1f3b1", + "name": "8ball" + }, + { + "code": "26f3", + "name": "golf" + }, + { + "code": "1f3cc-fe0f-200d-2640-fe0f", + "name": "golfing_woman" + }, + { + "code": "1f3cc", + "name": "golfing_man" + }, + { + "code": "1f3d3", + "name": "ping_pong" + }, + { + "code": "1f3f8", + "name": "badminton" + }, + { + "code": "1f945", + "name": "goal_net" + }, + { + "code": "1f3d2", + "name": "ice_hockey" + }, + { + "code": "1f3d1", + "name": "field_hockey" + }, + { + "code": "1f3cf", + "name": "cricket" + }, + { + "code": "1f3bf", + "name": "ski" + }, + { + "code": "26f7", + "name": "skier" + }, + { + "code": "1f3c2", + "name": "snowboarder" + }, + { + "code": "1f93a", + "name": "person_fencing" + }, + { + "code": "1f93c-200d-2640-fe0f", + "name": "women_wrestling" + }, + { + "code": "1f93c-200d-2642-fe0f", + "name": "men_wrestling" + }, + { + "code": "1f938-200d-2640-fe0f", + "name": "woman_cartwheeling" + }, + { + "code": "1f938-200d-2642-fe0f", + "name": "man_cartwheeling" + }, + { + "code": "1f93e-200d-2640-fe0f", + "name": "woman_playing_handball" + }, + { + "code": "1f93e-200d-2642-fe0f", + "name": "man_playing_handball" + }, + { + "code": "26f8", + "name": "ice_skate" + }, + { + "code": "1f3f9", + "name": "bow_and_arrow" + }, + { + "code": "1f3a3", + "name": "fishing_pole_and_fish" + }, + { + "code": "1f94a", + "name": "boxing_glove" + }, + { + "code": "1f94b", + "name": "martial_arts_uniform" + }, + { + "code": "1f6a3-200d-2640-fe0f", + "name": "rowing_woman" + }, + { + "code": "1f6a3", + "name": "rowing_man" + }, + { + "code": "1f3ca-200d-2640-fe0f", + "name": "swimming_woman" + }, + { + "code": "1f3ca", + "name": "swimming_man" + }, + { + "code": "1f93d-200d-2640-fe0f", + "name": "woman_playing_water_polo" + }, + { + "code": "1f93d-200d-2642-fe0f", + "name": "man_playing_water_polo" + }, + { + "code": "1f3c4-200d-2640-fe0f", + "name": "surfing_woman" + }, + { + "code": "1f3c4", + "name": "surfing_man" + }, + { + "code": "1f6c0", + "name": "bath" + }, + { + "code": "26f9-fe0f-200d-2640-fe0f", + "name": "basketball_woman" + }, + { + "code": "26f9", + "name": "basketball_man" + }, + { + "code": "1f3cb-fe0f-200d-2640-fe0f", + "name": "weight_lifting_woman" + }, + { + "code": "1f3cb", + "name": "weight_lifting_man" + }, + { + "code": "1f6b4-200d-2640-fe0f", + "name": "biking_woman" + }, + { + "code": "1f6b4", + "name": "biking_man" + }, + { + "code": "1f6b5-200d-2640-fe0f", + "name": "mountain_biking_woman" + }, + { + "code": "1f6b5", + "name": "mountain_biking_man" + }, + { + "code": "1f3c7", + "name": "horse_racing" + }, + { + "code": "1f574", + "name": "business_suit_levitating" + }, + { + "code": "1f3c6", + "name": "trophy" + }, + { + "code": "1f3bd", + "name": "running_shirt_with_sash" + }, + { + "code": "1f3c5", + "name": "medal_sports" + }, + { + "code": "1f396", + "name": "medal_military" + }, + { + "code": "1f947", + "name": "1st_place_medal" + }, + { + "code": "1f948", + "name": "2nd_place_medal" + }, + { + "code": "1f949", + "name": "3rd_place_medal" + }, + { + "code": "1f397", + "name": "reminder_ribbon" + }, + { + "code": "1f3f5", + "name": "rosette" + }, + { + "code": "1f3ab", + "name": "ticket" + }, + { + "code": "1f39f", + "name": "tickets" + }, + { + "code": "1f3ad", + "name": "performing_arts" + }, + { + "code": "1f3a8", + "name": "art" + }, + { + "code": "1f3aa", + "name": "circus_tent" + }, + { + "code": "1f939-200d-2640-fe0f", + "name": "woman_juggling" + }, + { + "code": "1f939-200d-2642-fe0f", + "name": "man_juggling" + }, + { + "code": "1f3a4", + "name": "microphone" + }, + { + "code": "1f3a7", + "name": "headphones" + }, + { + "code": "1f3bc", + "name": "musical_score" + }, + { + "code": "1f3b9", + "name": "musical_keyboard" + }, + { + "code": "1f941", + "name": "drum" + }, + { + "code": "1f3b7", + "name": "saxophone" + }, + { + "code": "1f3ba", + "name": "trumpet" + }, + { + "code": "1f3b8", + "name": "guitar" + }, + { + "code": "1f3bb", + "name": "violin" + }, + { + "code": "1f3ac", + "name": "clapper" + }, + { + "code": "1f3ae", + "name": "video_game" + }, + { + "code": "1f47e", + "name": "space_invader" + }, + { + "code": "1f3af", + "name": "dart" + }, + { + "code": "1f3b2", + "name": "game_die" + }, + { + "code": "1f3b0", + "name": "slot_machine" + }, + { + "code": "1f3b3", + "name": "bowling" + }, + { + "code": "1f697", + "name": "red_car" + }, + { + "code": "1f695", + "name": "taxi" + }, + { + "code": "1f699", + "name": "blue_car" + }, + { + "code": "1f68c", + "name": "bus" + }, + { + "code": "1f68e", + "name": "trolleybus" + }, + { + "code": "1f3ce", + "name": "racing_car" + }, + { + "code": "1f693", + "name": "police_car" + }, + { + "code": "1f691", + "name": "ambulance" + }, + { + "code": "1f692", + "name": "fire_engine" + }, + { + "code": "1f690", + "name": "minibus" + }, + { + "code": "1f69a", + "name": "truck" + }, + { + "code": "1f69b", + "name": "articulated_lorry" + }, + { + "code": "1f69c", + "name": "tractor" + }, + { + "code": "1f6f4", + "name": "kick_scooter" + }, + { + "code": "1f3cd", + "name": "motorcycle" + }, + { + "code": "1f6b2", + "name": "bike" + }, + { + "code": "1f6f5", + "name": "motor_scooter" + }, + { + "code": "1f6a8", + "name": "rotating_light" + }, + { + "code": "1f694", + "name": "oncoming_police_car" + }, + { + "code": "1f68d", + "name": "oncoming_bus" + }, + { + "code": "1f698", + "name": "oncoming_automobile" + }, + { + "code": "1f696", + "name": "oncoming_taxi" + }, + { + "code": "1f6a1", + "name": "aerial_tramway" + }, + { + "code": "1f6a0", + "name": "mountain_cableway" + }, + { + "code": "1f69f", + "name": "suspension_railway" + }, + { + "code": "1f683", + "name": "railway_car" + }, + { + "code": "1f68b", + "name": "train" + }, + { + "code": "1f69d", + "name": "monorail" + }, + { + "code": "1f684", + "name": "bullettrain_side" + }, + { + "code": "1f685", + "name": "bullettrain_front" + }, + { + "code": "1f688", + "name": "light_rail" + }, + { + "code": "1f69e", + "name": "mountain_railway" + }, + { + "code": "1f682", + "name": "steam_locomotive" + }, + { + "code": "1f686", + "name": "train2" + }, + { + "code": "1f687", + "name": "metro" + }, + { + "code": "1f68a", + "name": "tram" + }, + { + "code": "1f689", + "name": "station" + }, + { + "code": "1f681", + "name": "helicopter" + }, + { + "code": "1f6e9", + "name": "small_airplane" + }, + { + "code": "2708", + "name": "airplane" + }, + { + "code": "1f6eb", + "name": "flight_departure" + }, + { + "code": "1f6ec", + "name": "flight_arrival" + }, + { + "code": "26f5", + "name": "sailboat" + }, + { + "code": "1f6e5", + "name": "motor_boat" + }, + { + "code": "1f6a4", + "name": "speedboat" + }, + { + "code": "26f4", + "name": "ferry" + }, + { + "code": "1f6f3", + "name": "passenger_ship" + }, + { + "code": "1f680", + "name": "rocket" + }, + { + "code": "1f6f0", + "name": "artificial_satellite" + }, + { + "code": "1f4ba", + "name": "seat" + }, + { + "code": "1f6f6", + "name": "canoe" + }, + { + "code": "2693", + "name": "anchor" + }, + { + "code": "1f6a7", + "name": "construction" + }, + { + "code": "26fd", + "name": "fuelpump" + }, + { + "code": "1f68f", + "name": "busstop" + }, + { + "code": "1f6a6", + "name": "vertical_traffic_light" + }, + { + "code": "1f6a5", + "name": "traffic_light" + }, + { + "code": "1f3c1", + "name": "checkered_flag" + }, + { + "code": "1f6a2", + "name": "ship" + }, + { + "code": "1f3a1", + "name": "ferris_wheel" + }, + { + "code": "1f3a2", + "name": "roller_coaster" + }, + { + "code": "1f3a0", + "name": "carousel_horse" + }, + { + "code": "1f3d7", + "name": "building_construction" + }, + { + "code": "1f301", + "name": "foggy" + }, + { + "code": "1f5fc", + "name": "tokyo_tower" + }, + { + "code": "1f3ed", + "name": "factory" + }, + { + "code": "26f2", + "name": "fountain" + }, + { + "code": "1f391", + "name": "rice_scene" + }, + { + "code": "26f0", + "name": "mountain" + }, + { + "code": "1f3d4", + "name": "mountain_snow" + }, + { + "code": "1f5fb", + "name": "mount_fuji" + }, + { + "code": "1f30b", + "name": "volcano" + }, + { + "code": "1f5fe", + "name": "japan" + }, + { + "code": "1f3d5", + "name": "camping" + }, + { + "code": "26fa", + "name": "tent" + }, + { + "code": "1f3de", + "name": "national_park" + }, + { + "code": "1f6e3", + "name": "motorway" + }, + { + "code": "1f6e4", + "name": "railway_track" + }, + { + "code": "1f305", + "name": "sunrise" + }, + { + "code": "1f304", + "name": "sunrise_over_mountains" + }, + { + "code": "1f3dc", + "name": "desert" + }, + { + "code": "1f3d6", + "name": "beach_umbrella" + }, + { + "code": "1f3dd", + "name": "desert_island" + }, + { + "code": "1f307", + "name": "city_sunrise" + }, + { + "code": "1f306", + "name": "city_sunset" + }, + { + "code": "1f3d9", + "name": "cityscape" + }, + { + "code": "1f303", + "name": "night_with_stars" + }, + { + "code": "1f309", + "name": "bridge_at_night" + }, + { + "code": "1f30c", + "name": "milky_way" + }, + { + "code": "1f320", + "name": "stars" + }, + { + "code": "1f387", + "name": "sparkler" + }, + { + "code": "1f386", + "name": "fireworks" + }, + { + "code": "1f308", + "name": "rainbow" + }, + { + "code": "1f3d8", + "name": "houses" + }, + { + "code": "1f3f0", + "name": "european_castle" + }, + { + "code": "1f3ef", + "name": "japanese_castle" + }, + { + "code": "1f3df", + "name": "stadium" + }, + { + "code": "1f5fd", + "name": "statue_of_liberty" + }, + { + "code": "1f3e0", + "name": "house" + }, + { + "code": "1f3e1", + "name": "house_with_garden" + }, + { + "code": "1f3da", + "name": "derelict_house" + }, + { + "code": "1f3e2", + "name": "office" + }, + { + "code": "1f3ec", + "name": "department_store" + }, + { + "code": "1f3e3", + "name": "post_office" + }, + { + "code": "1f3e4", + "name": "european_post_office" + }, + { + "code": "1f3e5", + "name": "hospital" + }, + { + "code": "1f3e6", + "name": "bank" + }, + { + "code": "1f3e8", + "name": "hotel" + }, + { + "code": "1f3ea", + "name": "convenience_store" + }, + { + "code": "1f3eb", + "name": "school" + }, + { + "code": "1f3e9", + "name": "love_hotel" + }, + { + "code": "1f492", + "name": "wedding" + }, + { + "code": "1f3db", + "name": "classical_building" + }, + { + "code": "26ea", + "name": "church" + }, + { + "code": "1f54c", + "name": "mosque" + }, + { + "code": "1f54d", + "name": "synagogue" + }, + { + "code": "1f54b", + "name": "kaaba" + }, + { + "code": "26e9", + "name": "shinto_shrine" + }, + { + "code": "231a", + "name": "watch" + }, + { + "code": "1f4f1", + "name": "iphone" + }, + { + "code": "1f4f2", + "name": "calling" + }, + { + "code": "1f4bb", + "name": "computer" + }, + { + "code": "2328", + "name": "keyboard" + }, + { + "code": "1f5a5", + "name": "desktop_computer" + }, + { + "code": "1f5a8", + "name": "printer" + }, + { + "code": "1f5b1", + "name": "computer_mouse" + }, + { + "code": "1f5b2", + "name": "trackball" + }, + { + "code": "1f579", + "name": "joystick" + }, + { + "code": "1f5dc", + "name": "clamp" + }, + { + "code": "1f4bd", + "name": "minidisc" + }, + { + "code": "1f4be", + "name": "floppy_disk" + }, + { + "code": "1f4bf", + "name": "cd" + }, + { + "code": "1f4c0", + "name": "dvd" + }, + { + "code": "1f4fc", + "name": "vhs" + }, + { + "code": "1f4f7", + "name": "camera" + }, + { + "code": "1f4f8", + "name": "camera_flash" + }, + { + "code": "1f4f9", + "name": "video_camera" + }, + { + "code": "1f3a5", + "name": "movie_camera" + }, + { + "code": "1f4fd", + "name": "film_projector" + }, + { + "code": "1f39e", + "name": "film_strip" + }, + { + "code": "1f4de", + "name": "telephone_receiver" + }, + { + "code": "260e", + "name": "phone" + }, + { + "code": "1f4df", + "name": "pager" + }, + { + "code": "1f4e0", + "name": "fax" + }, + { + "code": "1f4fa", + "name": "tv" + }, + { + "code": "1f4fb", + "name": "radio" + }, + { + "code": "1f399", + "name": "studio_microphone" + }, + { + "code": "1f39a", + "name": "level_slider" + }, + { + "code": "1f39b", + "name": "control_knobs" + }, + { + "code": "23f1", + "name": "stopwatch" + }, + { + "code": "23f2", + "name": "timer_clock" + }, + { + "code": "23f0", + "name": "alarm_clock" + }, + { + "code": "1f570", + "name": "mantelpiece_clock" + }, + { + "code": "23f3", + "name": "hourglass_flowing_sand" + }, + { + "code": "231b", + "name": "hourglass" + }, + { + "code": "1f4e1", + "name": "satellite" + }, + { + "code": "1f50b", + "name": "battery" + }, + { + "code": "1f50c", + "name": "electric_plug" + }, + { + "code": "1f4a1", + "name": "bulb" + }, + { + "code": "1f526", + "name": "flashlight" + }, + { + "code": "1f56f", + "name": "candle" + }, + { + "code": "1f5d1", + "name": "wastebasket" + }, + { + "code": "1f6e2", + "name": "oil_drum" + }, + { + "code": "1f4b8", + "name": "money_with_wings" + }, + { + "code": "1f4b5", + "name": "dollar" + }, + { + "code": "1f4b4", + "name": "yen" + }, + { + "code": "1f4b6", + "name": "euro" + }, + { + "code": "1f4b7", + "name": "pound" + }, + { + "code": "1f4b0", + "name": "moneybag" + }, + { + "code": "1f4b3", + "name": "credit_card" + }, + { + "code": "1f48e", + "name": "gem" + }, + { + "code": "2696", + "name": "balance_scale" + }, + { + "code": "1f527", + "name": "wrench" + }, + { + "code": "1f528", + "name": "hammer" + }, + { + "code": "2692", + "name": "hammer_and_pick" + }, + { + "code": "1f6e0", + "name": "hammer_and_wrench" + }, + { + "code": "26cf", + "name": "pick" + }, + { + "code": "1f529", + "name": "nut_and_bolt" + }, + { + "code": "2699", + "name": "gear" + }, + { + "code": "26d3", + "name": "chains" + }, + { + "code": "1f52b", + "name": "gun" + }, + { + "code": "1f4a3", + "name": "bomb" + }, + { + "code": "1f52a", + "name": "hocho" + }, + { + "code": "1f5e1", + "name": "dagger" + }, + { + "code": "2694", + "name": "crossed_swords" + }, + { + "code": "1f6e1", + "name": "shield" + }, + { + "code": "1f6ac", + "name": "smoking" + }, + { + "code": "2620", + "name": "skull_and_crossbones" + }, + { + "code": "26b0", + "name": "coffin" + }, + { + "code": "26b1", + "name": "funeral_urn" + }, + { + "code": "1f3fa", + "name": "amphora" + }, + { + "code": "1f52e", + "name": "crystal_ball" + }, + { + "code": "1f4ff", + "name": "prayer_beads" + }, + { + "code": "1f488", + "name": "barber" + }, + { + "code": "2697", + "name": "alembic" + }, + { + "code": "1f52d", + "name": "telescope" + }, + { + "code": "1f52c", + "name": "microscope" + }, + { + "code": "1f573", + "name": "hole" + }, + { + "code": "1f48a", + "name": "pill" + }, + { + "code": "1f489", + "name": "syringe" + }, + { + "code": "1f321", + "name": "thermometer" + }, + { + "code": "1f3f7", + "name": "label" + }, + { + "code": "1f516", + "name": "bookmark" + }, + { + "code": "1f6bd", + "name": "toilet" + }, + { + "code": "1f6bf", + "name": "shower" + }, + { + "code": "1f6c1", + "name": "bathtub" + }, + { + "code": "1f511", + "name": "key" + }, + { + "code": "1f5dd", + "name": "old_key" + }, + { + "code": "1f6cb", + "name": "couch_and_lamp" + }, + { + "code": "1f6cc", + "name": "sleeping_bed" + }, + { + "code": "1f6cf", + "name": "bed" + }, + { + "code": "1f6aa", + "name": "door" + }, + { + "code": "1f6ce", + "name": "bellhop_bell" + }, + { + "code": "1f5bc", + "name": "framed_picture" + }, + { + "code": "1f5fa", + "name": "world_map" + }, + { + "code": "26f1", + "name": "parasol_on_ground" + }, + { + "code": "1f5ff", + "name": "moyai" + }, + { + "code": "1f6cd", + "name": "shopping" + }, + { + "code": "1f6d2", + "name": "shopping_cart" + }, + { + "code": "1f388", + "name": "balloon" + }, + { + "code": "1f38f", + "name": "flags" + }, + { + "code": "1f380", + "name": "ribbon" + }, + { + "code": "1f381", + "name": "gift" + }, + { + "code": "1f38a", + "name": "confetti_ball" + }, + { + "code": "1f389", + "name": "tada" + }, + { + "code": "1f38e", + "name": "dolls" + }, + { + "code": "1f390", + "name": "wind_chime" + }, + { + "code": "1f38c", + "name": "crossed_flags" + }, + { + "code": "1f3ee", + "name": "izakaya_lantern" + }, + { + "code": "2709", + "name": "email" + }, + { + "code": "1f4e9", + "name": "envelope_with_arrow" + }, + { + "code": "1f4e8", + "name": "incoming_envelope" + }, + { + "code": "1f4e7", + "name": "e-mail" + }, + { + "code": "1f48c", + "name": "love_letter" + }, + { + "code": "1f4ee", + "name": "postbox" + }, + { + "code": "1f4ea", + "name": "mailbox_closed" + }, + { + "code": "1f4eb", + "name": "mailbox" + }, + { + "code": "1f4ec", + "name": "mailbox_with_mail" + }, + { + "code": "1f4ed", + "name": "mailbox_with_no_mail" + }, + { + "code": "1f4e6", + "name": "package" + }, + { + "code": "1f4ef", + "name": "postal_horn" + }, + { + "code": "1f4e5", + "name": "inbox_tray" + }, + { + "code": "1f4e4", + "name": "outbox_tray" + }, + { + "code": "1f4dc", + "name": "scroll" + }, + { + "code": "1f4c3", + "name": "page_with_curl" + }, + { + "code": "1f4d1", + "name": "bookmark_tabs" + }, + { + "code": "1f4ca", + "name": "bar_chart" + }, + { + "code": "1f4c8", + "name": "chart_with_upwards_trend" + }, + { + "code": "1f4c9", + "name": "chart_with_downwards_trend" + }, + { + "code": "1f4c4", + "name": "page_facing_up" + }, + { + "code": "1f4c5", + "name": "date" + }, + { + "code": "1f4c6", + "name": "calendar" + }, + { + "code": "1f5d3", + "name": "spiral_calendar" + }, + { + "code": "1f4c7", + "name": "card_index" + }, + { + "code": "1f5c3", + "name": "card_file_box" + }, + { + "code": "1f5f3", + "name": "ballot_box" + }, + { + "code": "1f5c4", + "name": "file_cabinet" + }, + { + "code": "1f4cb", + "name": "clipboard" + }, + { + "code": "1f5d2", + "name": "spiral_notepad" + }, + { + "code": "1f4c1", + "name": "file_folder" + }, + { + "code": "1f4c2", + "name": "open_file_folder" + }, + { + "code": "1f5c2", + "name": "card_index_dividers" + }, + { + "code": "1f5de", + "name": "newspaper_roll" + }, + { + "code": "1f4f0", + "name": "newspaper" + }, + { + "code": "1f4d3", + "name": "notebook" + }, + { + "code": "1f4d5", + "name": "closed_book" + }, + { + "code": "1f4d7", + "name": "green_book" + }, + { + "code": "1f4d8", + "name": "blue_book" + }, + { + "code": "1f4d9", + "name": "orange_book" + }, + { + "code": "1f4d4", + "name": "notebook_with_decorative_cover" + }, + { + "code": "1f4d2", + "name": "ledger" + }, + { + "code": "1f4da", + "name": "books" + }, + { + "code": "1f4d6", + "name": "open_book" + }, + { + "code": "1f517", + "name": "link" + }, + { + "code": "1f4ce", + "name": "paperclip" + }, + { + "code": "1f587", + "name": "paperclips" + }, + { + "code": "2702", + "name": "scissors" + }, + { + "code": "1f4d0", + "name": "triangular_ruler" + }, + { + "code": "1f4cf", + "name": "straight_ruler" + }, + { + "code": "1f4cc", + "name": "pushpin" + }, + { + "code": "1f4cd", + "name": "round_pushpin" + }, + { + "code": "1f6a9", + "name": "triangular_flag_on_post" + }, + { + "code": "1f3f3", + "name": "white_flag" + }, + { + "code": "1f3f4", + "name": "black_flag" + }, + { + "code": "1f3f3-fe0f-200d-1f308", + "name": "rainbow_flag" + }, + { + "code": "1f510", + "name": "closed_lock_with_key" + }, + { + "code": "1f512", + "name": "lock" + }, + { + "code": "1f513", + "name": "unlock" + }, + { + "code": "1f50f", + "name": "lock_with_ink_pen" + }, + { + "code": "1f58a", + "name": "pen" + }, + { + "code": "1f58b", + "name": "fountain_pen" + }, + { + "code": "2712", + "name": "black_nib" + }, + { + "code": "1f4dd", + "name": "memo" + }, + { + "code": "270f", + "name": "pencil2" + }, + { + "code": "1f58d", + "name": "crayon" + }, + { + "code": "1f58c", + "name": "paintbrush" + }, + { + "code": "1f50d", + "name": "mag" + }, + { + "code": "1f50e", + "name": "mag_right" + }, + { + "code": "2764", + "name": "heart" + }, + { + "code": "1f49b", + "name": "yellow_heart" + }, + { + "code": "1f49a", + "name": "green_heart" + }, + { + "code": "1f499", + "name": "blue_heart" + }, + { + "code": "1f49c", + "name": "purple_heart" + }, + { + "code": "1f5a4", + "name": "black_heart" + }, + { + "code": "1f494", + "name": "broken_heart" + }, + { + "code": "2763", + "name": "heavy_heart_exclamation" + }, + { + "code": "1f495", + "name": "two_hearts" + }, + { + "code": "1f49e", + "name": "revolving_hearts" + }, + { + "code": "1f493", + "name": "heartbeat" + }, + { + "code": "1f497", + "name": "heartpulse" + }, + { + "code": "1f496", + "name": "sparkling_heart" + }, + { + "code": "1f498", + "name": "cupid" + }, + { + "code": "1f49d", + "name": "gift_heart" + }, + { + "code": "1f49f", + "name": "heart_decoration" + }, + { + "code": "262e", + "name": "peace_symbol" + }, + { + "code": "271d", + "name": "latin_cross" + }, + { + "code": "262a", + "name": "star_and_crescent" + }, + { + "code": "1f549", + "name": "om" + }, + { + "code": "2638", + "name": "wheel_of_dharma" + }, + { + "code": "2721", + "name": "star_of_david" + }, + { + "code": "1f52f", + "name": "six_pointed_star" + }, + { + "code": "1f54e", + "name": "menorah" + }, + { + "code": "262f", + "name": "yin_yang" + }, + { + "code": "2626", + "name": "orthodox_cross" + }, + { + "code": "1f6d0", + "name": "place_of_worship" + }, + { + "code": "26ce", + "name": "ophiuchus" + }, + { + "code": "2648", + "name": "aries" + }, + { + "code": "2649", + "name": "taurus" + }, + { + "code": "264a", + "name": "gemini" + }, + { + "code": "264b", + "name": "cancer" + }, + { + "code": "264c", + "name": "leo" + }, + { + "code": "264d", + "name": "virgo" + }, + { + "code": "264e", + "name": "libra" + }, + { + "code": "264f", + "name": "scorpius" + }, + { + "code": "2650", + "name": "sagittarius" + }, + { + "code": "2651", + "name": "capricorn" + }, + { + "code": "2652", + "name": "aquarius" + }, + { + "code": "2653", + "name": "pisces" + }, + { + "code": "1f194", + "name": "id" + }, + { + "code": "269b", + "name": "atom_symbol" + }, + { + "code": "1f233", + "name": "u7a7a" + }, + { + "code": "1f239", + "name": "u5272" + }, + { + "code": "2622", + "name": "radioactive" + }, + { + "code": "2623", + "name": "biohazard" + }, + { + "code": "1f4f4", + "name": "mobile_phone_off" + }, + { + "code": "1f4f3", + "name": "vibration_mode" + }, + { + "code": "1f236", + "name": "u6709" + }, + { + "code": "1f21a", + "name": "u7121" + }, + { + "code": "1f238", + "name": "u7533" + }, + { + "code": "1f23a", + "name": "u55b6" + }, + { + "code": "1f237", + "name": "u6708" + }, + { + "code": "2734", + "name": "eight_pointed_black_star" + }, + { + "code": "1f19a", + "name": "vs" + }, + { + "code": "1f251", + "name": "accept" + }, + { + "code": "1f4ae", + "name": "white_flower" + }, + { + "code": "1f250", + "name": "ideograph_advantage" + }, + { + "code": "3299", + "name": "secret" + }, + { + "code": "3297", + "name": "congratulations" + }, + { + "code": "1f234", + "name": "u5408" + }, + { + "code": "1f235", + "name": "u6e80" + }, + { + "code": "1f232", + "name": "u7981" + }, + { + "code": "1f170", + "name": "a" + }, + { + "code": "1f171", + "name": "b" + }, + { + "code": "1f18e", + "name": "ab" + }, + { + "code": "1f191", + "name": "cl" + }, + { + "code": "1f17e", + "name": "o2" + }, + { + "code": "1f198", + "name": "sos" + }, + { + "code": "26d4", + "name": "no_entry" + }, + { + "code": "1f4db", + "name": "name_badge" + }, + { + "code": "1f6ab", + "name": "no_entry_sign" + }, + { + "code": "274c", + "name": "x" + }, + { + "code": "2b55", + "name": "o" + }, + { + "code": "1f6d1", + "name": "stop_sign" + }, + { + "code": "1f4a2", + "name": "anger" + }, + { + "code": "2668", + "name": "hotsprings" + }, + { + "code": "1f6b7", + "name": "no_pedestrians" + }, + { + "code": "1f6af", + "name": "do_not_litter" + }, + { + "code": "1f6b3", + "name": "no_bicycles" + }, + { + "code": "1f6b1", + "name": "non-potable_water" + }, + { + "code": "1f51e", + "name": "underage" + }, + { + "code": "1f4f5", + "name": "no_mobile_phones" + }, + { + "code": "2757", + "name": "exclamation" + }, + { + "code": "2755", + "name": "grey_exclamation" + }, + { + "code": "2753", + "name": "question" + }, + { + "code": "2754", + "name": "grey_question" + }, + { + "code": "203c", + "name": "bangbang" + }, + { + "code": "2049", + "name": "interrobang" + }, + { + "code": "1f4af", + "name": "100" + }, + { + "code": "1f505", + "name": "low_brightness" + }, + { + "code": "1f506", + "name": "high_brightness" + }, + { + "code": "1f531", + "name": "trident" + }, + { + "code": "269c", + "name": "fleur_de_lis" + }, + { + "code": "303d", + "name": "part_alternation_mark" + }, + { + "code": "26a0", + "name": "warning" + }, + { + "code": "1f6b8", + "name": "children_crossing" + }, + { + "code": "1f530", + "name": "beginner" + }, + { + "code": "267b", + "name": "recycle" + }, + { + "code": "1f22f", + "name": "u6307" + }, + { + "code": "1f4b9", + "name": "chart" + }, + { + "code": "2747", + "name": "sparkle" + }, + { + "code": "2733", + "name": "eight_spoked_asterisk" + }, + { + "code": "274e", + "name": "negative_squared_cross_mark" + }, + { + "code": "2705", + "name": "white_check_mark" + }, + { + "code": "1f4a0", + "name": "diamond_shape_with_a_dot_inside" + }, + { + "code": "1f300", + "name": "cyclone" + }, + { + "code": "27bf", + "name": "loop" + }, + { + "code": "1f310", + "name": "globe_with_meridians" + }, + { + "code": "24c2", + "name": "m" + }, + { + "code": "1f3e7", + "name": "atm" + }, + { + "code": "1f202", + "name": "sa" + }, + { + "code": "1f6c2", + "name": "passport_control" + }, + { + "code": "1f6c3", + "name": "customs" + }, + { + "code": "1f6c4", + "name": "baggage_claim" + }, + { + "code": "1f6c5", + "name": "left_luggage" + }, + { + "code": "267f", + "name": "wheelchair" + }, + { + "code": "1f6ad", + "name": "no_smoking" + }, + { + "code": "1f6be", + "name": "wc" + }, + { + "code": "1f17f", + "name": "parking" + }, + { + "code": "1f6b0", + "name": "potable_water" + }, + { + "code": "1f6b9", + "name": "mens" + }, + { + "code": "1f6ba", + "name": "womens" + }, + { + "code": "1f6bc", + "name": "baby_symbol" + }, + { + "code": "1f6bb", + "name": "restroom" + }, + { + "code": "1f6ae", + "name": "put_litter_in_its_place" + }, + { + "code": "1f3a6", + "name": "cinema" + }, + { + "code": "1f4f6", + "name": "signal_strength" + }, + { + "code": "1f201", + "name": "koko" + }, + { + "code": "1f196", + "name": "ng" + }, + { + "code": "1f197", + "name": "ok" + }, + { + "code": "1f199", + "name": "up" + }, + { + "code": "1f192", + "name": "cool" + }, + { + "code": "1f195", + "name": "new" + }, + { + "code": "1f193", + "name": "free" + }, + { + "code": "0030-fe0f-20e3", + "name": "zero" + }, + { + "code": "0031-fe0f-20e3", + "name": "one" + }, + { + "code": "0032-fe0f-20e3", + "name": "two" + }, + { + "code": "0033-fe0f-20e3", + "name": "three" + }, + { + "code": "0034-fe0f-20e3", + "name": "four" + }, + { + "code": "0035-fe0f-20e3", + "name": "five" + }, + { + "code": "0036-fe0f-20e3", + "name": "six" + }, + { + "code": "0037-fe0f-20e3", + "name": "seven" + }, + { + "code": "0038-fe0f-20e3", + "name": "eight" + }, + { + "code": "0039-fe0f-20e3", + "name": "nine" + }, + { + "code": "1f51f", + "name": "keycap_ten" + }, + { + "code": "002a-fe0f-20e3", + "name": "asterisk" + }, + { + "code": "1f522", + "name": "1234" + }, + { + "code": "25b6", + "name": "arrow_forward" + }, + { + "code": "23f8", + "name": "pause_button" + }, + { + "code": "23ed", + "name": "next_track_button" + }, + { + "code": "23f9", + "name": "stop_button" + }, + { + "code": "23fa", + "name": "record_button" + }, + { + "code": "23ef", + "name": "play_or_pause_button" + }, + { + "code": "23ee", + "name": "previous_track_button" + }, + { + "code": "23e9", + "name": "fast_forward" + }, + { + "code": "23ea", + "name": "rewind" + }, + { + "code": "1f500", + "name": "twisted_rightwards_arrows" + }, + { + "code": "1f501", + "name": "repeat" + }, + { + "code": "1f502", + "name": "repeat_one" + }, + { + "code": "25c0", + "name": "arrow_backward" + }, + { + "code": "1f53c", + "name": "arrow_up_small" + }, + { + "code": "1f53d", + "name": "arrow_down_small" + }, + { + "code": "23eb", + "name": "arrow_double_up" + }, + { + "code": "23ec", + "name": "arrow_double_down" + }, + { + "code": "27a1", + "name": "arrow_right" + }, + { + "code": "2b05", + "name": "arrow_left" + }, + { + "code": "2b06", + "name": "arrow_up" + }, + { + "code": "2b07", + "name": "arrow_down" + }, + { + "code": "2197", + "name": "arrow_upper_right" + }, + { + "code": "2198", + "name": "arrow_lower_right" + }, + { + "code": "2199", + "name": "arrow_lower_left" + }, + { + "code": "2196", + "name": "arrow_upper_left" + }, + { + "code": "2195", + "name": "arrow_up_down" + }, + { + "code": "2194", + "name": "left_right_arrow" + }, + { + "code": "1f504", + "name": "arrows_counterclockwise" + }, + { + "code": "21aa", + "name": "arrow_right_hook" + }, + { + "code": "21a9", + "name": "leftwards_arrow_with_hook" + }, + { + "code": "2934", + "name": "arrow_heading_up" + }, + { + "code": "2935", + "name": "arrow_heading_down" + }, + { + "code": "0023-fe0f-20e3", + "name": "hash" + }, + { + "code": "2139", + "name": "information_source" + }, + { + "code": "1f524", + "name": "abc" + }, + { + "code": "1f521", + "name": "abcd" + }, + { + "code": "1f520", + "name": "capital_abcd" + }, + { + "code": "1f523", + "name": "symbols" + }, + { + "code": "1f3b5", + "name": "musical_note" + }, + { + "code": "1f3b6", + "name": "notes" + }, + { + "code": "3030", + "name": "wavy_dash" + }, + { + "code": "27b0", + "name": "curly_loop" + }, + { + "code": "2714", + "name": "heavy_check_mark" + }, + { + "code": "1f503", + "name": "arrows_clockwise" + }, + { + "code": "2795", + "name": "heavy_plus_sign" + }, + { + "code": "2796", + "name": "heavy_minus_sign" + }, + { + "code": "2797", + "name": "heavy_division_sign" + }, + { + "code": "2716", + "name": "heavy_multiplication_x" + }, + { + "code": "1f4b2", + "name": "heavy_dollar_sign" + }, + { + "code": "1f4b1", + "name": "currency_exchange" + }, + { + "code": "00a9", + "name": "copyright" + }, + { + "code": "00ae", + "name": "registered" + }, + { + "code": "2122", + "name": "tm" + }, + { + "code": "1f51a", + "name": "end" + }, + { + "code": "1f519", + "name": "back" + }, + { + "code": "1f51b", + "name": "on" + }, + { + "code": "1f51d", + "name": "top" + }, + { + "code": "1f51c", + "name": "soon" + }, + { + "code": "2611", + "name": "ballot_box_with_check" + }, + { + "code": "1f518", + "name": "radio_button" + }, + { + "code": "26aa", + "name": "white_circle" + }, + { + "code": "26ab", + "name": "black_circle" + }, + { + "code": "1f534", + "name": "red_circle" + }, + { + "code": "1f535", + "name": "large_blue_circle" + }, + { + "code": "1f538", + "name": "small_orange_diamond" + }, + { + "code": "1f539", + "name": "small_blue_diamond" + }, + { + "code": "1f536", + "name": "large_orange_diamond" + }, + { + "code": "1f537", + "name": "large_blue_diamond" + }, + { + "code": "1f53a", + "name": "small_red_triangle" + }, + { + "code": "25aa", + "name": "black_small_square" + }, + { + "code": "25ab", + "name": "white_small_square" + }, + { + "code": "2b1b", + "name": "black_large_square" + }, + { + "code": "2b1c", + "name": "white_large_square" + }, + { + "code": "1f53b", + "name": "small_red_triangle_down" + }, + { + "code": "25fc", + "name": "black_medium_square" + }, + { + "code": "25fb", + "name": "white_medium_square" + }, + { + "code": "25fe", + "name": "black_medium_small_square" + }, + { + "code": "25fd", + "name": "white_medium_small_square" + }, + { + "code": "1f532", + "name": "black_square_button" + }, + { + "code": "1f533", + "name": "white_square_button" + }, + { + "code": "1f508", + "name": "speaker" + }, + { + "code": "1f509", + "name": "sound" + }, + { + "code": "1f50a", + "name": "loud_sound" + }, + { + "code": "1f507", + "name": "mute" + }, + { + "code": "1f4e3", + "name": "mega" + }, + { + "code": "1f4e2", + "name": "loudspeaker" + }, + { + "code": "1f514", + "name": "bell" + }, + { + "code": "1f515", + "name": "no_bell" + }, + { + "code": "1f0cf", + "name": "black_joker" + }, + { + "code": "1f004", + "name": "mahjong" + }, + { + "code": "2660", + "name": "spades" + }, + { + "code": "2663", + "name": "clubs" + }, + { + "code": "2665", + "name": "hearts" + }, + { + "code": "2666", + "name": "diamonds" + }, + { + "code": "1f3b4", + "name": "flower_playing_cards" + }, + { + "code": "1f4ad", + "name": "thought_balloon" + }, + { + "code": "1f5ef", + "name": "right_anger_bubble" + }, + { + "code": "1f4ac", + "name": "speech_balloon" }, { "code": "1f5e8", "name": "left_speech_bubble" }, + { + "code": "1f550", + "name": "clock1" + }, + { + "code": "1f551", + "name": "clock2" + }, + { + "code": "1f552", + "name": "clock3" + }, + { + "code": "1f553", + "name": "clock4" + }, + { + "code": "1f554", + "name": "clock5" + }, + { + "code": "1f555", + "name": "clock6" + }, + { + "code": "1f556", + "name": "clock7" + }, + { + "code": "1f557", + "name": "clock8" + }, + { + "code": "1f558", + "name": "clock9" + }, + { + "code": "1f559", + "name": "clock10" + }, + { + "code": "1f55a", + "name": "clock11" + }, + { + "code": "1f55b", + "name": "clock12" + }, + { + "code": "1f55c", + "name": "clock130" + }, + { + "code": "1f55d", + "name": "clock230" + }, + { + "code": "1f55e", + "name": "clock330" + }, + { + "code": "1f55f", + "name": "clock430" + }, + { + "code": "1f560", + "name": "clock530" + }, + { + "code": "1f561", + "name": "clock630" + }, + { + "code": "1f562", + "name": "clock730" + }, + { + "code": "1f563", + "name": "clock830" + }, + { + "code": "1f564", + "name": "clock930" + }, + { + "code": "1f565", + "name": "clock1030" + }, + { + "code": "1f566", + "name": "clock1130" + }, + { + "code": "1f567", + "name": "clock1230" + }, + { + "code": "1f1e6-1f1eb", + "name": "afghanistan" + }, + { + "code": "1f1e6-1f1fd", + "name": "aland_islands" + }, + { + "code": "1f1e6-1f1f1", + "name": "albania" + }, + { + "code": "1f1e9-1f1ff", + "name": "algeria" + }, + { + "code": "1f1e6-1f1f8", + "name": "american_samoa" + }, + { + "code": "1f1e6-1f1e9", + "name": "andorra" + }, + { + "code": "1f1e6-1f1f4", + "name": "angola" + }, + { + "code": "1f1e6-1f1ee", + "name": "anguilla" + }, + { + "code": "1f1e6-1f1f6", + "name": "antarctica" + }, + { + "code": "1f1e6-1f1ec", + "name": "antigua_barbuda" + }, + { + "code": "1f1e6-1f1f7", + "name": "argentina" + }, + { + "code": "1f1e6-1f1f2", + "name": "armenia" + }, + { + "code": "1f1e6-1f1fc", + "name": "aruba" + }, + { + "code": "1f1e6-1f1fa", + "name": "australia" + }, + { + "code": "1f1e6-1f1f9", + "name": "austria" + }, + { + "code": "1f1e6-1f1ff", + "name": "azerbaijan" + }, + { + "code": "1f1e7-1f1f8", + "name": "bahamas" + }, + { + "code": "1f1e7-1f1ed", + "name": "bahrain" + }, + { + "code": "1f1e7-1f1e9", + "name": "bangladesh" + }, + { + "code": "1f1e7-1f1e7", + "name": "barbados" + }, + { + "code": "1f1e7-1f1fe", + "name": "belarus" + }, + { + "code": "1f1e7-1f1ea", + "name": "belgium" + }, + { + "code": "1f1e7-1f1ff", + "name": "belize" + }, + { + "code": "1f1e7-1f1ef", + "name": "benin" + }, + { + "code": "1f1e7-1f1f2", + "name": "bermuda" + }, + { + "code": "1f1e7-1f1f9", + "name": "bhutan" + }, + { + "code": "1f1e7-1f1f4", + "name": "bolivia" + }, + { + "code": "1f1e7-1f1f6", + "name": "caribbean_netherlands" + }, + { + "code": "1f1e7-1f1e6", + "name": "bosnia_herzegovina" + }, + { + "code": "1f1e7-1f1fc", + "name": "botswana" + }, + { + "code": "1f1e7-1f1f7", + "name": "brazil" + }, + { + "code": "1f1ee-1f1f4", + "name": "british_indian_ocean_territory" + }, + { + "code": "1f1fb-1f1ec", + "name": "british_virgin_islands" + }, + { + "code": "1f1e7-1f1f3", + "name": "brunei" + }, + { + "code": "1f1e7-1f1ec", + "name": "bulgaria" + }, + { + "code": "1f1e7-1f1eb", + "name": "burkina_faso" + }, + { + "code": "1f1e7-1f1ee", + "name": "burundi" + }, + { + "code": "1f1e8-1f1fb", + "name": "cape_verde" + }, + { + "code": "1f1f0-1f1ed", + "name": "cambodia" + }, + { + "code": "1f1e8-1f1f2", + "name": "cameroon" + }, + { + "code": "1f1e8-1f1e6", + "name": "canada" + }, + { + "code": "1f1ee-1f1e8", + "name": "canary_islands" + }, + { + "code": "1f1f0-1f1fe", + "name": "cayman_islands" + }, + { + "code": "1f1e8-1f1eb", + "name": "central_african_republic" + }, + { + "code": "1f1f9-1f1e9", + "name": "chad" + }, + { + "code": "1f1e8-1f1f1", + "name": "chile" + }, { "code": "1f1e8-1f1f3", "name": "cn" }, + { + "code": "1f1e8-1f1fd", + "name": "christmas_island" + }, + { + "code": "1f1e8-1f1e8", + "name": "cocos_islands" + }, + { + "code": "1f1e8-1f1f4", + "name": "colombia" + }, + { + "code": "1f1f0-1f1f2", + "name": "comoros" + }, + { + "code": "1f1e8-1f1ec", + "name": "congo_brazzaville" + }, + { + "code": "1f1e8-1f1e9", + "name": "congo_kinshasa" + }, + { + "code": "1f1e8-1f1f0", + "name": "cook_islands" + }, + { + "code": "1f1e8-1f1f7", + "name": "costa_rica" + }, + { + "code": "1f1ed-1f1f7", + "name": "croatia" + }, + { + "code": "1f1e8-1f1fa", + "name": "cuba" + }, + { + "code": "1f1e8-1f1fc", + "name": "curacao" + }, + { + "code": "1f1e8-1f1fe", + "name": "cyprus" + }, + { + "code": "1f1e8-1f1ff", + "name": "czech_republic" + }, + { + "code": "1f1e9-1f1f0", + "name": "denmark" + }, + { + "code": "1f1e9-1f1ef", + "name": "djibouti" + }, + { + "code": "1f1e9-1f1f2", + "name": "dominica" + }, + { + "code": "1f1e9-1f1f4", + "name": "dominican_republic" + }, + { + "code": "1f1ea-1f1e8", + "name": "ecuador" + }, + { + "code": "1f1ea-1f1ec", + "name": "egypt" + }, + { + "code": "1f1f8-1f1fb", + "name": "el_salvador" + }, + { + "code": "1f1ec-1f1f6", + "name": "equatorial_guinea" + }, + { + "code": "1f1ea-1f1f7", + "name": "eritrea" + }, + { + "code": "1f1ea-1f1ea", + "name": "estonia" + }, + { + "code": "1f1ea-1f1f9", + "name": "ethiopia" + }, + { + "code": "1f1ea-1f1fa", + "name": "eu" + }, + { + "code": "1f1eb-1f1f0", + "name": "falkland_islands" + }, + { + "code": "1f1eb-1f1f4", + "name": "faroe_islands" + }, + { + "code": "1f1eb-1f1ef", + "name": "fiji" + }, + { + "code": "1f1eb-1f1ee", + "name": "finland" + }, { "code": "1f1eb-1f1f7", "name": "fr" }, + { + "code": "1f1ec-1f1eb", + "name": "french_guiana" + }, + { + "code": "1f1f5-1f1eb", + "name": "french_polynesia" + }, + { + "code": "1f1f9-1f1eb", + "name": "french_southern_territories" + }, + { + "code": "1f1ec-1f1e6", + "name": "gabon" + }, + { + "code": "1f1ec-1f1f2", + "name": "gambia" + }, + { + "code": "1f1ec-1f1ea", + "name": "georgia" + }, { "code": "1f1e9-1f1ea", "name": "de" }, + { + "code": "1f1ec-1f1ed", + "name": "ghana" + }, + { + "code": "1f1ec-1f1ee", + "name": "gibraltar" + }, + { + "code": "1f1ec-1f1f7", + "name": "greece" + }, + { + "code": "1f1ec-1f1f1", + "name": "greenland" + }, + { + "code": "1f1ec-1f1e9", + "name": "grenada" + }, + { + "code": "1f1ec-1f1f5", + "name": "guadeloupe" + }, + { + "code": "1f1ec-1f1fa", + "name": "guam" + }, + { + "code": "1f1ec-1f1f9", + "name": "guatemala" + }, + { + "code": "1f1ec-1f1ec", + "name": "guernsey" + }, + { + "code": "1f1ec-1f1f3", + "name": "guinea" + }, + { + "code": "1f1ec-1f1fc", + "name": "guinea_bissau" + }, + { + "code": "1f1ec-1f1fe", + "name": "guyana" + }, + { + "code": "1f1ed-1f1f9", + "name": "haiti" + }, + { + "code": "1f1ed-1f1f3", + "name": "honduras" + }, + { + "code": "1f1ed-1f1f0", + "name": "hong_kong" + }, + { + "code": "1f1ed-1f1fa", + "name": "hungary" + }, + { + "code": "1f1ee-1f1f8", + "name": "iceland" + }, + { + "code": "1f1ee-1f1f3", + "name": "india" + }, + { + "code": "1f1ee-1f1e9", + "name": "indonesia" + }, + { + "code": "1f1ee-1f1f7", + "name": "iran" + }, + { + "code": "1f1ee-1f1f6", + "name": "iraq" + }, + { + "code": "1f1ee-1f1ea", + "name": "ireland" + }, + { + "code": "1f1ee-1f1f2", + "name": "isle_of_man" + }, + { + "code": "1f1ee-1f1f1", + "name": "israel" + }, { "code": "1f1ee-1f1f9", "name": "it" }, + { + "code": "1f1e8-1f1ee", + "name": "cote_divoire" + }, + { + "code": "1f1ef-1f1f2", + "name": "jamaica" + }, { "code": "1f1ef-1f1f5", "name": "jp" }, + { + "code": "1f1ef-1f1ea", + "name": "jersey" + }, + { + "code": "1f1ef-1f1f4", + "name": "jordan" + }, + { + "code": "1f1f0-1f1ff", + "name": "kazakhstan" + }, + { + "code": "1f1f0-1f1ea", + "name": "kenya" + }, + { + "code": "1f1f0-1f1ee", + "name": "kiribati" + }, + { + "code": "1f1fd-1f1f0", + "name": "kosovo" + }, + { + "code": "1f1f0-1f1fc", + "name": "kuwait" + }, + { + "code": "1f1f0-1f1ec", + "name": "kyrgyzstan" + }, + { + "code": "1f1f1-1f1e6", + "name": "laos" + }, + { + "code": "1f1f1-1f1fb", + "name": "latvia" + }, + { + "code": "1f1f1-1f1e7", + "name": "lebanon" + }, + { + "code": "1f1f1-1f1f8", + "name": "lesotho" + }, + { + "code": "1f1f1-1f1f7", + "name": "liberia" + }, + { + "code": "1f1f1-1f1fe", + "name": "libya" + }, + { + "code": "1f1f1-1f1ee", + "name": "liechtenstein" + }, + { + "code": "1f1f1-1f1f9", + "name": "lithuania" + }, + { + "code": "1f1f1-1f1fa", + "name": "luxembourg" + }, + { + "code": "1f1f2-1f1f4", + "name": "macau" + }, + { + "code": "1f1f2-1f1f0", + "name": "macedonia" + }, + { + "code": "1f1f2-1f1ec", + "name": "madagascar" + }, + { + "code": "1f1f2-1f1fc", + "name": "malawi" + }, + { + "code": "1f1f2-1f1fe", + "name": "malaysia" + }, + { + "code": "1f1f2-1f1fb", + "name": "maldives" + }, + { + "code": "1f1f2-1f1f1", + "name": "mali" + }, + { + "code": "1f1f2-1f1f9", + "name": "malta" + }, + { + "code": "1f1f2-1f1ed", + "name": "marshall_islands" + }, + { + "code": "1f1f2-1f1f6", + "name": "martinique" + }, + { + "code": "1f1f2-1f1f7", + "name": "mauritania" + }, + { + "code": "1f1f2-1f1fa", + "name": "mauritius" + }, + { + "code": "1f1fe-1f1f9", + "name": "mayotte" + }, + { + "code": "1f1f2-1f1fd", + "name": "mexico" + }, + { + "code": "1f1eb-1f1f2", + "name": "micronesia" + }, + { + "code": "1f1f2-1f1e9", + "name": "moldova" + }, + { + "code": "1f1f2-1f1e8", + "name": "monaco" + }, + { + "code": "1f1f2-1f1f3", + "name": "mongolia" + }, + { + "code": "1f1f2-1f1ea", + "name": "montenegro" + }, + { + "code": "1f1f2-1f1f8", + "name": "montserrat" + }, + { + "code": "1f1f2-1f1e6", + "name": "morocco" + }, + { + "code": "1f1f2-1f1ff", + "name": "mozambique" + }, + { + "code": "1f1f2-1f1f2", + "name": "myanmar" + }, + { + "code": "1f1f3-1f1e6", + "name": "namibia" + }, + { + "code": "1f1f3-1f1f7", + "name": "nauru" + }, + { + "code": "1f1f3-1f1f5", + "name": "nepal" + }, + { + "code": "1f1f3-1f1f1", + "name": "netherlands" + }, + { + "code": "1f1f3-1f1e8", + "name": "new_caledonia" + }, + { + "code": "1f1f3-1f1ff", + "name": "new_zealand" + }, + { + "code": "1f1f3-1f1ee", + "name": "nicaragua" + }, + { + "code": "1f1f3-1f1ea", + "name": "niger" + }, + { + "code": "1f1f3-1f1ec", + "name": "nigeria" + }, + { + "code": "1f1f3-1f1fa", + "name": "niue" + }, + { + "code": "1f1f3-1f1eb", + "name": "norfolk_island" + }, + { + "code": "1f1f2-1f1f5", + "name": "northern_mariana_islands" + }, + { + "code": "1f1f0-1f1f5", + "name": "north_korea" + }, + { + "code": "1f1f3-1f1f4", + "name": "norway" + }, + { + "code": "1f1f4-1f1f2", + "name": "oman" + }, + { + "code": "1f1f5-1f1f0", + "name": "pakistan" + }, + { + "code": "1f1f5-1f1fc", + "name": "palau" + }, + { + "code": "1f1f5-1f1f8", + "name": "palestinian_territories" + }, + { + "code": "1f1f5-1f1e6", + "name": "panama" + }, + { + "code": "1f1f5-1f1ec", + "name": "papua_new_guinea" + }, + { + "code": "1f1f5-1f1fe", + "name": "paraguay" + }, + { + "code": "1f1f5-1f1ea", + "name": "peru" + }, + { + "code": "1f1f5-1f1ed", + "name": "philippines" + }, + { + "code": "1f1f5-1f1f3", + "name": "pitcairn_islands" + }, + { + "code": "1f1f5-1f1f1", + "name": "poland" + }, + { + "code": "1f1f5-1f1f9", + "name": "portugal" + }, + { + "code": "1f1f5-1f1f7", + "name": "puerto_rico" + }, + { + "code": "1f1f6-1f1e6", + "name": "qatar" + }, + { + "code": "1f1f7-1f1ea", + "name": "reunion" + }, + { + "code": "1f1f7-1f1f4", + "name": "romania" + }, { "code": "1f1f7-1f1fa", "name": "ru" }, + { + "code": "1f1f7-1f1fc", + "name": "rwanda" + }, + { + "code": "1f1e7-1f1f1", + "name": "st_barthelemy" + }, + { + "code": "1f1f8-1f1ed", + "name": "st_helena" + }, + { + "code": "1f1f0-1f1f3", + "name": "st_kitts_nevis" + }, + { + "code": "1f1f1-1f1e8", + "name": "st_lucia" + }, + { + "code": "1f1f5-1f1f2", + "name": "st_pierre_miquelon" + }, + { + "code": "1f1fb-1f1e8", + "name": "st_vincent_grenadines" + }, + { + "code": "1f1fc-1f1f8", + "name": "samoa" + }, + { + "code": "1f1f8-1f1f2", + "name": "san_marino" + }, + { + "code": "1f1f8-1f1f9", + "name": "sao_tome_principe" + }, + { + "code": "1f1f8-1f1e6", + "name": "saudi_arabia" + }, + { + "code": "1f1f8-1f1f3", + "name": "senegal" + }, + { + "code": "1f1f7-1f1f8", + "name": "serbia" + }, + { + "code": "1f1f8-1f1e8", + "name": "seychelles" + }, + { + "code": "1f1f8-1f1f1", + "name": "sierra_leone" + }, + { + "code": "1f1f8-1f1ec", + "name": "singapore" + }, + { + "code": "1f1f8-1f1fd", + "name": "sint_maarten" + }, + { + "code": "1f1f8-1f1f0", + "name": "slovakia" + }, + { + "code": "1f1f8-1f1ee", + "name": "slovenia" + }, + { + "code": "1f1f8-1f1e7", + "name": "solomon_islands" + }, + { + "code": "1f1f8-1f1f4", + "name": "somalia" + }, + { + "code": "1f1ff-1f1e6", + "name": "south_africa" + }, + { + "code": "1f1ec-1f1f8", + "name": "south_georgia_south_sandwich_islands" + }, { "code": "1f1f0-1f1f7", "name": "kr" }, + { + "code": "1f1f8-1f1f8", + "name": "south_sudan" + }, { "code": "1f1ea-1f1f8", "name": "es" }, + { + "code": "1f1f1-1f1f0", + "name": "sri_lanka" + }, + { + "code": "1f1f8-1f1e9", + "name": "sudan" + }, + { + "code": "1f1f8-1f1f7", + "name": "suriname" + }, + { + "code": "1f1f8-1f1ff", + "name": "swaziland" + }, + { + "code": "1f1f8-1f1ea", + "name": "sweden" + }, + { + "code": "1f1e8-1f1ed", + "name": "switzerland" + }, + { + "code": "1f1f8-1f1fe", + "name": "syria" + }, + { + "code": "1f1f9-1f1fc", + "name": "taiwan" + }, + { + "code": "1f1f9-1f1ef", + "name": "tajikistan" + }, + { + "code": "1f1f9-1f1ff", + "name": "tanzania" + }, + { + "code": "1f1f9-1f1ed", + "name": "thailand" + }, + { + "code": "1f1f9-1f1f1", + "name": "timor_leste" + }, + { + "code": "1f1f9-1f1ec", + "name": "togo" + }, + { + "code": "1f1f9-1f1f0", + "name": "tokelau" + }, + { + "code": "1f1f9-1f1f4", + "name": "tonga" + }, + { + "code": "1f1f9-1f1f9", + "name": "trinidad_tobago" + }, + { + "code": "1f1f9-1f1f3", + "name": "tunisia" + }, + { + "code": "1f1f9-1f1f7", + "name": "tr" + }, + { + "code": "1f1f9-1f1f2", + "name": "turkmenistan" + }, + { + "code": "1f1f9-1f1e8", + "name": "turks_caicos_islands" + }, + { + "code": "1f1f9-1f1fb", + "name": "tuvalu" + }, + { + "code": "1f1fa-1f1ec", + "name": "uganda" + }, + { + "code": "1f1fa-1f1e6", + "name": "ukraine" + }, + { + "code": "1f1e6-1f1ea", + "name": "united_arab_emirates" + }, { "code": "1f1ec-1f1e7", - "name": "gb" + "name": "uk" }, { "code": "1f1fa-1f1f8", "name": "us" + }, + { + "code": "1f1fb-1f1ee", + "name": "us_virgin_islands" + }, + { + "code": "1f1fa-1f1fe", + "name": "uruguay" + }, + { + "code": "1f1fa-1f1ff", + "name": "uzbekistan" + }, + { + "code": "1f1fb-1f1fa", + "name": "vanuatu" + }, + { + "code": "1f1fb-1f1e6", + "name": "vatican_city" + }, + { + "code": "1f1fb-1f1ea", + "name": "venezuela" + }, + { + "code": "1f1fb-1f1f3", + "name": "vietnam" + }, + { + "code": "1f1fc-1f1eb", + "name": "wallis_futuna" + }, + { + "code": "1f1ea-1f1ed", + "name": "western_sahara" + }, + { + "code": "1f1fe-1f1ea", + "name": "yemen" + }, + { + "code": "1f1ff-1f1f2", + "name": "zambia" + }, + { + "code": "1f1ff-1f1fc", + "name": "zimbabwe" + }, + { + "code": "1f44d", + "name": "thumbsup" + }, + { + "code": "1f44e", + "name": "thumbsdown" } ], + "tonableEmojis": [ + "raised_hands", + "clap", + "wave", + "call_me_hand", + "facepunch", + "fist", + "fist_left", + "fist_right", + "v", + "ok_hand", + "raised_hand", + "raised_back_of_hand", + "open_hands", + "muscle", + "pray", + "point_up", + "point_up_2", + "point_down", + "point_left", + "point_right", + "fu", + "raised_hand_with_fingers_splayed", + "metal", + "crossed_fingers", + "vulcan_salute", + "writing_hand", + "selfie", + "nail_care", + "ear", + "nose", + "baby", + "boy", + "girl", + "man", + "woman", + "blonde_woman", + "blonde_man", + "older_man", + "older_woman", + "man_with_gua_pi_mao", + "woman_with_turban", + "man_with_turban", + "policewoman", + "policeman", + "construction_worker_woman", + "construction_worker_man", + "guardswoman", + "guardsman", + "female_detective", + "male_detective", + "woman_health_worker", + "man_health_worker", + "woman_pilot", + "man_pilot", + "woman_judge", + "man_judge", + "mrs_claus", + "santa", + "angel", + "pregnant_woman", + "princess", + "prince", + "bride_with_veil", + "man_in_tuxedo", + "running_woman", + "running_man", + "walking_woman", + "walking_man", + "dancer", + "man_dancing", + "bowing_woman", + "bowing_man", + "man_facepalming", + "woman_facepalming", + "woman_shrugging", + "man_shrugging", + "tipping_hand_woman", + "tipping_hand_man", + "no_good_woman", + "no_good_man", + "ok_woman", + "ok_man", + "raising_hand_woman", + "raising_hand_man", + "pouting_woman", + "pouting_man", + "frowning_woman", + "frowning_man", + "haircut_woman", + "haircut_man", + "massage_woman", + "massage_man", + "golfing_woman", + "golfing_man", + "snowboarder", + "woman_cartwheeling", + "man_cartwheeling", + "woman_playing_handball", + "man_playing_handball", + "rowing_woman", + "rowing_man", + "swimming_woman", + "swimming_man", + "woman_playing_water_polo", + "man_playing_water_polo", + "surfing_woman", + "surfing_man", + "bath", + "basketball_woman", + "basketball_man", + "weight_lifting_woman", + "weight_lifting_man", + "biking_woman", + "biking_man", + "mountain_biking_woman", + "mountain_biking_man", + "horse_racing", + "business_suit_levitating", + "woman_juggling", + "man_juggling", + "sleeping_bed", + "thumbsup", + "thumbsdown" + ], "aliases": { - "airplane_small": [ - "small_airplane" - ], - "anger_right": [ - "right_anger_bubble" - ], - "atom": [ - "atom_symbol" + "right_anger_bubble": [ + "anger_right" ], "ballot_box": [ "ballot_box_with_ballot" ], - "basketball_player": [ + "basketball_man": [ + "basketball_player", "person_with_ball" ], - "beach": [ + "beach_umbrella": [ + "umbrella_on_ground", + "beach", "beach_with_umbrella" ], - "beach_umbrella": [ + "parasol_on_ground": [ "umbrella_on_ground" ], - "bellhop": [ - "bellhop_bell" + "bellhop_bell": [ + "bellhop" ], "biohazard": [ "biohazard_sign" @@ -4216,11 +5882,12 @@ "bow_and_arrow": [ "archery" ], - "calendar_spiral": [ + "spiral_calendar": [ + "calendar_spiral", "spiral_calendar_pad" ], - "card_box": [ - "card_file_box" + "card_file_box": [ + "card_box" ], "champagne": [ "bottle_with_popping_cork" @@ -4229,28 +5896,13 @@ "cheese_wedge" ], "city_sunset": [ - "city_sunrise" + "city_dusk" ], "clock": [ "mantlepiece_clock" ], - "cloud_lightning": [ - "cloud_with_lightning" - ], - "cloud_rain": [ - "cloud_with_rain" - ], - "cloud_snow": [ - "cloud_with_snow" - ], - "cloud_tornado": [ - "cloud_with_tornado" - ], - "construction_site": [ - "building_construction" - ], - "couch": [ - "couch_and_lamp" + "couch_and_lamp": [ + "couch" ], "crayon": [ "lower_left_crayon" @@ -4258,34 +5910,29 @@ "cricket": [ "cricket_bat_ball" ], - "cross": [ - "latin_cross" - ], - "cruise_ship": [ - "passenger_ship" + "latin_cross": [ + "cross" ], "dagger": [ "dagger_knife" ], - "desktop": [ - "desktop_computer" + "desktop_computer": [ + "desktop" ], - "dividers": [ - "card_index_dividers" + "card_index_dividers": [ + "dividers" ], "dove": [ "dove_of_peace" ], - "e-mail": [ - "email" - ], - "feet": [ - "paw_prints" + "footprints": [ + "feet" ], "fire": [ "flame" ], - "flag_black": [ + "black_flag": [ + "flag_black", "waving_black_flag" ], "cn": [ @@ -4300,7 +5947,8 @@ "fr": [ "flag_fr" ], - "gb": [ + "uk": [ + "gb", "flag_gb" ], "it": [ @@ -4318,101 +5966,80 @@ "us": [ "flag_us" ], - "flag_white": [ + "white_flag": [ + "flag_white", "waving_white_flag" ], - "fork_knife_plate": [ + "plate_with_cutlery": [ + "fork_knife_plate", "fork_and_knife_with_plate" ], - "frame_photo": [ + "framed_picture": [ + "frame_photo", "frame_with_picture" ], - "frowning2": [ - "white_frowning_face" + "hammer_and_pick": [ + "hammer_pick" ], - "hammer_pick": [ - "hammer_and_pick" - ], - "hand_splayed": [ - "raised_hand_with_fingers_splayed" - ], - "head_bandage": [ - "face_with_head_bandage" - ], - "heart_exclamation": [ + "heavy_heart_exclamation": [ + "heart_exclamation", "heavy_heart_exclamation_mark_ornament" ], - "helmet_with_cross": [ - "helmet_with_white_cross" - ], - "homes": [ + "houses": [ + "homes", "house_buildings" ], "hotdog": [ "hot_dog" ], - "house_abandoned": [ + "derelict_house": [ + "house_abandoned", "derelict_house_building" ], - "hugging": [ - "hugging_face" + "desert_island": [ + "island" ], - "island": [ - "desert_island" - ], - "key2": [ - "old_key" + "old_key": [ + "key2" ], "laughing": [ "satisfied" ], - "levitate": [ + "business_suit_levitating": [ + "levitate", "man_in_business_suit_levitating" ], - "lifter": [ + "weight_lifting_man": [ + "lifter", "weight_lifter" ], - "lion_face": [ - "lion" - ], - "map": [ - "world_map" - ], - "medal": [ + "medal_sports": [ + "medal", "sports_medal" ], "metal": [ "sign_of_the_horns" ], - "microphone2": [ - "studio_microphone" - ], - "middle_finger": [ + "fu": [ + "middle_finger", "reversed_hand_with_middle_finger_extended" ], - "money_mouth": [ - "money_mouth_face" - ], "motorcycle": [ "racing_motorcycle" ], "mountain_snow": [ "snow_capped_mountain" ], - "mouse_three_button": [ - "three_button_mouse" - ], - "nerd": [ - "nerd_face" - ], - "newspaper2": [ + "newspaper_roll": [ + "newspaper2", "rolled_up_newspaper" ], - "notepad_spiral": [ + "spiral_notepad": [ + "notepad_spiral", "spiral_note_pad" ], - "oil": [ - "oil_drum" + "oil_drum": [ + "oil" ], "older_woman": [ "grandma" @@ -4423,19 +6050,17 @@ "paperclips": [ "linked_paperclips" ], - "park": [ - "national_park" - ], "pause_button": [ "double_vertical_bar" ], - "peace": [ - "peace_symbol" + "peace_symbol": [ + "peace" ], "pen_ballpoint": [ "lower_left_ballpoint_pen" ], - "pen_fountain": [ + "fountain_pen": [ + "pen_fountain", "lower_left_fountain_pen" ], "ping_pong": [ @@ -4449,12 +6074,6 @@ "hankey", "poo" ], - "projector": [ - "film_projector" - ], - "race_car": [ - "racing_car" - ], "radioactive": [ "radioactive_sign" ], @@ -4464,30 +6083,19 @@ "robot": [ "robot_face" ], - "rolling_eyes": [ - "face_with_rolling_eyes" - ], "skull": [ "skeleton" ], - "skull_crossbones": [ - "skull_and_crossbones" - ], - "slight_frown": [ - "slightly_frowning_face" - ], - "slight_smile": [ - "slightly_smiling_face" + "skull_and_crossbones": [ + "skull_crossbones" ], "speaking_head": [ "speaking_head_in_silhouette" ], - "spy": [ + "male_detective": [ + "spy", "sleuth_or_spy" ], - "thermometer_face": [ - "face_with_thermometer" - ], "thinking": [ "thinking_face" ], @@ -4497,47 +6105,356 @@ "thumbsup": [ "+1" ], - "thunder_cloud_rain": [ + "cloud_with_lightning_and_rain": [ + "thunder_cloud_rain", "thunder_cloud_and_rain" ], "tickets": [ "admission_tickets" ], - "timer": [ - "timer_clock" - ], - "tools": [ - "hammer_and_wrench" - ], - "track_next": [ + "next_track_button": [ + "track_next", "next_track" ], - "track_previous": [ + "previous_track_button": [ + "track_previous", "previous_track" ], "unicorn": [ "unicorn_face" ], - "upside_down": [ - "upside_down_face" + "funeral_urn": [ + "urn" ], - "urn": [ - "funeral_urn" - ], - "vulcan": [ - "raised_hand_with_part_between_middle_and_ring_fingers" - ], - "white_sun_cloud": [ + "sun_behind_large_cloud": [ + "white_sun_cloud", "white_sun_behind_cloud" ], - "white_sun_rain_cloud": [ + "sun_behind_rain_cloud": [ + "white_sun_rain_cloud", "white_sun_behind_cloud_with_rain" ], - "white_sun_small_cloud": [ + "partly_sunny": [ + "white_sun_small_cloud", "white_sun_with_small_cloud" ], - "zipper_mouth": [ - "zipper_mouth_face" + "open_umbrella": [ + "umbrella2" + ], + "hammer_and_wrench": [ + "tools" + ], + "face_with_thermometer": [ + "thermometer_face" + ], + "timer_clock": [ + "timer" + ], + "keycap_ten": [ + "ten" + ], + "memo": [ + "pencil" + ], + "rescue_worker_helmet": [ + "helmet_with_cross", + "helmet_with_white_cross" + ], + "slightly_smiling_face": [ + "slightly_smiling", + "slight_smile" + ], + "construction_worker_man": [ + "construction_worker" + ], + "upside_down_face": [ + "upside_down" + ], + "money_mouth_face": [ + "money_mouth" + ], + "nerd_face": [ + "nerd" + ], + "hugs": [ + "hugging", + "hugging_face" + ], + "roll_eyes": [ + "rolling_eyes", + "face_with_rolling_eyes" + ], + "slightly_frowning_face": [ + "slight_frown" + ], + "frowning_face": [ + "frowning2", + "white_frowning_face" + ], + "zipper_mouth_face": [ + "zipper_mouth" + ], + "face_with_head_bandage": [ + "head_bandage" + ], + "raised_hand_with_fingers_splayed": [ + "hand_splayed" + ], + "raised_hand": [ + "hand" + ], + "vulcan_salute": [ + "vulcan", + "raised_hand_with_part_between_middle_and_ring_fingers" + ], + "policeman": [ + "cop" + ], + "running_man": [ + "runner" + ], + "walking_man": [ + "walking" + ], + "bowing_man": [ + "bow" + ], + "no_good_woman": [ + "no_good" + ], + "raising_hand_woman": [ + "raising_hand" + ], + "pouting_woman": [ + "person_with_pouting_face" + ], + "frowning_woman": [ + "person_frowning" + ], + "haircut_woman": [ + "haircut" + ], + "massage_woman": [ + "massage" + ], + "tshirt": [ + "shirt" + ], + "biking_man": [ + "bicyclist" + ], + "mountain_biking_man": [ + "mountain_bicyclist" + ], + "passenger_ship": [ + "cruise_ship" + ], + "motor_boat": [ + "motorboat", + "boat" + ], + "flight_arrival": [ + "airplane_arriving" + ], + "flight_departure": [ + "airplane_departure" + ], + "small_airplane": [ + "airplane_small" + ], + "racing_car": [ + "race_car" + ], + "family_man_woman_boy_boy": [ + "family_man_woman_boys" + ], + "family_man_woman_girl_girl": [ + "family_man_woman_girls" + ], + "family_woman_woman_boy": [ + "family_women_boy" + ], + "family_woman_woman_girl": [ + "family_women_girl" + ], + "family_woman_woman_girl_boy": [ + "family_women_girl_boy" + ], + "family_woman_woman_boy_boy": [ + "family_women_boys" + ], + "family_woman_woman_girl_girl": [ + "family_women_girls" + ], + "family_man_man_boy": [ + "family_men_boy" + ], + "family_man_man_girl": [ + "family_men_girl" + ], + "family_man_man_girl_boy": [ + "family_men_girl_boy" + ], + "family_man_man_boy_boy": [ + "family_men_boys" + ], + "family_man_man_girl_girl": [ + "family_men_girls" + ], + "cloud_with_lightning": [ + "cloud_lightning" + ], + "tornado": [ + "cloud_tornado", + "cloud_with_tornado" + ], + "cloud_with_rain": [ + "cloud_rain" + ], + "cloud_with_snow": [ + "cloud_snow" + ], + "asterisk": [ + "keycap_star" + ], + "studio_microphone": [ + "microphone2" + ], + "medal_military": [ + "military_medal" + ], + "couple_with_heart_woman_woman": [ + "female_couple_with_heart" + ], + "couple_with_heart_man_man": [ + "male_couple_with_heart" + ], + "couplekiss_woman_woman": [ + "female_couplekiss" + ], + "couplekiss_man_man": [ + "male_couplekiss" + ], + "honeybee": [ + "bee" + ], + "lion": [ + "lion_face" + ], + "artificial_satellite": [ + "satellite_orbital" + ], + "three_button_mouse": [ + "mouse_three_button" + ], + "hocho": [ + "knife" + ], + "swimming_man": [ + "swimmer" + ], + "wind_face": [ + "wind_blowing_face" + ], + "golfing_man": [ + "golfer" + ], + "facepunch": [ + "punch" + ], + "building_construction": [ + "construction_site" + ], + "family_man_woman_girl_boy": [ + "family" + ], + "ice_hockey": [ + "hockey" + ], + "snowman_with_snow": [ + "snowman2" + ], + "play_or_pause_button": [ + "play_pause" + ], + "film_projector": [ + "projector" + ], + "shopping": [ + "shopping_bags" + ], + "open_book": [ + "book" + ], + "national_park": [ + "park" + ], + "world_map": [ + "map" + ], + "pen": [ + "pen_ballpoint" + ], + "email": [ + "envelope", + "e-mail" + ], + "phone": [ + "telephone" + ], + "atom_symbol": [ + "atom" + ], + "mantelpiece_clock": [ + "clock" + ], + "camera_flash": [ + "camera_with_flash" + ], + "film_strip": [ + "film_frames" + ], + "balance_scale": [ + "scales" + ], + "surfing_man": [ + "surfer" + ], + "couplekiss_man_woman": [ + "couplekiss" + ], + "couple_with_heart_woman_man": [ + "couple_with_heart" + ], + "clamp": [ + "compression" + ], + "dancing_women": [ + "dancers" + ], + "blonde_man": [ + "person_with_blond_hair" + ], + "sleeping_bed": [ + "sleeping_accommodation" + ], + "om": [ + "om_symbol" + ], + "tipping_hand_woman": [ + "information_desk_person" + ], + "rowing_man": [ + "rowboat" + ], + "new_moon": [ + "moon" + ], + "automobile": [ + "car" + ], + "fleur_de_lis": [ + "fleur-de-lis" ] } } \ No newline at end of file diff --git a/lib/tasks/emoji.rake b/lib/tasks/emoji.rake index b559d73fed5..104c096b31c 100644 --- a/lib/tasks/emoji.rake +++ b/lib/tasks/emoji.rake @@ -1,127 +1,2695 @@ +require "active_support/core_ext/object/blank" +require "active_support/core_ext/hash/deep_merge" +require "active_support/test_case" +require "base64" +require "fileutils" +require "image_optim" +require "json" +require "nokogiri" +require "open-uri" +require "pathname" + +$debugging_output = [] + +EMOJI_GROUPS_PATH ||= "app/assets/javascripts/discourse/lib/emoji/groups.js.es6" + +EMOJI_DB_PATH ||= "lib/emoji/db.json" + +EMOJI_IMAGES_PATH ||= "public/images/emoji" + EMOJI_LIST_URL ||= "http://unicode.org/emoji/charts/full-emoji-list.html" + EMOJI_KEYWORDS_URL ||= "https://raw.githubusercontent.com/muan/emojilib/master/emojis.json" -# until MS release the emoji flags, we'll use custom made flags -WINDOWS_FLAGS ||= Set.new ["1f1e8_1f1f3", "1f1e9_1f1ea", "1f1ea_1f1f8", "1f1eb_1f1f7", "1f1ec_1f1e7", "1f1ee_1f1f9", "1f1ef_1f1f5", "1f1f0_1f1f7", "1f1f7_1f1fa", "1f1fa_1f1f8"] +EMOJI_ALIASES ||= { + "right_anger_bubble" => [ "anger_right" ], + "ballot_box" => [ "ballot_box_with_ballot" ], + "basketball_man" => [ "basketball_player", "person_with_ball" ], + "beach_umbrella" => [ "umbrella_on_ground", "beach", "beach_with_umbrella" ], + "parasol_on_ground" => [ "umbrella_on_ground" ], + "bellhop_bell" => [ "bellhop" ], + "biohazard" => [ "biohazard_sign" ], + "bow_and_arrow" => [ "archery" ], + "spiral_calendar" => [ "calendar_spiral", "spiral_calendar_pad" ], + "card_file_box" => [ "card_box" ], + "champagne" => [ "bottle_with_popping_cork" ], + "cheese" => [ "cheese_wedge" ], + "city_sunset" => [ "city_dusk" ], + "clock" => [ "mantlepiece_clock" ], + "couch_and_lamp" => [ "couch" ], + "crayon" => [ "lower_left_crayon" ], + "cricket" => [ "cricket_bat_ball" ], + "latin_cross" => [ "cross" ], + "dagger" => [ "dagger_knife" ], + "desktop_computer" => [ "desktop" ], + "card_index_dividers" => [ "dividers" ], + "dove" => [ "dove_of_peace" ], + "footprints" => [ "feet" ], + "fire" => [ "flame" ], + "black_flag" => [ "flag_black", "waving_black_flag" ], + "cn" => [ "flag_cn" ], + "de" => [ "flag_de" ], + "es" => [ "flag_es" ], + "fr" => [ "flag_fr" ], + "uk" => [ "gb", "flag_gb" ], + "it" => [ "flag_it" ], + "jp" => [ "flag_jp" ], + "kr" => [ "flag_kr" ], + "ru" => [ "flag_ru" ], + "us" => [ "flag_us" ], + "white_flag" => [ "flag_white", "waving_white_flag" ], + "plate_with_cutlery" => [ "fork_knife_plate", "fork_and_knife_with_plate" ], + "framed_picture" => [ "frame_photo", "frame_with_picture" ], + "hammer_and_pick" => [ "hammer_pick" ], + "heavy_heart_exclamation" => [ "heart_exclamation", "heavy_heart_exclamation_mark_ornament" ], + "houses" => [ "homes", "house_buildings" ], + "hotdog" => [ "hot_dog" ], + "derelict_house" => [ "house_abandoned", "derelict_house_building" ], + "desert_island" => [ "island" ], + "old_key" => [ "key2" ], + "laughing" => [ "satisfied" ], + "business_suit_levitating" => [ "levitate", "man_in_business_suit_levitating" ], + "weight_lifting_man" => [ "lifter", "weight_lifter" ], + "medal_sports" => [ "medal", "sports_medal" ], + "metal" => [ "sign_of_the_horns" ], + "fu" => [ "middle_finger", "reversed_hand_with_middle_finger_extended" ], + "motorcycle" => [ "racing_motorcycle" ], + "mountain_snow" => [ "snow_capped_mountain" ], + "newspaper_roll" => [ "newspaper2", "rolled_up_newspaper" ], + "spiral_notepad" => [ "notepad_spiral", "spiral_note_pad" ], + "oil_drum" => [ "oil" ], + "older_woman" => [ "grandma" ], + "paintbrush" => [ "lower_left_paintbrush" ], + "paperclips" => [ "linked_paperclips" ], + "pause_button" => [ "double_vertical_bar" ], + "peace_symbol" => [ "peace" ], + "pen_ballpoint" => [ "lower_left_ballpoint_pen" ], + "fountain_pen" => [ "pen_fountain", "lower_left_fountain_pen" ], + "ping_pong" => [ "table_tennis" ], + "place_of_worship" => [ "worship_symbol" ], + "poop" => [ "shit", "hankey", "poo" ], + "radioactive" => [ "radioactive_sign" ], + "railway_track" => [ "railroad_track" ], + "robot" => [ "robot_face" ], + "skull" => [ "skeleton" ], + "skull_and_crossbones" => [ "skull_crossbones" ], + "speaking_head" => [ "speaking_head_in_silhouette" ], + "male_detective" => [ "spy", "sleuth_or_spy" ], + "thinking" => [ "thinking_face" ], + "thumbsdown" => [ "-1" ], + "thumbsup" => [ "+1" ], + "cloud_with_lightning_and_rain" => [ "thunder_cloud_rain", "thunder_cloud_and_rain" ], + "tickets" => [ "admission_tickets" ], + "next_track_button" => [ "track_next", "next_track" ], + "previous_track_button" => [ "track_previous", "previous_track" ], + "unicorn" => [ "unicorn_face" ], + "funeral_urn" => [ "urn" ], + "sun_behind_large_cloud" => [ "white_sun_cloud", "white_sun_behind_cloud" ], + "sun_behind_rain_cloud" => [ "white_sun_rain_cloud", "white_sun_behind_cloud_with_rain" ], + "partly_sunny" => [ "white_sun_small_cloud", "white_sun_with_small_cloud" ], + "open_umbrella" => [ "umbrella2" ], + "hammer_and_wrench" => [ "tools" ], + "face_with_thermometer" => [ "thermometer_face" ], + "timer_clock" => [ "timer" ], + "keycap_ten" => [ "ten" ], + "memo" => [ "pencil" ], + "rescue_worker_helmet" => [ "helmet_with_cross", "helmet_with_white_cross" ], + "slightly_smiling_face" => [ "slightly_smiling", "slight_smile"], + "construction_worker_man" => [ "construction_worker" ], + "upside_down_face" => [ "upside_down" ], + "money_mouth_face" => [ "money_mouth" ], + "nerd_face" => [ "nerd" ], + "hugs" => [ "hugging", "hugging_face" ], + "roll_eyes" => [ "rolling_eyes", "face_with_rolling_eyes" ], + "slightly_frowning_face" => [ "slight_frown" ], + "frowning_face" => [ "frowning2", "white_frowning_face" ], + "zipper_mouth_face" => [ "zipper_mouth" ], + "face_with_head_bandage" => [ "head_bandage" ], + "raised_hand_with_fingers_splayed" => [ "hand_splayed" ], + "raised_hand" => [ "hand" ], + "vulcan_salute" => [ "vulcan", "raised_hand_with_part_between_middle_and_ring_fingers" ], + "policeman" => [ "cop" ], + "running_man" => [ "runner" ], + "walking_man" => [ "walking" ], + "bowing_man" => [ "bow" ], + "no_good_woman" => [ "no_good" ], + "raising_hand_woman" => [ "raising_hand" ], + "pouting_woman" => [ "person_with_pouting_face" ], + "frowning_woman" => [ "person_frowning" ], + "haircut_woman" => [ "haircut" ], + "massage_woman" => [ "massage" ], + "tshirt" => [ "shirt" ], + "biking_man" => [ "bicyclist" ], + "mountain_biking_man" => [ "mountain_bicyclist" ], + "passenger_ship" => [ "cruise_ship" ], + "motor_boat" => [ "motorboat", "boat" ], + "flight_arrival" => [ "airplane_arriving" ], + "flight_departure" => [ "airplane_departure" ], + "small_airplane" => [ "airplane_small" ], + "racing_car" => [ "race_car" ], + "family_man_woman_boy_boy" => [ "family_man_woman_boys" ], + "family_man_woman_girl_girl" => [ "family_man_woman_girls" ], + "family_woman_woman_boy" => [ "family_women_boy" ], + "family_woman_woman_girl" => [ "family_women_girl" ], + "family_woman_woman_girl_boy" => [ "family_women_girl_boy" ], + "family_woman_woman_boy_boy" => [ "family_women_boys" ], + "family_woman_woman_girl_girl" => [ "family_women_girls" ], + "family_man_man_boy" => [ "family_men_boy" ], + "family_man_man_girl" => [ "family_men_girl" ], + "family_man_man_girl_boy" => [ "family_men_girl_boy" ], + "family_man_man_boy_boy" => [ "family_men_boys" ], + "family_man_man_girl_girl" => [ "family_men_girls" ], + "cloud_with_lightning" => [ "cloud_lightning" ], + "tornado" => [ "cloud_tornado", "cloud_with_tornado" ], + "cloud_with_rain" => [ "cloud_rain" ], + "cloud_with_snow" => [ "cloud_snow" ], + "asterisk" => [ "keycap_star" ], + "studio_microphone" => [ "microphone2" ], + "medal_military" => [ "military_medal" ], + "couple_with_heart_woman_woman" => [ "female_couple_with_heart" ], + "couple_with_heart_man_man" => [ "male_couple_with_heart" ], + "couplekiss_woman_woman" => [ "female_couplekiss" ], + "couplekiss_man_man" => [ "male_couplekiss" ], + "honeybee" => [ "bee" ], + "lion" => [ "lion_face" ], + "artificial_satellite" => [ "satellite_orbital" ], + "three_button_mouse" => [ "mouse_three_button" ], + "hocho" => [ "knife" ], + "swimming_man" => [ "swimmer" ], + "wind_face" => [ "wind_blowing_face" ], + "golfing_man" => [ "golfer" ], + "facepunch" => [ "punch" ], + "building_construction" => [ "construction_site" ], + "family_man_woman_girl_boy" => [ "family" ], + "ice_hockey" => [ "hockey" ], + "snowman_with_snow" => [ "snowman2" ], + "play_or_pause_button" => [ "play_pause" ], + "film_projector" => [ "projector" ], + "shopping" => [ "shopping_bags" ], + "open_book" => [ "book" ], + "national_park" => [ "park" ], + "world_map" => [ "map" ], + "pen" => [ "pen_ballpoint" ], + "email" => [ "envelope", "e-mail" ], + "phone" => [ "telephone" ], + "atom_symbol" => [ "atom" ], + "mantelpiece_clock" => [ "clock" ], + "camera_flash" => [ "camera_with_flash" ], + "film_strip" => [ "film_frames" ], + "balance_scale" => [ "scales" ], + "surfing_man" => [ "surfer" ], + "couplekiss_man_woman" => [ "couplekiss" ], + "couple_with_heart_woman_man" => [ "couple_with_heart" ], + "clamp" => [ "compression" ], + "dancing_women" => [ "dancers" ], + "blonde_man" => [ "person_with_blond_hair" ], + "sleeping_bed" => [ "sleeping_accommodation" ], + "om" => [ "om_symbol" ], + "tipping_hand_woman" => [ "information_desk_person" ], + "rowing_man" => [ "rowboat" ], + "new_moon" => [ "moon" ], + "automobile" => [ "car" ], + "fleur_de_lis" => [ "fleur-de-lis" ], +} + +EMOJI_GROUPS ||= [ + { + "name" => "people", + "fullname" => "People", + "tabicon" => "grinning", + "icons" => [ + "slightly_smiling_face", + "grinning", + "grin", + "joy", + "rofl", + "smiley", + "smile", + "sweat_smile", + "laughing", + "innocent", + "smiling_imp", + "imp", + "wink", + "blush", + "relaxed", + "yum", + "relieved", + "heart_eyes", + "sunglasses", + "smirk", + "neutral_face", + "expressionless", + "unamused", + "sweat", + "pensive", + "confused", + "confounded", + "kissing", + "kissing_heart", + "kissing_smiling_eyes", + "kissing_closed_eyes", + "stuck_out_tongue", + "stuck_out_tongue_winking_eye", + "stuck_out_tongue_closed_eyes", + "disappointed", + "worried", + "angry", + "rage", + "cry", + "persevere", + "triumph", + "disappointed_relieved", + "frowning", + "anguished", + "fearful", + "weary", + "sleepy", + "tired_face", + "grimacing", + "sob", + "open_mouth", + "hushed", + "cold_sweat", + "nauseated_face", + "sneezing_face", + "scream", + "astonished", + "flushed", + "sleeping", + "dizzy_face", + "no_mouth", + "mask", + "smile_cat", + "joy_cat", + "smiley_cat", + "heart_eyes_cat", + "smirk_cat", + "kissing_cat", + "pouting_cat", + "crying_cat_face", + "scream_cat", + "footprints", + "bust_in_silhouette", + "busts_in_silhouette", + "baby", + "boy", + "girl", + "man", + "woman", + "couple", + "two_men_holding_hands", + "two_women_holding_hands", + "dancing_women", + "dancing_men", + "man_dancing", + "bride_with_veil", + "blonde_woman", + "blonde_man", + "man_with_gua_pi_mao", + "woman_with_turban", + "man_with_turban", + "older_woman", + "older_man", + "policewoman", + "policeman", + "female_detective", + "male_detective", + "woman_farmer", + "man_farmer", + "woman_cook", + "man_cook", + "woman_student", + "man_student", + "woman_singer", + "man_singer", + "woman_teacher", + "man_teacher", + "woman_factory_worker", + "man_factory_worker", + "woman_health_worker", + "man_health_worker", + "woman_pilot", + "man_pilot", + "woman_judge", + "man_judge", + "woman_technologist", + "man_technologist", + "woman_office_worker", + "man_office_worker", + "woman_mechanic", + "man_mechanic", + "woman_scientist", + "man_scientist", + "woman_artist", + "man_artist", + "woman_firefighter", + "man_firefighter", + "woman_astronaut", + "man_astronaut", + "construction_worker_woman", + "construction_worker_man", + "princess", + "prince", + "guardswoman", + "guardsman", + "clown_face", + "cowboy_hat_face", + "angel", + "santa", + "mrs_claus", + "ghost", + "japanese_ogre", + "japanese_goblin", + "hankey", + "skull", + "alien", + "space_invader", + "bowing_woman", + "bowing_man", + "woman_facepalming", + "man_facepalming", + "woman_shrugging", + "man_shrugging", + "tipping_hand_woman", + "tipping_hand_man", + "no_good_woman", + "no_good_man", + "ok_woman", + "ok_man", + "raising_hand_woman", + "raising_hand_man", + "pouting_woman", + "pouting_man", + "frowning_woman", + "frowning_man", + "massage_woman", + "massage_man", + "haircut_woman", + "haircut_man", + "couple_with_heart_woman_woman", + "couple_with_heart_woman_man", + "couple_with_heart_man_man", + "clap", + "ear", + "eyes", + "nose", + "lips", + "kiss", + "tongue", + "nail_care", + "wave", + "thumbsup", + "thumbsdown", + "point_up", + "point_up_2", + "point_down", + "point_left", + "point_right", + "ok_hand", + "handshake", + "v", + "crossed_fingers", + "call_me_hand", + "fist", + "fist_left", + "fist_right", + "raised_hand", + "raised_back_of_hand", + "raised_hands", + "muscle", + "open_hands", + "pray", + "right_anger_bubble", + "eye", + "frowning_face", + "raised_hand_with_fingers_splayed", + "face_with_head_bandage", + "hugs", + "fu", + "money_mouth_face", + "nerd_face", + "drooling_face", + "poop", + "facepunch", + "robot", + "roll_eyes", + "skull_and_crossbones", + "slightly_frowning_face", + "speaking_head", + "spy", + "thinking", + "upside_down_face", + "lying_face", + "funeral_urn", + "vulcan_salute", + "metal", + "wind_face", + "writing_hand", + "zipper_mouth_face", + "male_couple_with_heart", + "couplekiss_man_woman", + "couplekiss_woman_woman", + "couplekiss_man_man", + "family_man_woman_girl", + "family_man_woman_boy", + "family_man_woman_girl_boy", + "family_man_woman_girl_girl", + "family_man_woman_boy_boy", + "family_woman_woman_girl", + "family_woman_woman_boy", + "family_woman_woman_girl_boy", + "family_woman_woman_girl_girl", + "family_woman_woman_boy_boy", + "family_man_man_girl", + "family_man_man_boy", + "family_man_man_girl_boy", + "family_man_man_girl_girl", + "family_man_man_boy_boy", + "family_woman_girl", + "family_woman_boy", + "family_woman_girl_boy", + "family_woman_girl_girl", + "family_woman_boy_boy", + "family_man_girl", + "family_man_boy", + "family_man_girl_boy", + "family_man_girl_girl", + "family_man_boy_boy", + "selfie", + "man_in_tuxedo", + "pregnant_woman" + ] + }, + { + "name" => "nature", + "fullname" => "Nature", + "tabicon" => "evergreen_tree", + "icons" => [ + "seedling", + "evergreen_tree", + "deciduous_tree", + "palm_tree", + "cactus", + "tulip", + "cherry_blossom", + "rose", + "hibiscus", + "sunflower", + "fleur_de_lis", + "blossom", + "bouquet", + "ear_of_rice", + "herb", + "four_leaf_clover", + "maple_leaf", + "fallen_leaf", + "leaves", + "mushroom", + "chestnut", + "rat", + "mouse2", + "mouse", + "hamster", + "ox", + "water_buffalo", + "cow2", + "cow", + "tiger2", + "leopard", + "tiger", + "rabbit2", + "rabbit", + "cat2", + "cat", + "racehorse", + "horse", + "ram", + "sheep", + "goat", + "rooster", + "chicken", + "baby_chick", + "hatching_chick", + "hatched_chick", + "bird", + "penguin", + "elephant", + "dromedary_camel", + "camel", + "boar", + "pig2", + "pig", + "pig_nose", + "dog2", + "poodle", + "dog", + "wolf", + "bear", + "koala", + "panda_face", + "monkey_face", + "see_no_evil", + "hear_no_evil", + "speak_no_evil", + "monkey", + "dragon", + "dragon_face", + "crocodile", + "snake", + "turtle", + "frog", + "fox_face", + "lion", + "gorilla", + "duck", + "eagle", + "owl", + "bat", + "lizard", + "shark", + "deer", + "rhinoceros", + "paw_prints", + "whale2", + "whale", + "dolphin", + "octopus", + "fish", + "squid", + "shrimp", + "tropical_fish", + "blowfish", + "shell", + "snail", + "bug", + "ant", + "bee", + "beetle", + "honeybee", + "butterfly", + "feet", + "zap", + "fire", + "crescent_moon", + "sunny", + "partly_sunny", + "sun_behind_small_cloud", + "cloud", + "droplet", + "sweat_drops", + "umbrella", + "dash", + "snowflake", + "star2", + "star", + "stars", + "sunrise_over_mountains", + "sunrise", + "rainbow", + "ocean", + "volcano", + "milky_way", + "mount_fuji", + "japan", + "globe_with_meridians", + "earth_africa", + "earth_americas", + "earth_asia", + "new_moon", + "waxing_crescent_moon", + "first_quarter_moon", + "full_moon", + "waning_gibbous_moon", + "waxing_gibbous_moon", + "last_quarter_moon", + "waning_crescent_moon", + "new_moon_with_face", + "full_moon_with_face", + "first_quarter_moon_with_face", + "last_quarter_moon_with_face", + "sun_with_face", + "chipmunk", + "cloud_with_lightning", + "cloud_with_lightning_and_rain", + "cloud_with_rain", + "cloud_with_snow", + "tornado", + "sun_behind_large_cloud", + "sun_behind_rain_cloud", + "comet", + "crab", + "dove", + "fog", + "lion_face", + "scorpion", + "spider", + "spider_web", + "turkey", + "unicorn", + ] + }, + { + "name" => "food", + "fullname" => "Food & Drink", + "tabicon" => "hamburger", + "icons" => [ + "tomato", + "eggplant", + "corn", + "sweet_potato", + "grapes", + "melon", + "watermelon", + "tangerine", + "lemon", + "banana", + "pineapple", + "apple", + "green_apple", + "pear", + "peach", + "cherries", + "strawberry", + "kiwi_fruit", + "avocado", + "cucumber", + "carrot", + "potato", + "hamburger", + "pizza", + "meat_on_bone", + "poultry_leg", + "rice_cracker", + "rice_ball", + "rice", + "curry", + "ramen", + "spaghetti", + "bread", + "fries", + "dango", + "oden", + "sushi", + "fried_shrimp", + "fish_cake", + "icecream", + "shaved_ice", + "ice_cream", + "doughnut", + "cookie", + "chocolate_bar", + "candy", + "lollipop", + "custard", + "honey_pot", + "cake", + "bento", + "stew", + "egg", + "fork_and_knife", + "tea", + "coffee", + "milk_glass", + "sake", + "wine_glass", + "clinking_glasses", + "tumbler_glass", + "cocktail", + "tropical_drink", + "beer", + "beers", + "baby_bottle", + "burrito", + "champagne", + "cheese", + "hot_pepper", + "hotdog", + "taco", + "peanuts", + "croissant", + "baguette_bread", + "bacon", + "pancakes", + "fried_egg", + "stuffed_flatbread", + "green_salad", + "shallow_pan_of_food", + ] + }, + { + "name" => "celebration", + "fullname" => "Celebration", + "tabicon" => "gift", + "icons" => [ + "ribbon", + "gift", + "birthday", + "jack_o_lantern", + "christmas_tree", + "tanabata_tree", + "bamboo", + "rice_scene", + "fireworks", + "sparkler", + "tada", + "confetti_ball", + "balloon", + "dizzy", + "sparkles", + "boom", + "mortar_board", + "crown", + "dolls", + "flags", + "wind_chime", + "crossed_flags", + "izakaya_lantern", + "ring", + "heart", + "broken_heart", + "love_letter", + "two_hearts", + "revolving_hearts", + "heartbeat", + "heartpulse", + "sparkling_heart", + "cupid", + "gift_heart", + "heart_decoration", + "purple_heart", + "yellow_heart", + "green_heart", + "blue_heart", + "black_heart", + "heavy_heart_exclamation", + ] + }, + { + "name" => "activity", + "fullname" => "Activities", + "tabicon" => "soccer", + "icons" => [ + "running_woman", + "running_man", + "walking_woman", + "walking_man", + "dancer", + "rowing_woman", + "rowing_man", + "swimming_woman", + "swimming_man", + "surfing_woman", + "surfing_man", + "bath", + "snowboarder", + "ski", + "snowman", + "snowman_with_snow", + "biking_woman", + "biking_man", + "mountain_biking_woman", + "mountain_biking_man", + "horse_racing", + "tent", + "fishing_pole_and_fish", + "soccer", + "basketball", + "football", + "baseball", + "tennis", + "rugby_football", + "golf", + "trophy", + "running_shirt_with_sash", + "checkered_flag", + "musical_keyboard", + "guitar", + "violin", + "saxophone", + "trumpet", + "drum", + "musical_note", + "notes", + "musical_score", + "headphones", + "microphone", + "performing_arts", + "ticket", + "tophat", + "circus_tent", + "clapper", + "art", + "dart", + "8ball", + "bowling", + "slot_machine", + "game_die", + "video_game", + "flower_playing_cards", + "black_joker", + "mahjong", + "carousel_horse", + "ferris_wheel", + "roller_coaster", + "badminton", + "ballot_box", + "basketball_woman", + "basketball_man", + "bow_and_arrow", + "crossed_swords", + "cricket", + "ice_hockey", + "field_hockey", + "golfing_woman", + "golfing_man", + "ice_skate", + "paintbrush", + "skier", + "stadium", + "volleyball", + "person_fencing", + "goal_net", + "boxing_glove", + "martial_arts_uniform", + "women_wrestling", + "men_wrestling", + "woman_cartwheeling", + "man_cartwheeling", + "woman_playing_handball", + "man_playing_handball", + "woman_playing_water_polo", + "man_playing_water_polo", + "woman_juggling", + "man_juggling", + ] + }, + { + "name" => "travel", + "fullname" => "Travel & Places", + "tabicon" => "airplane", + "icons" => [ + "train", + "mountain_railway", + "railway_car", + "steam_locomotive", + "monorail", + "bullettrain_side", + "bullettrain_front", + "train2", + "metro", + "light_rail", + "station", + "tram", + "bus", + "oncoming_bus", + "trolleybus", + "minibus", + "ambulance", + "fire_engine", + "police_car", + "oncoming_police_car", + "rotating_light", + "taxi", + "oncoming_taxi", + "automobile", + "oncoming_automobile", + "blue_car", + "truck", + "articulated_lorry", + "tractor", + "bike", + "kick_scooter", + "motor_scooter", + "busstop", + "fuelpump", + "construction", + "vertical_traffic_light", + "traffic_light", + "rocket", + "helicopter", + "airplane", + "seat", + "anchor", + "ship", + "speedboat", + "canoe", + "aerial_tramway", + "mountain_cableway", + "suspension_railway", + "passport_control", + "customs", + "baggage_claim", + "left_luggage", + "yen", + "euro", + "pound", + "dollar", + "statue_of_liberty", + "moyai", + "foggy", + "tokyo_tower", + "fountain", + "european_castle", + "japanese_castle", + "city_sunrise", + "city_sunset", + "night_with_stars", + "bridge_at_night", + "house", + "house_with_garden", + "office", + "department_store", + "factory", + "post_office", + "european_post_office", + "hospital", + "bank", + "hotel", + "love_hotel", + "wedding", + "church", + "convenience_store", + "school", + "cn", + "de", + "es", + "fr", + "gb", + "it", + "jp", + "kr", + "ru", + "us", + "flight_arrival", + "flight_departure", + "small_airplane", + "beach", + "beach_umbrella", + "parasol_on_ground", + "camping", + "city_dusk", + "cityscape", + "classical_building", + "building_construction", + "passenger_ship", + "desert", + "ferry", + "hole", + "houses", + "derelict_house", + "desert_island", + "kaaba", + "world_map", + "mosque", + "motor_boat", + "motorcycle", + "motorway", + "mountain", + "mountain_snow", + "national_park", + "place_of_worship", + "racing_car", + "railway_track", + "red_car", + "sailboat", + "shinto_shrine", + "sleeping_accommodation", + "synagogue", + "rainbow_flag", + "white_flag", + "black_flag", + "flag_cn", + "flag_de", + "flag_es", + "flag_fr", + "flag_gb", + "flag_it", + "flag_jp", + "flag_kr", + "flag_ru", + "flag_us", + "afghanistan", + "aland_islands", + "albania", + "algeria", + "american_samoa", + "andorra", + "angola", + "anguilla", + "antarctica", + "antigua_barbuda", + "argentina", + "armenia", + "aruba", + "australia", + "austria", + "azerbaijan", + "bahamas", + "bahrain", + "bangladesh", + "barbados", + "belarus", + "belgium", + "belize", + "benin", + "bermuda", + "bhutan", + "bolivia", + "caribbean_netherlands", + "bosnia_herzegovina", + "botswana", + "brazil", + "british_indian_ocean_territory", + "british_virgin_islands", + "brunei", + "bulgaria", + "burkina_faso", + "burundi", + "cape_verde", + "cambodia", + "cameroon", + "canada", + "canary_islands", + "cayman_islands", + "central_african_republic", + "chad", + "chile", + "christmas_island", + "cocos_islands", + "colombia", + "comoros", + "congo_brazzaville", + "congo_kinshasa", + "cook_islands", + "costa_rica", + "croatia", + "cuba", + "curacao", + "cyprus", + "czech_republic", + "denmark", + "djibouti", + "dominica", + "dominican_republic", + "ecuador", + "egypt", + "el_salvador", + "equatorial_guinea", + "eritrea", + "estonia", + "ethiopia", + "eu", + "falkland_islands", + "faroe_islands", + "fiji", + "finland", + "french_guiana", + "french_polynesia", + "french_southern_territories", + "gabon", + "gambia", + "georgia", + "ghana", + "gibraltar", + "greece", + "greenland", + "grenada", + "guadeloupe", + "guam", + "guatemala", + "guernsey", + "guinea", + "guinea_bissau", + "guyana", + "haiti", + "honduras", + "hong_kong", + "hungary", + "iceland", + "india", + "indonesia", + "iran", + "iraq", + "ireland", + "isle_of_man", + "israel", + "cote_divoire", + "jamaica", + "jersey", + "jordan", + "kazakhstan", + "kenya", + "kiribati", + "kosovo", + "kuwait", + "kyrgyzstan", + "laos", + "latvia", + "lebanon", + "lesotho", + "liberia", + "libya", + "liechtenstein", + "lithuania", + "luxembourg", + "macau", + "macedonia", + "madagascar", + "malawi", + "malaysia", + "maldives", + "mali", + "malta", + "marshall_islands", + "martinique", + "mauritania", + "mauritius", + "mayotte", + "mexico", + "micronesia", + "moldova", + "monaco", + "mongolia", + "montenegro", + "montserrat", + "morocco", + "mozambique", + "myanmar", + "namibia", + "nauru", + "nepal", + "netherlands", + "new_caledonia", + "new_zealand", + "nicaragua", + "niger", + "nigeria", + "niue", + "norfolk_island", + "northern_mariana_islands", + "north_korea", + "norway", + "oman", + "pakistan", + "palau", + "palestinian_territories", + "panama", + "papua_new_guinea", + "paraguay", + "peru", + "philippines", + "pitcairn_islands", + "poland", + "portugal", + "puerto_rico", + "qatar", + "reunion", + "romania", + "rwanda", + "st_barthelemy", + "st_helena", + "st_kitts_nevis", + "st_lucia", + "st_pierre_miquelon", + "st_vincent_grenadines", + "samoa", + "san_marino", + "sao_tome_principe", + "saudi_arabia", + "senegal", + "serbia", + "seychelles", + "sierra_leone", + "singapore", + "sint_maarten", + "slovakia", + "slovenia", + "solomon_islands", + "somalia", + "south_africa", + "south_georgia_south_sandwich_islands", + "south_sudan", + "sri_lanka", + "sudan", + "suriname", + "swaziland", + "sweden", + "switzerland", + "syria", + "taiwan", + "tajikistan", + "tanzania", + "thailand", + "timor_leste", + "togo", + "tokelau", + "tonga", + "trinidad_tobago", + "tunisia", + "tr", + "turkmenistan", + "turks_caicos_islands", + "tuvalu", + "uganda", + "ukraine", + "united_arab_emirates", + "uk", + "us_virgin_islands", + "uruguay", + "uzbekistan", + "vanuatu", + "vatican_city", + "venezuela", + "vietnam", + "wallis_futuna", + "western_sahara", + "yemen", + "zambia", + "zimbabwe", + ] + }, + { + "name" => "objects", + "fullname" => "Objects & Symbols", + "tabicon" => "eyeglasses", + "icons" => [ + "watch", + "iphone", + "calling", + "computer", + "alarm_clock", + "hourglass_flowing_sand", + "hourglass", + "camera", + "video_camera", + "movie_camera", + "tv", + "radio", + "pager", + "telephone_receiver", + "phone", + "fax", + "minidisc", + "floppy_disk", + "cd", + "dvd", + "vhs", + "battery", + "electric_plug", + "bulb", + "flashlight", + "satellite", + "credit_card", + "money_with_wings", + "moneybag", + "gem", + "closed_umbrella", + "pouch", + "purse", + "handbag", + "briefcase", + "school_satchel", + "lipstick", + "eyeglasses", + "womans_hat", + "sandal", + "high_heel", + "boot", + "mans_shoe", + "athletic_shoe", + "bikini", + "dress", + "kimono", + "womans_clothes", + "tshirt", + "necktie", + "jeans", + "door", + "shower", + "bathtub", + "toilet", + "barber", + "syringe", + "pill", + "microscope", + "telescope", + "crystal_ball", + "wrench", + "hocho", + "nut_and_bolt", + "hammer", + "bomb", + "smoking", + "gun", + "bookmark", + "newspaper", + "key", + "email", + "envelope_with_arrow", + "incoming_envelope", + "email", + "inbox_tray", + "outbox_tray", + "package", + "postal_horn", + "postbox", + "mailbox_closed", + "mailbox", + "mailbox_with_mail", + "mailbox_with_no_mail", + "page_facing_up", + "page_with_curl", + "bookmark_tabs", + "chart_with_upwards_trend", + "chart_with_downwards_trend", + "bar_chart", + "date", + "calendar", + "low_brightness", + "high_brightness", + "scroll", + "clipboard", + "open_book", + "notebook", + "notebook_with_decorative_cover", + "ledger", + "closed_book", + "green_book", + "blue_book", + "orange_book", + "books", + "card_index", + "link", + "paperclip", + "pushpin", + "scissors", + "triangular_ruler", + "round_pushpin", + "straight_ruler", + "triangular_flag_on_post", + "file_folder", + "open_file_folder", + "black_nib", + "pencil2", + "lock_with_ink_pen", + "closed_lock_with_key", + "lock", + "unlock", + "mega", + "loudspeaker", + "sound", + "loud_sound", + "speaker", + "mute", + "zzz", + "bell", + "no_bell", + "thought_balloon", + "speech_balloon", + "children_crossing", + "mag", + "mag_right", + "no_entry_sign", + "no_entry", + "stop_sign", + "name_badge", + "no_pedestrians", + "do_not_litter", + "no_bicycles", + "non-potable_water", + "no_mobile_phones", + "underage", + "accept", + "ideograph_advantage", + "white_flower", + "wilted_flower", + "secret", + "congratulations", + "u5408", + "u6e80", + "u7981", + "u6709", + "u7121", + "u7533", + "u55b6", + "u6708", + "u5272", + "u7a7a", + "sa", + "koko", + "u6307", + "chart", + "sparkle", + "eight_spoked_asterisk", + "negative_squared_cross_mark", + "white_check_mark", + "eight_pointed_black_star", + "vibration_mode", + "mobile_phone_off", + "vs", + "a", + "b", + "ab", + "cl", + "o2", + "sos", + "parking", + "wc", + "cool", + "free", + "new", + "ng", + "ok", + "up", + "atm", + "id", + "aries", + "taurus", + "gemini", + "cancer", + "leo", + "virgo", + "libra", + "scorpius", + "sagittarius", + "capricorn", + "aquarius", + "pisces", + "ophiuchus", + "six_pointed_star", + "atom_symbol", + "latin_cross", + "orthodox_cross", + "star_and_crescent", + "om", + "star_of_david", + "wheel_of_dharma", + "yin_yang", + "menorah", + "peace_symbol", + "restroom", + "mens", + "womens", + "baby_symbol", + "wheelchair", + "potable_water", + "no_smoking", + "put_litter_in_its_place", + "arrow_forward", + "arrow_backward", + "arrow_up_small", + "arrow_down_small", + "fast_forward", + "rewind", + "arrow_double_up", + "arrow_double_down", + "arrow_right", + "arrow_left", + "arrow_up", + "arrow_down", + "arrow_upper_right", + "arrow_lower_right", + "arrow_lower_left", + "arrow_upper_left", + "arrow_up_down", + "left_right_arrow", + "arrows_counterclockwise", + "arrow_right_hook", + "leftwards_arrow_with_hook", + "arrow_heading_up", + "arrow_heading_down", + "twisted_rightwards_arrows", + "repeat", + "repeat_one", + "zero", + "one", + "two", + "three", + "four", + "five", + "six", + "seven", + "eight", + "nine", + "keycap_ten", + "asterisk", + "1234", + "hash", + "abc", + "abcd", + "capital_abcd", + "information_source", + "signal_strength", + "cinema", + "symbols", + "heavy_plus_sign", + "heavy_minus_sign", + "wavy_dash", + "heavy_division_sign", + "heavy_multiplication_x", + "heavy_check_mark", + "arrows_clockwise", + "tm", + "copyright", + "registered", + "currency_exchange", + "heavy_dollar_sign", + "curly_loop", + "loop", + "part_alternation_mark", + "exclamation", + "bangbang", + "question", + "grey_exclamation", + "grey_question", + "interrobang", + "x", + "o", + "100", + "end", + "back", + "on", + "top", + "soon", + "cyclone", + "m", + "beginner", + "trident", + "warning", + "hotsprings", + "recycle", + "anger", + "diamond_shape_with_a_dot_inside", + "spades", + "clubs", + "hearts", + "diamonds", + "ballot_box_with_check", + "white_circle", + "black_circle", + "radio_button", + "red_circle", + "large_blue_circle", + "small_red_triangle", + "small_red_triangle_down", + "small_orange_diamond", + "small_blue_diamond", + "large_orange_diamond", + "large_blue_diamond", + "black_small_square", + "white_small_square", + "black_large_square", + "white_large_square", + "black_medium_square", + "white_medium_square", + "black_medium_small_square", + "white_medium_small_square", + "black_square_button", + "white_square_button", + "clock1", + "clock2", + "clock3", + "clock4", + "clock5", + "clock6", + "clock7", + "clock8", + "clock9", + "clock10", + "clock11", + "clock12", + "clock130", + "clock230", + "clock330", + "clock430", + "clock530", + "clock630", + "clock730", + "clock830", + "clock930", + "clock1030", + "clock1130", + "clock1230", + "alembic", + "amphora", + "biohazard", + "bed", + "sleeping_bed", + "bellhop_bell", + "spiral_calendar", + "camera_flash", + "candle", + "card_file_box", + "chains", + "mantelpiece_clock", + "coffin", + "clamp", + "control_knobs", + "couch_and_lamp", + "crayon", + "dagger", + "dark_sunglasses", + "desktop_computer", + "card_index_dividers", + "envelope", + "file_cabinet", + "film_strip", + "plate_with_cutlery", + "framed_picture", + "gear", + "hammer_and_pick", + "rescue_worker_helmet", + "joystick", + "old_key", + "keyboard", + "knife", + "spoon", + "label", + "level_slider", + "business_suit_levitating", + "weight_lifting_woman", + "weight_lifting_man", + "medal_sports", + "1st_place_medal", + "2nd_place_medal", + "3rd_place_medal", + "studio_microphone", + "medal_military", + "computer_mouse", + "mouse_three_button", + "newspaper_roll", + "spiral_notepad", + "oil_drum", + "paperclips", + "pause_button", + "record_button", + "stop_button", + "play_or_pause_button", + "next_track_button", + "previous_track_button", + "pen", + "fountain_pen", + "memo", + "pick", + "ping_pong", + "popcorn", + "prayer_beads", + "printer", + "film_projector", + "radioactive", + "reminder_ribbon", + "rosette", + "artificial_satellite", + "balance_scale", + "shamrock", + "shield", + "shopping", + "shopping_cart", + "stopwatch", + "telephone", + "thermometer", + "face_with_thermometer", + "tickets", + "timer_clock", + "hammer_and_wrench", + "trackball", + "open_umbrella", + "wastebasket", + "left_speech_bubble", + ] + } +] + +FITZPATRICK_SCALE ||= [ "1f3fb", "1f3fc", "1f3fd", "1f3fe", "1f3ff" ] + +VARIATION_SELECTOR ||= "fe0f" + +# Patch content of EMOJI_KEYWORDS_URL +EMOJI_KEYWORDS_PATCH ||= { + "thumbsup" => { "char" => "👍", "fitzpatrick_scale" => true }, + "thumbsdown" => { "char" => "👎", "fitzpatrick_scale" => true }, + "asterisk" => { "char" => "*️⃣" }, + "dancing_men" => { "char" => "👯‍♂️️" }, + "women_wrestling" => { "char" => "🤼‍♀️️", "fitzpatrick_scale" => false }, + "men_wrestling" => { "char" => "🤼‍♂️️", "fitzpatrick_scale" => false }, + "female_detective" => { "char" => "🕵️‍♀️", "fitzpatrick_scale" => true }, + "blonde_woman" => { "fitzpatrick_scale" => true }, + "woman_with_turban" => { "fitzpatrick_scale" => true }, + "policewoman" => { "fitzpatrick_scale" => true }, + "construction_worker_woman" => { "fitzpatrick_scale" => true }, + "guardswoman" => { "fitzpatrick_scale" => true }, + "woman_health_worker" => { "fitzpatrick_scale" => true }, + "man_health_worker" => { "fitzpatrick_scale" => true }, + "woman_pilot" => { "fitzpatrick_scale" => true }, + "man_pilot" => { "fitzpatrick_scale" => true }, + "woman_judge" => { "fitzpatrick_scale" => true }, + "man_judge" => { "fitzpatrick_scale" => true }, + "running_woman" => { "fitzpatrick_scale" => true }, + "walking_woman" => { "fitzpatrick_scale" => true }, + "woman_facepalming" => { "fitzpatrick_scale" => true }, + "bowing_woman" => { "fitzpatrick_scale" => true }, + "man_shrugging" => { "fitzpatrick_scale" => true }, + "tipping_hand_man" => { "fitzpatrick_scale" => true }, + "no_good_man" => { "fitzpatrick_scale" => true }, + "ok_man" => { "fitzpatrick_scale" => true }, + "raising_hand_man" => { "fitzpatrick_scale" => true }, + "pouting_man" => { "fitzpatrick_scale" => true }, + "frowning_man" => { "fitzpatrick_scale" => true }, + "haircut_man" => { "fitzpatrick_scale" => true }, + "massage_man" => { "fitzpatrick_scale" => true }, + "golfing_woman" => { "fitzpatrick_scale" => true }, + "rowing_woman" => { "fitzpatrick_scale" => true }, + "swimming_woman" => { "fitzpatrick_scale" => true }, + "surfing_woman" => { "fitzpatrick_scale" => true }, + "basketball_woman" => { "fitzpatrick_scale" => true }, + "weight_lifting_woman" => { "fitzpatrick_scale" => true }, + "biking_woman" => { "fitzpatrick_scale" => true }, + "mountain_biking_woman" => { "fitzpatrick_scale" => true }, + "handshake" => { "fitzpatrick_scale" => false }, + "dancing_women" => { "fitzpatrick_scale" => false }, + "couple" => { "fitzpatrick_scale" => false }, + "two_men_holding_hands" => { "fitzpatrick_scale" => false }, + "two_women_holding_hands" => { "fitzpatrick_scale" => false }, + "couple_with_heart_woman_man" => { "fitzpatrick_scale" => false }, + "couplekiss_man_woman" => { "fitzpatrick_scale" => false }, + "family_man_woman_boy" => { "fitzpatrick_scale" => false }, + "rescue_worker_helmet" => { "fitzpatrick_scale" => false }, + "skier" => { "fitzpatrick_scale" => false } +} + +# Exclude keywords from EMOJI_KEYWORDS_URL +EMOJI_KEYWORDS_EXCLUDE_LIST ||= [ "+1", "-1" ] + +# Cell index of each platform in EMOJI_LIST_URL +EICI ||= EMOJI_IMAGES_CELLS_INDEX ||= { + :windows => 10, + :apple => 3, + :google => 4, + :twitter => 5, + :one => 6 +} + +# Replace the platform by another when downloading the image +EMOJI_IMAGES_CELLS_INDEX_PATCH ||= { + :apple => { + "snowboarder" => EICI[:twitter], + "snowboarder/2" => EICI[:twitter], + "snowboarder/3" => EICI[:twitter], + "snowboarder/4" => EICI[:twitter], + "snowboarder/5" => EICI[:twitter], + "snowboarder/6" => EICI[:twitter], + "sleeping_bed" => EICI[:twitter], + "sleeping_bed/2" => EICI[:twitter], + "sleeping_bed/3" => EICI[:twitter], + "sleeping_bed/4" => EICI[:twitter], + "sleeping_bed/5" => EICI[:twitter], + "sleeping_bed/6" => EICI[:twitter], + }, + :one => { + # dot not use emoji-one rounded flags + "afghanistan" => EICI[:twitter], + "aland_islands" => EICI[:twitter], + "albania" => EICI[:twitter], + "algeria" => EICI[:twitter], + "american_samoa" => EICI[:twitter], + "andorra" => EICI[:twitter], + "angola" => EICI[:twitter], + "anguilla" => EICI[:twitter], + "antarctica" => EICI[:twitter], + "antigua_barbuda" => EICI[:twitter], + "argentina" => EICI[:twitter], + "armenia" => EICI[:twitter], + "aruba" => EICI[:twitter], + "australia" => EICI[:twitter], + "austria" => EICI[:twitter], + "azerbaijan" => EICI[:twitter], + "bahamas" => EICI[:twitter], + "bahrain" => EICI[:twitter], + "bangladesh" => EICI[:twitter], + "barbados" => EICI[:twitter], + "belarus" => EICI[:twitter], + "belgium" => EICI[:twitter], + "belize" => EICI[:twitter], + "benin" => EICI[:twitter], + "bermuda" => EICI[:twitter], + "bhutan" => EICI[:twitter], + "bolivia" => EICI[:twitter], + "caribbean_netherlands" => EICI[:twitter], + "bosnia_herzegovina" => EICI[:twitter], + "botswana" => EICI[:twitter], + "brazil" => EICI[:twitter], + "british_indian_ocean_territory" => EICI[:twitter], + "british_virgin_islands" => EICI[:twitter], + "brunei" => EICI[:twitter], + "bulgaria" => EICI[:twitter], + "burkina_faso" => EICI[:twitter], + "burundi" => EICI[:twitter], + "cape_verde" => EICI[:twitter], + "cambodia" => EICI[:twitter], + "cameroon" => EICI[:twitter], + "canada" => EICI[:twitter], + "canary_islands" => EICI[:twitter], + "cayman_islands" => EICI[:twitter], + "central_african_republic" => EICI[:twitter], + "chad" => EICI[:twitter], + "chile" => EICI[:twitter], + "cn" => EICI[:twitter], + "christmas_island" => EICI[:twitter], + "cocos_islands" => EICI[:twitter], + "colombia" => EICI[:twitter], + "comoros" => EICI[:twitter], + "congo_brazzaville" => EICI[:twitter], + "congo_kinshasa" => EICI[:twitter], + "cook_islands" => EICI[:twitter], + "costa_rica" => EICI[:twitter], + "croatia" => EICI[:twitter], + "cuba" => EICI[:twitter], + "curacao" => EICI[:twitter], + "cyprus" => EICI[:twitter], + "czech_republic" => EICI[:twitter], + "denmark" => EICI[:twitter], + "djibouti" => EICI[:twitter], + "dominica" => EICI[:twitter], + "dominican_republic" => EICI[:twitter], + "ecuador" => EICI[:twitter], + "egypt" => EICI[:twitter], + "el_salvador" => EICI[:twitter], + "equatorial_guinea" => EICI[:twitter], + "eritrea" => EICI[:twitter], + "estonia" => EICI[:twitter], + "ethiopia" => EICI[:twitter], + "eu" => EICI[:twitter], + "falkland_islands" => EICI[:twitter], + "faroe_islands" => EICI[:twitter], + "fiji" => EICI[:twitter], + "finland" => EICI[:twitter], + "fr" => EICI[:twitter], + "french_guiana" => EICI[:twitter], + "french_polynesia" => EICI[:twitter], + "french_southern_territories" => EICI[:twitter], + "gabon" => EICI[:twitter], + "gambia" => EICI[:twitter], + "georgia" => EICI[:twitter], + "de" => EICI[:twitter], + "ghana" => EICI[:twitter], + "gibraltar" => EICI[:twitter], + "greece" => EICI[:twitter], + "greenland" => EICI[:twitter], + "grenada" => EICI[:twitter], + "guadeloupe" => EICI[:twitter], + "guam" => EICI[:twitter], + "guatemala" => EICI[:twitter], + "guernsey" => EICI[:twitter], + "guinea" => EICI[:twitter], + "guinea_bissau" => EICI[:twitter], + "guyana" => EICI[:twitter], + "haiti" => EICI[:twitter], + "honduras" => EICI[:twitter], + "hong_kong" => EICI[:twitter], + "hungary" => EICI[:twitter], + "iceland" => EICI[:twitter], + "india" => EICI[:twitter], + "indonesia" => EICI[:twitter], + "iran" => EICI[:twitter], + "iraq" => EICI[:twitter], + "ireland" => EICI[:twitter], + "isle_of_man" => EICI[:twitter], + "israel" => EICI[:twitter], + "it" => EICI[:twitter], + "cote_divoire" => EICI[:twitter], + "jamaica" => EICI[:twitter], + "jp" => EICI[:twitter], + "jersey" => EICI[:twitter], + "jordan" => EICI[:twitter], + "kazakhstan" => EICI[:twitter], + "kenya" => EICI[:twitter], + "kiribati" => EICI[:twitter], + "kosovo" => EICI[:twitter], + "kuwait" => EICI[:twitter], + "kyrgyzstan" => EICI[:twitter], + "laos" => EICI[:twitter], + "latvia" => EICI[:twitter], + "lebanon" => EICI[:twitter], + "lesotho" => EICI[:twitter], + "liberia" => EICI[:twitter], + "libya" => EICI[:twitter], + "liechtenstein" => EICI[:twitter], + "lithuania" => EICI[:twitter], + "luxembourg" => EICI[:twitter], + "macau" => EICI[:twitter], + "macedonia" => EICI[:twitter], + "madagascar" => EICI[:twitter], + "malawi" => EICI[:twitter], + "malaysia" => EICI[:twitter], + "maldives" => EICI[:twitter], + "mali" => EICI[:twitter], + "malta" => EICI[:twitter], + "marshall_islands" => EICI[:twitter], + "martinique" => EICI[:twitter], + "mauritania" => EICI[:twitter], + "mauritius" => EICI[:twitter], + "mayotte" => EICI[:twitter], + "mexico" => EICI[:twitter], + "micronesia" => EICI[:twitter], + "moldova" => EICI[:twitter], + "monaco" => EICI[:twitter], + "mongolia" => EICI[:twitter], + "montenegro" => EICI[:twitter], + "montserrat" => EICI[:twitter], + "morocco" => EICI[:twitter], + "mozambique" => EICI[:twitter], + "myanmar" => EICI[:twitter], + "namibia" => EICI[:twitter], + "nauru" => EICI[:twitter], + "nepal" => EICI[:twitter], + "netherlands" => EICI[:twitter], + "new_caledonia" => EICI[:twitter], + "new_zealand" => EICI[:twitter], + "nicaragua" => EICI[:twitter], + "niger" => EICI[:twitter], + "nigeria" => EICI[:twitter], + "niue" => EICI[:twitter], + "norfolk_island" => EICI[:twitter], + "northern_mariana_islands" => EICI[:twitter], + "north_korea" => EICI[:twitter], + "norway" => EICI[:twitter], + "oman" => EICI[:twitter], + "pakistan" => EICI[:twitter], + "palau" => EICI[:twitter], + "palestinian_territories" => EICI[:twitter], + "panama" => EICI[:twitter], + "papua_new_guinea" => EICI[:twitter], + "paraguay" => EICI[:twitter], + "peru" => EICI[:twitter], + "philippines" => EICI[:twitter], + "pitcairn_islands" => EICI[:twitter], + "poland" => EICI[:twitter], + "portugal" => EICI[:twitter], + "puerto_rico" => EICI[:twitter], + "qatar" => EICI[:twitter], + "reunion" => EICI[:twitter], + "romania" => EICI[:twitter], + "ru" => EICI[:twitter], + "rwanda" => EICI[:twitter], + "st_barthelemy" => EICI[:twitter], + "st_helena" => EICI[:twitter], + "st_kitts_nevis" => EICI[:twitter], + "st_lucia" => EICI[:twitter], + "st_pierre_miquelon" => EICI[:twitter], + "st_vincent_grenadines" => EICI[:twitter], + "samoa" => EICI[:twitter], + "san_marino" => EICI[:twitter], + "sao_tome_principe" => EICI[:twitter], + "saudi_arabia" => EICI[:twitter], + "senegal" => EICI[:twitter], + "serbia" => EICI[:twitter], + "seychelles" => EICI[:twitter], + "sierra_leone" => EICI[:twitter], + "singapore" => EICI[:twitter], + "sint_maarten" => EICI[:twitter], + "slovakia" => EICI[:twitter], + "slovenia" => EICI[:twitter], + "solomon_islands" => EICI[:twitter], + "somalia" => EICI[:twitter], + "south_africa" => EICI[:twitter], + "south_georgia_south_sandwich_islands" => EICI[:twitter], + "kr" => EICI[:twitter], + "south_sudan" => EICI[:twitter], + "es" => EICI[:twitter], + "sri_lanka" => EICI[:twitter], + "sudan" => EICI[:twitter], + "suriname" => EICI[:twitter], + "swaziland" => EICI[:twitter], + "sweden" => EICI[:twitter], + "switzerland" => EICI[:twitter], + "syria" => EICI[:twitter], + "taiwan" => EICI[:twitter], + "tajikistan" => EICI[:twitter], + "tanzania" => EICI[:twitter], + "thailand" => EICI[:twitter], + "timor_leste" => EICI[:twitter], + "togo" => EICI[:twitter], + "tokelau" => EICI[:twitter], + "tonga" => EICI[:twitter], + "trinidad_tobago" => EICI[:twitter], + "tunisia" => EICI[:twitter], + "tr" => EICI[:twitter], + "turkmenistan" => EICI[:twitter], + "turks_caicos_islands" => EICI[:twitter], + "tuvalu" => EICI[:twitter], + "uganda" => EICI[:twitter], + "ukraine" => EICI[:twitter], + "united_arab_emirates" => EICI[:twitter], + "uk" => EICI[:twitter], + "us" => EICI[:twitter], + "us_virgin_islands" => EICI[:twitter], + "uruguay" => EICI[:twitter], + "uzbekistan" => EICI[:twitter], + "vanuatu" => EICI[:twitter], + "vatican_city" => EICI[:twitter], + "venezuela" => EICI[:twitter], + "vietnam" => EICI[:twitter], + "wallis_futuna" => EICI[:twitter], + "western_sahara" => EICI[:twitter], + "yemen" => EICI[:twitter], + "zambia" => EICI[:twitter], + "zimbabwe" => EICI[:twitter], + }, + :windows => { + "hash" => EICI[:apple], + "zero" => EICI[:apple], + "one" => EICI[:apple], + "two" => EICI[:apple], + "three" => EICI[:apple], + "four" => EICI[:apple], + "five" => EICI[:apple], + "six" => EICI[:apple], + "seven" => EICI[:apple], + "eight" => EICI[:apple], + "nine" => EICI[:apple], + "asterisk" => EICI[:apple], + "afghanistan" => EICI[:twitter], + "aland_islands" => EICI[:twitter], + "albania" => EICI[:twitter], + "algeria" => EICI[:twitter], + "american_samoa" => EICI[:twitter], + "andorra" => EICI[:twitter], + "angola" => EICI[:twitter], + "anguilla" => EICI[:twitter], + "antarctica" => EICI[:twitter], + "antigua_barbuda" => EICI[:twitter], + "argentina" => EICI[:twitter], + "armenia" => EICI[:twitter], + "aruba" => EICI[:twitter], + "australia" => EICI[:twitter], + "austria" => EICI[:twitter], + "azerbaijan" => EICI[:twitter], + "bahamas" => EICI[:twitter], + "bahrain" => EICI[:twitter], + "bangladesh" => EICI[:twitter], + "barbados" => EICI[:twitter], + "belarus" => EICI[:twitter], + "belgium" => EICI[:twitter], + "belize" => EICI[:twitter], + "benin" => EICI[:twitter], + "bermuda" => EICI[:twitter], + "bhutan" => EICI[:twitter], + "bolivia" => EICI[:twitter], + "caribbean_netherlands" => EICI[:twitter], + "bosnia_herzegovina" => EICI[:twitter], + "botswana" => EICI[:twitter], + "brazil" => EICI[:twitter], + "british_indian_ocean_territory" => EICI[:twitter], + "british_virgin_islands" => EICI[:twitter], + "brunei" => EICI[:twitter], + "bulgaria" => EICI[:twitter], + "burkina_faso" => EICI[:twitter], + "burundi" => EICI[:twitter], + "cape_verde" => EICI[:twitter], + "cambodia" => EICI[:twitter], + "cameroon" => EICI[:twitter], + "canada" => EICI[:twitter], + "canary_islands" => EICI[:twitter], + "cayman_islands" => EICI[:twitter], + "central_african_republic" => EICI[:twitter], + "chad" => EICI[:twitter], + "chile" => EICI[:twitter], + "cn" => EICI[:twitter], + "christmas_island" => EICI[:twitter], + "cocos_islands" => EICI[:twitter], + "colombia" => EICI[:twitter], + "comoros" => EICI[:twitter], + "congo_brazzaville" => EICI[:twitter], + "congo_kinshasa" => EICI[:twitter], + "cook_islands" => EICI[:twitter], + "costa_rica" => EICI[:twitter], + "croatia" => EICI[:twitter], + "cuba" => EICI[:twitter], + "curacao" => EICI[:twitter], + "cyprus" => EICI[:twitter], + "czech_republic" => EICI[:twitter], + "denmark" => EICI[:twitter], + "djibouti" => EICI[:twitter], + "dominica" => EICI[:twitter], + "dominican_republic" => EICI[:twitter], + "ecuador" => EICI[:twitter], + "egypt" => EICI[:twitter], + "el_salvador" => EICI[:twitter], + "equatorial_guinea" => EICI[:twitter], + "eritrea" => EICI[:twitter], + "estonia" => EICI[:twitter], + "ethiopia" => EICI[:twitter], + "eu" => EICI[:twitter], + "falkland_islands" => EICI[:twitter], + "faroe_islands" => EICI[:twitter], + "fiji" => EICI[:twitter], + "finland" => EICI[:twitter], + "fr" => EICI[:twitter], + "french_guiana" => EICI[:twitter], + "french_polynesia" => EICI[:twitter], + "french_southern_territories" => EICI[:twitter], + "gabon" => EICI[:twitter], + "gambia" => EICI[:twitter], + "georgia" => EICI[:twitter], + "de" => EICI[:twitter], + "ghana" => EICI[:twitter], + "gibraltar" => EICI[:twitter], + "greece" => EICI[:twitter], + "greenland" => EICI[:twitter], + "grenada" => EICI[:twitter], + "guadeloupe" => EICI[:twitter], + "guam" => EICI[:twitter], + "guatemala" => EICI[:twitter], + "guernsey" => EICI[:twitter], + "guinea" => EICI[:twitter], + "guinea_bissau" => EICI[:twitter], + "guyana" => EICI[:twitter], + "haiti" => EICI[:twitter], + "honduras" => EICI[:twitter], + "hong_kong" => EICI[:twitter], + "hungary" => EICI[:twitter], + "iceland" => EICI[:twitter], + "india" => EICI[:twitter], + "indonesia" => EICI[:twitter], + "iran" => EICI[:twitter], + "iraq" => EICI[:twitter], + "ireland" => EICI[:twitter], + "isle_of_man" => EICI[:twitter], + "israel" => EICI[:twitter], + "it" => EICI[:twitter], + "cote_divoire" => EICI[:twitter], + "jamaica" => EICI[:twitter], + "jp" => EICI[:twitter], + "jersey" => EICI[:twitter], + "jordan" => EICI[:twitter], + "kazakhstan" => EICI[:twitter], + "kenya" => EICI[:twitter], + "kiribati" => EICI[:twitter], + "kosovo" => EICI[:twitter], + "kuwait" => EICI[:twitter], + "kyrgyzstan" => EICI[:twitter], + "laos" => EICI[:twitter], + "latvia" => EICI[:twitter], + "lebanon" => EICI[:twitter], + "lesotho" => EICI[:twitter], + "liberia" => EICI[:twitter], + "libya" => EICI[:twitter], + "liechtenstein" => EICI[:twitter], + "lithuania" => EICI[:twitter], + "luxembourg" => EICI[:twitter], + "macau" => EICI[:twitter], + "macedonia" => EICI[:twitter], + "madagascar" => EICI[:twitter], + "malawi" => EICI[:twitter], + "malaysia" => EICI[:twitter], + "maldives" => EICI[:twitter], + "mali" => EICI[:twitter], + "malta" => EICI[:twitter], + "marshall_islands" => EICI[:twitter], + "martinique" => EICI[:twitter], + "mauritania" => EICI[:twitter], + "mauritius" => EICI[:twitter], + "mayotte" => EICI[:twitter], + "mexico" => EICI[:twitter], + "micronesia" => EICI[:twitter], + "moldova" => EICI[:twitter], + "monaco" => EICI[:twitter], + "mongolia" => EICI[:twitter], + "montenegro" => EICI[:twitter], + "montserrat" => EICI[:twitter], + "morocco" => EICI[:twitter], + "mozambique" => EICI[:twitter], + "myanmar" => EICI[:twitter], + "namibia" => EICI[:twitter], + "nauru" => EICI[:twitter], + "nepal" => EICI[:twitter], + "netherlands" => EICI[:twitter], + "new_caledonia" => EICI[:twitter], + "new_zealand" => EICI[:twitter], + "nicaragua" => EICI[:twitter], + "niger" => EICI[:twitter], + "nigeria" => EICI[:twitter], + "niue" => EICI[:twitter], + "norfolk_island" => EICI[:twitter], + "northern_mariana_islands" => EICI[:twitter], + "north_korea" => EICI[:twitter], + "norway" => EICI[:twitter], + "oman" => EICI[:twitter], + "pakistan" => EICI[:twitter], + "palau" => EICI[:twitter], + "palestinian_territories" => EICI[:twitter], + "panama" => EICI[:twitter], + "papua_new_guinea" => EICI[:twitter], + "paraguay" => EICI[:twitter], + "peru" => EICI[:twitter], + "philippines" => EICI[:twitter], + "pitcairn_islands" => EICI[:twitter], + "poland" => EICI[:twitter], + "portugal" => EICI[:twitter], + "puerto_rico" => EICI[:twitter], + "qatar" => EICI[:twitter], + "reunion" => EICI[:twitter], + "romania" => EICI[:twitter], + "ru" => EICI[:twitter], + "rwanda" => EICI[:twitter], + "st_barthelemy" => EICI[:twitter], + "st_helena" => EICI[:twitter], + "st_kitts_nevis" => EICI[:twitter], + "st_lucia" => EICI[:twitter], + "st_pierre_miquelon" => EICI[:twitter], + "st_vincent_grenadines" => EICI[:twitter], + "samoa" => EICI[:twitter], + "san_marino" => EICI[:twitter], + "sao_tome_principe" => EICI[:twitter], + "saudi_arabia" => EICI[:twitter], + "senegal" => EICI[:twitter], + "serbia" => EICI[:twitter], + "seychelles" => EICI[:twitter], + "sierra_leone" => EICI[:twitter], + "singapore" => EICI[:twitter], + "sint_maarten" => EICI[:twitter], + "slovakia" => EICI[:twitter], + "slovenia" => EICI[:twitter], + "solomon_islands" => EICI[:twitter], + "somalia" => EICI[:twitter], + "south_africa" => EICI[:twitter], + "south_georgia_south_sandwich_islands" => EICI[:twitter], + "kr" => EICI[:twitter], + "south_sudan" => EICI[:twitter], + "es" => EICI[:twitter], + "sri_lanka" => EICI[:twitter], + "sudan" => EICI[:twitter], + "suriname" => EICI[:twitter], + "swaziland" => EICI[:twitter], + "sweden" => EICI[:twitter], + "switzerland" => EICI[:twitter], + "syria" => EICI[:twitter], + "taiwan" => EICI[:twitter], + "tajikistan" => EICI[:twitter], + "tanzania" => EICI[:twitter], + "thailand" => EICI[:twitter], + "timor_leste" => EICI[:twitter], + "togo" => EICI[:twitter], + "tokelau" => EICI[:twitter], + "tonga" => EICI[:twitter], + "trinidad_tobago" => EICI[:twitter], + "tunisia" => EICI[:twitter], + "tr" => EICI[:twitter], + "turkmenistan" => EICI[:twitter], + "turks_caicos_islands" => EICI[:twitter], + "tuvalu" => EICI[:twitter], + "uganda" => EICI[:twitter], + "ukraine" => EICI[:twitter], + "united_arab_emirates" => EICI[:twitter], + "uk" => EICI[:twitter], + "us" => EICI[:twitter], + "us_virgin_islands" => EICI[:twitter], + "uruguay" => EICI[:twitter], + "uzbekistan" => EICI[:twitter], + "vanuatu" => EICI[:twitter], + "vatican_city" => EICI[:twitter], + "venezuela" => EICI[:twitter], + "vietnam" => EICI[:twitter], + "wallis_futuna" => EICI[:twitter], + "western_sahara" => EICI[:twitter], + "yemen" => EICI[:twitter], + "zambia" => EICI[:twitter], + "zimbabwe" => EICI[:twitter], + } +} + +PLATFORM_STYLES ||= { + :apple => "apple", + :google => "google", + :twitter => "twitter", + :one => "emoji_one", + :windows => "win10" +} desc "update emoji images" -task "emoji:update" => :environment do +task "emoji:update" do + emojis = build_emojis_list(EMOJI_KEYWORDS_URL) + images = build_images_list(EMOJI_LIST_URL, emojis) + emojis.each { |code, emoji| emoji[:images] = ( images[code] || {} ) } + write_emojis(emojis) + write_db_json(emojis) + write_groups_js_es6(emojis) + + puts "\r\n" + $debugging_output.each { |debug| puts debug } + + TestEmojiUpdate.run_and_summarize +end + +desc "test the emoji generation script" +task "emoji:test" do + ENV['EMOJI_TEST'] = "1" + Rake::Task["emoji:update"].invoke +end + +def write_emojis(emojis) + check_pngout + + path = "#{EMOJI_IMAGES_PATH}/**/*" + confirm_overwrite(path) + puts "Cleaning emoji folder..." + FileUtils.rm_rf(Dir.glob(path)) + + puts "Writing emojis to disk..." + + emojis.each do |code, emoji| + images = emoji[:images] + + if images.values.all? { |image| !image.nil? } + PLATFORM_STYLES.each do |platform, style| + style_path = File.join(EMOJI_IMAGES_PATH, style) + image_path = File.join(style_path, "#{emoji[:name]}.png") + FileUtils.mkdir_p(File.expand_path("..", image_path)) + image = images[platform] + + write_emoji(image_path, image) + + if aliases = EMOJI_ALIASES[emoji[:name]] + aliases.each do |alias_name| + alias_image_path = File.join(style_path, "#{alias_name}.png") + write_emoji(alias_image_path, image) + end + end + end + else + platforms = images.select { |_, v| v.nil? }.keys.join(',') + $debugging_output << "[!] Skipping `#{emoji[:name]} #{code_to_emoji(code)}`, undefined platforms: #{platforms}" + end + end + + puts "\r\n" +end + +def build_emojis_list(url) + puts "Downloading remote emoji list..." + list = open(url).read + emojis = {} - puts "Loading local emoji database..." - db = JSON.parse(File.read("lib/emoji/db.json")) - db["emojis"].each do |e| - emojis[e["code"].tr("-", "_")] = { name: e["name"] } - end - aliases = db["aliases"].to_h + keywords = JSON.parse(list).deep_merge(EMOJI_KEYWORDS_PATCH) + EMOJI_KEYWORDS_EXCLUDE_LIST.each { |x| keywords.delete(x) } + keywords.keys.each do |name| + keyword = keywords[name] + next unless char = keyword["char"].presence - puts "Enhancing emoji database with emojilib keywords..." - keywords = JSON.parse(open(EMOJI_KEYWORDS_URL).read) - keywords.keys.each do |k| - next unless char = keywords[k]["char"].presence + code = codepoints_to_code(char.codepoints, keyword["fitzpatrick_scale"]) + emojis[code] ||= { + :name => name, + :fitzpatrick_scale => keyword["fitzpatrick_scale"] + } - code = char.codepoints - .map { |c| c.to_s(16).rjust(4, "0") } - .join("_") - .downcase - .gsub(/_fe0f$/, "") - - emojis[code] ||= { name: k } + if keyword["fitzpatrick_scale"] + emojis.merge!(generate_emoji_scales(name, code)) + end end - puts "Retrieving remote emoji list..." - list = open(EMOJI_LIST_URL).read + emojis +end + +def build_images_list(url, emojis) + puts "Downloading remote emoji images list..." + list = open(url).read + + puts "Parsing remote emoji images list..." + images = {} - puts "Parsing remote emoji list..." doc = Nokogiri::HTML(list) - doc.css("tr").each do |row| + table = doc.css("table")[0] + table.css("tr").each do |row| cells = row.css("td") - next if cells.size == 0 + + # skip header and section rows + next if cells.size != 16 code = cells[1].at_css("a")["name"] - unless emojis[code] - code = code.gsub(/_fe0f/, "") - next unless emojis[code] + cell_to_img = lambda { |cell| + return unless img = cell.at_css("img") + Base64.decode64(img["src"][/base64,(.+)$/, 1]) + } + + images[code] = {} + PLATFORM_STYLES.keys.each do |platform| + default_cell_index = EMOJI_IMAGES_CELLS_INDEX[platform] + + if emoji = emojis[code] + name = emoji[:name] + patch_index = EMOJI_IMAGES_CELLS_INDEX_PATCH.fetch(platform, {})[name] + + if patch_index && cell_to_img.call(cells[default_cell_index]) + $debugging_output << "[!] Found existing image `#{name}` for platform: #{platform}, might want to remove the patch." + end + end + + index = patch_index || default_cell_index + images[code][platform] = cell_to_img.call(cells[index]) end - apple = cell_to_image(cells[4]) - google = cell_to_image(cells[5]) - twitter = cell_to_image(cells[6]) - one = cell_to_image(cells[7]) - - if WINDOWS_FLAGS.include?(code) - windows = custom_windows_flag(code) - else - windows = cell_to_image(cells[11]) - end - - if apple.blank? || google.blank? || twitter.blank? || one.blank? || windows.blank? - emojis.delete(code) - next - end - - emojis[code][:apple] = apple - emojis[code][:google] = google - emojis[code][:twitter] = twitter - emojis[code][:one] = one - emojis[code][:windows] = windows + putc "." end - puts "Writing emojis..." - write_emojis(emojis, aliases, :apple, "apple") - write_emojis(emojis, aliases, :google, "google") - write_emojis(emojis, aliases, :twitter, "twitter") - write_emojis(emojis, aliases, :one, "emoji_one") - write_emojis(emojis, aliases, :windows, "win10") + puts "\r\n" + + images +end + +def write_db_json(emojis) + puts "Writing #{EMOJI_DB_PATH}..." + + confirm_overwrite(EMOJI_DB_PATH) + + FileUtils.mkdir_p(File.expand_path("..", EMOJI_DB_PATH)) + + # skin tones variations of emojis shouldn’t appear in autocomplete + emojis_without_tones = emojis + .select { |code, _| !FITZPATRICK_SCALE.any? {|scale| code[scale] } } + .keys + .map { |code| + { + "code" => code.tr("_", "-"), + "name" => emojis[code][:name] + } + } + + emoji_with_tones = emojis + .select { |code, emoji| emoji[:fitzpatrick_scale] } + .keys + .map { |code| emojis[code][:name] } - puts "Updating db.json..." db = { - "emojis" => emojis.keys.map { |k| { "code" => k.tr("_", "-"), "name" => emojis[k][:name] } }, - "aliases" => aliases, + "emojis" => emojis_without_tones, + "tonableEmojis" => emoji_with_tones, + "aliases" => EMOJI_ALIASES } - File.write("lib/emoji/db.json", JSON.pretty_generate(db)) - - puts "Done!" + File.write(EMOJI_DB_PATH, JSON.pretty_generate(db)) end -def cell_to_image(cell) - return unless img = cell.at_css("img") - Base64.decode64(img["src"][/base64,(.+)$/, 1]) +def write_groups_js_es6(emojis) + puts "Writing #{EMOJI_GROUPS_PATH}..." + + confirm_overwrite(EMOJI_GROUPS_PATH) + + check_groups(emojis) + + template = <