Merge pull request #184 from rnystrom/emoji

Replace manual emoji map with JSON
This commit is contained in:
Ryan Nystrom
2017-07-25 14:46:34 -06:00
committed by GitHub
5 changed files with 15270 additions and 874 deletions

View File

@@ -30,6 +30,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
flexController.configureWindow(window)
window?.backgroundColor = Styles.Colors.background
rootNavigationManager.resetRootViewController(userSession: sessionManager.userSession)
loadGitHubEmojis()
return true
}

View File

@@ -39,15 +39,16 @@ final class EmojiAutocomplete: AutocompleteType {
completion(cached.count > 0)
}
var results = [Result]()
let lowerword = word.lowercased()
for (k, v) in GithubEmojiMap {
if k.lowercased().hasPrefix(prefix + lowerword) {
results.append(Result(emoji: v, term: k))
}
}
let results: [Result] = GithubEmojis.flatMap({ emoji in
// Iterate through each of the names, and find the first one which is prefixed with the search term
guard let matchingName = emoji.names.first(where: { emojiName in
emojiName.lowercased().hasPrefix(lowerword)
}) else { return nil }
return Result(emoji: emoji.emoji, term: ":\(matchingName):")
})
self.results = results
cachedResults[word] = results

View File

@@ -8,882 +8,50 @@
import Foundation
func replaceGithubEmojiBrute(string: String) -> String {
var replacedString = string
for (k, v) in GithubEmojiMap {
replacedString = replacedString.replacingOccurrences(of: k, with: v)
}
return replacedString
}
func replaceGithubEmojiRegex(string: String) -> String {
let matches = GithubEmojiRegex.matches(in: string, options: [], range: string.nsrange)
var replacedString = string
for match in matches.reversed() {
guard let substr = string.substring(with: match.range),
let range = string.range(from: match.range),
let emoji = GithubEmojiMap[substr]
let emoji = GithubEmojis.first(where: { $0.regexList.range(of: substr) != nil })
else { continue }
replacedString = replacedString.replacingCharacters(in: range, with: emoji)
replacedString = replacedString.replacingCharacters(in: range, with: emoji.emoji)
}
return replacedString
}
// https://www.webpagefx.com/tools/emoji-cheat-sheet/
let GithubEmojiMap: [String: String] = [
":smile:": "😄",
":laughing:": "😆",
":blush:": "😊",
":smiley:": "😃",
":relaxed:": "☺️",
":smirk:": "😏",
":heart_eyes:": "😍",
":kissing_heart:": "😘",
":kissing_closed_eyes:": "😚",
":flushed:": "😳",
":relieved:": "😌",
":satisfied:": "😆",
":grin:": "😁",
":wink:": "😉",
":stuck_out_tongue_winking_eye:": "😜",
":stuck_out_tongue_closed_eyes:": "😝",
":grinning:": "😀",
":kissing:": "😗",
":kissing_smiling_eyes:": "😙",
":stuck_out_tongue:": "😛",
":sleeping:": "😴",
":worried:": "😟",
":frowning:": "😦",
":anguished:": "😧",
":open_mouth:": "😮",
":grimacing:": "😬",
":confused:": "😕",
":hushed:": "😯",
":expressionless:": "😑",
":unamused:": "😒",
":sweat_smile:": "😅",
":sweat:": "😓",
":disappointed_relieved:": "😥",
":weary:": "😩",
":pensive:": "😔",
":disappointed:": "😞",
":confounded:": "😖",
":fearful:": "😨",
":cold_sweat:": "😰",
":persevere:": "😣",
":cry:": "😢",
":sob:": "😭",
":joy:": "😂",
":astonished:": "😲",
":scream:": "😱",
":tired_face:": "😫",
":angry:": "😠",
":rage:": "😡",
":triumph:": "😤",
":sleepy:": "😪",
":yum:": "😋",
":mask:": "😷",
":sunglasses:": "😎",
":dizzy_face:": "😵",
":imp:": "👿",
":smiling_imp:": "😈",
":neutral_face:": "😐",
":no_mouth:": "😶",
":innocent:": "😇",
":alien:": "👽",
":yellow_heart:": "💛",
":blue_heart:": "💙",
":purple_heart:": "💜",
":heart:": "❤️",
":green_heart:": "💚",
":broken_heart:": "💔",
":heartbeat:": "💓",
":heartpulse:": "💗",
":two_hearts:": "💕",
":revolving_hearts:": "💞",
":cupid:": "💘",
":sparkling_heart:": "💖",
":sparkles:": "",
":star:": "⭐️",
":star2:": "🌟",
":dizzy:": "💫",
":boom:": "💥",
":collision:": "💥",
":anger:": "💢",
":exclamation:": "❗️",
":question:": "",
":grey_exclamation:": "",
":grey_question:": "",
":zzz:": "💤",
":dash:": "💨",
":sweat_drops:": "💦",
":notes:": "🎶",
":musical_note:": "🎵",
":fire:": "🔥",
":hankey:": "💩",
":poop:": "💩",
":shit:": "💩",
":+1:": "👍",
":thumbsup:": "👍",
":-1:": "👎",
":thumbsdown:": "👎",
":ok_hand:": "👌",
":punch:": "👊",
":facepunch:": "👊",
":fist:": "",
":v:": "✌️",
":wave:": "👋",
":hand:": "",
":raised_hand:": "",
":open_hands:": "👐",
":point_up:": "☝️",
":point_down:": "👇",
":point_left:": "👈",
":point_right:": "👉",
":raised_hands:": "🙌",
":pray:": "🙏",
":point_up_2:": "👆",
":clap:": "👏",
":muscle:": "💪",
":metal:": "🤘",
":fu:": "🖕",
":walking:": "🚶",
":runner:": "🏃",
":running:": "🏃",
":couple:": "👫",
":family:": "👪",
":two_men_holding_hands:": "👬",
":two_women_holding_hands:": "👭",
":dancer:": "💃",
":dancers:": "👯",
":ok_woman:": "🙆",
":no_good:": "🙅",
":information_desk_person:": "💁",
":raising_hand:": "🙋",
":bride_with_veil:": "👰",
":person_with_pouting_face:": "🙎",
":person_frowning:": "🙍",
":bow:": "🙇",
":couple_with_heart:": "💑",
":massage:": "💆",
":haircut:": "💇",
":nail_care:": "💅",
":boy:": "👦",
":girl:": "👧",
":woman:": "👩",
":man:": "👨",
":baby:": "👶",
":older_woman:": "👵",
":older_man:": "👴",
":person_with_blond_hair:": "👱",
":man_with_gua_pi_mao:": "👲",
":man_with_turban:": "👳",
":construction_worker:": "👷",
":cop:": "👮",
":angel:": "👼",
":princess:": "👸",
":smiley_cat:": "😺",
":smile_cat:": "😸",
":heart_eyes_cat:": "😻",
":kissing_cat:": "😽",
":smirk_cat:": "😼",
":scream_cat:": "🙀",
":crying_cat_face:": "😿",
":joy_cat:": "😹",
":pouting_cat:": "😾",
":japanese_ogre:": "👹",
":japanese_goblin:": "👺",
":see_no_evil:": "🙈",
":hear_no_evil:": "🙉",
":speak_no_evil:": "🙊",
":guardsman:": "💂",
":skull:": "💀",
":feet:": "🐾",
":lips:": "👄",
":kiss:": "💋",
":droplet:": "💧",
":ear:": "👂",
":eyes:": "👀",
":nose:": "👃",
":tongue:": "👅",
":love_letter:": "💌",
":bust_in_silhouette:": "👤",
":busts_in_silhouette:": "👥",
":speech_balloon:": "💬",
":thought_balloon:": "💭",
":sunny:": "☀️",
":umbrella:": "☔️",
":cloud:": "☁️",
":snowflake:": "❄️",
":snowman:": "⛄️",
":zap:": "⚡️",
":cyclone:": "🌀",
":foggy:": "🌁",
":ocean:": "🌊",
":cat:": "🐱",
":dog:": "🐶",
":mouse:": "🐭",
":hamster:": "🐹",
":rabbit:": "🐰",
":wolf:": "🐺",
":frog:": "🐸",
":tiger:": "🐯",
":koala:": "🐨",
":bear:": "🐻",
":pig:": "🐷",
":pig_nose:": "🐽",
":cow:": "🐮",
":boar:": "🐗",
":monkey_face:": "🐵",
":monkey:": "🐒",
":horse:": "🐴",
":racehorse:": "🐎",
":camel:": "🐫",
":sheep:": "🐑",
":elephant:": "🐘",
":panda_face:": "🐼",
":snake:": "🐍",
":bird:": "🐦",
":baby_chick:": "🐤",
":hatched_chick:": "🐥",
":hatching_chick:": "🐣",
":chicken:": "🐔",
":penguin:": "🐧",
":turtle:": "🐢",
":bug:": "🐛",
":honeybee:": "🐝",
":ant:": "🐜",
":beetle:": "🐞",
":snail:": "🐌",
":octopus:": "🐙",
":tropical_fish:": "🐠",
":fish:": "🐟",
":whale:": "🐳",
":whale2:": "🐋",
":dolphin:": "🐬",
":cow2:": "🐄",
":ram:": "🐏",
":rat:": "🐀",
":water_buffalo:": "🐃",
":tiger2:": "🐅",
":rabbit2:": "🐇",
":dragon:": "🐉",
":goat:": "🐐",
":rooster:": "🐓",
":dog2:": "🐕",
":pig2:": "🐖",
":mouse2:": "🐁",
":ox:": "🐂",
":dragon_face:": "🐲",
":blowfish:": "🐡",
":crocodile:": "🐊",
":dromedary_camel:": "🐪",
":leopard:": "🐆",
":cat2:": "🐈",
":poodle:": "🐩",
":paw_prints:": "🐾",
":bouquet:": "💐",
":cherry_blossom:": "🌸",
":tulip:": "🌷",
":four_leaf_clover:": "🍀",
":rose:": "🌹",
":sunflower:": "🌻",
":hibiscus:": "🌺",
":maple_leaf:": "🍁",
":leaves:": "🍃",
":fallen_leaf:": "🍂",
":herb:": "🌿",
":mushroom:": "🍄",
":cactus:": "🌵",
":palm_tree:": "🌴",
":evergreen_tree:": "🌲",
":deciduous_tree:": "🌳",
":chestnut:": "🌰",
":seedling:": "🌱",
":blossom:": "🌼",
":ear_of_rice:": "🌾",
":shell:": "🐚",
":globe_with_meridians:": "🌐",
":sun_with_face:": "🌞",
":full_moon_with_face:": "🌝",
":new_moon_with_face:": "🌚",
":new_moon:": "🌑",
":waxing_crescent_moon:": "🌒",
":first_quarter_moon:": "🌓",
":waxing_gibbous_moon:": "🌔",
":full_moon:": "🌕",
":waning_gibbous_moon:": "🌖",
":last_quarter_moon:": "🌗",
":waning_crescent_moon:": "🌘",
":last_quarter_moon_with_face:": "🌜",
":first_quarter_moon_with_face:": "🌛",
":moon:": "🌔",
":earth_africa:": "🌍",
":earth_americas:": "🌎",
":earth_asia:": "🌏",
":volcano:": "🌋",
":milky_way:": "🌌",
":partly_sunny:": "⛅️",
":bamboo:": "🎍",
":gift_heart:": "💝",
":dolls:": "🎎",
":school_satchel:": "🎒",
":mortar_board:": "🎓",
":flags:": "🎏",
":fireworks:": "🎆",
":sparkler:": "🎇",
":wind_chime:": "🎐",
":rice_scene:": "🎑",
":jack_o_lantern:": "🎃",
":ghost:": "👻",
":santa:": "🎅",
":christmas_tree:": "🎄",
":gift:": "🎁",
":bell:": "🔔",
":no_bell:": "🔕",
":tanabata_tree:": "🎋",
":tada:": "🎉",
":confetti_ball:": "🎊",
":balloon:": "🎈",
":crystal_ball:": "🔮",
":cd:": "💿",
":dvd:": "📀",
":floppy_disk:": "💾",
":camera:": "📷",
":video_camera:": "📹",
":movie_camera:": "🎥",
":computer:": "💻",
":tv:": "📺",
":iphone:": "📱",
":phone:": "📱",
":telephone:": "☎️",
":telephone_receiver:": "📞",
":pager:": "📟",
":fax:": "📠",
":minidisc:": "💽",
":vhs:": "📼",
":sound:": "🔉",
":speaker:": "🔈",
":mute:": "🔇",
":loudspeaker:": "📢",
":mega:": "📣",
":hourglass:": "⌛️",
":hourglass_flowing_sand:": "",
":alarm_clock:": "",
":watch:": "⌚️",
":radio:": "📻",
":satellite:": "📡",
":loop:": "",
":mag:": "🔍",
":mag_right:": "🔎",
":unlock:": "🔓",
":lock:": "🔒",
":lock_with_ink_pen:": "🔏",
":closed_lock_with_key:": "🔐",
":key:": "🔑",
":bulb:": "💡",
":flashlight:": "🔦",
":high_brightness:": "🔆",
":low_brightness:": "🔅",
":electric_plug:": "🔌",
":battery:": "🔋",
":calling:": "📲",
":email:": "✉️",
":mailbox:": "📫",
":postbox:": "📮",
":bath:": "🛀",
":bathtub:": "🛁",
":shower:": "🚿",
":toilet:": "🚽",
":wrench:": "🔧",
":nut_and_bolt:": "🔩",
":hammer:": "🔨",
":seat:": "💺",
":moneybag:": "💰",
":yen:": "💴",
":dollar:": "💵",
":pound:": "💷",
":euro:": "💶",
":credit_card:": "💳",
":money_with_wings:": "💸",
":e-mail:": "📧",
":inbox_tray:": "📥",
":outbox_tray:": "📤",
":envelope:": "✉️",
":incoming_envelope:": "📨",
":postal_horn:": "📯",
":mailbox_closed:": "📪",
":mailbox_with_mail:": "📬",
":mailbox_with_no_mail:": "📭",
":door:": "🚪",
":smoking:": "🚬",
":bomb:": "💣",
":gun:": "🔫",
":hocho:": "🔪",
":pill:": "💊",
":syringe:": "💉",
":page_facing_up:": "📄",
":page_with_curl:": "📃",
":bookmark_tabs:": "📑",
":bar_chart:": "📊",
":chart_with_upwards_trend:": "📈",
":chart_with_downwards_trend:": "📉",
":scroll:": "📜",
":clipboard:": "📋",
":calendar:": "📆",
":date:": "📅",
":card_index:": "📇",
":file_folder:": "📁",
":open_file_folder:": "📂",
":scissors:": "✂️",
":pushpin:": "📌",
":paperclip:": "📎",
":black_nib:": "✒️",
":pencil2:": "✏️",
":straight_ruler:": "📏",
":triangular_ruler:": "📐",
":closed_book:": "📕",
":green_book:": "📗",
":blue_book:": "📘",
":orange_book:": "📙",
":notebook:": "📓",
":notebook_with_decorative_cover:": "📔",
":ledger:": "📒",
":books:": "📚",
":bookmark:": "🔖",
":name_badge:": "📛",
":microscope:": "🔬",
":telescope:": "🔭",
":newspaper:": "📰",
":football:": "🏈",
":basketball:": "🏀",
":soccer:": "⚽️",
":baseball:": "⚾️",
":tennis:": "🎾",
":8ball:": "🎱",
":rugby_football:": "🏉",
":bowling:": "🎳",
":golf:": "⛳️",
":mountain_bicyclist:": "🚵",
":bicyclist:": "🚴",
":horse_racing:": "🏇",
":snowboarder:": "🏂",
":swimmer:": "🏊",
":surfer:": "🏄",
":ski:": "🎿",
":spades:": "♠️",
":hearts:": "♥️",
":clubs:": "♣️",
":diamonds:": "♦️",
":gem:": "💎",
":ring:": "💍",
":trophy:": "🏆",
":musical_score:": "🎼",
":musical_keyboard:": "🎹",
":violin:": "🎻",
":space_invader:": "👾",
":video_game:": "🎮",
":black_joker:": "🃏",
":flower_playing_cards:": "🎴",
":game_die:": "🎲",
":dart:": "🎯",
":mahjong:": "🀄️",
":clapper:": "🎬",
":memo:": "📝",
":pencil:": "📝",
":book:": "📖",
":art:": "🎨",
":microphone:": "🎤",
":headphones:": "🎧",
":trumpet:": "🎺",
":saxophone:": "🎷",
":guitar:": "🎸",
":shoe:": "👞",
":sandal:": "👡",
":high_heel:": "👠",
":lipstick:": "💄",
":boot:": "👢",
":shirt:": "👕",
":tshirt:": "👕",
":necktie:": "👔",
":womans_clothes:": "👚",
":dress:": "👗",
":running_shirt_with_sash:": "🎽",
":jeans:": "👖",
":kimono:": "👘",
":bikini:": "👙",
":ribbon:": "🎀",
":tophat:": "🎩",
":crown:": "👑",
":womans_hat:": "👒",
":mans_shoe:": "👞",
":closed_umbrella:": "🌂",
":briefcase:": "💼",
":handbag:": "👜",
":pouch:": "👝",
":purse:": "👛",
":eyeglasses:": "👓",
":fishing_pole_and_fish:": "🎣",
":coffee:": "☕️",
":tea:": "🍵",
":sake:": "🍶",
":baby_bottle:": "🍼",
":beer:": "🍺",
":beers:": "🍻",
":cocktail:": "🍸",
":tropical_drink:": "🍹",
":wine_glass:": "🍷",
":fork_and_knife:": "🍴",
":pizza:": "🍕",
":hamburger:": "🍔",
":fries:": "🍟",
":poultry_leg:": "🍗",
":meat_on_bone:": "🍖",
":spaghetti:": "🍝",
":curry:": "🍛",
":fried_shrimp:": "🍤",
":bento:": "🍱",
":sushi:": "🍣",
":fish_cake:": "🍥",
":rice_ball:": "🍙",
":rice_cracker:": "🍘",
":rice:": "🍚",
":ramen:": "🍜",
":stew:": "🍲",
":oden:": "🍢",
":dango:": "🍡",
":egg:": "🥚",
":bread:": "🍞",
":doughnut:": "🍩",
":custard:": "🍮",
":icecream:": "🍦",
":ice_cream:": "🍨",
":shaved_ice:": "🍧",
":birthday:": "🎂",
":cake:": "🍰",
":cookie:": "🍪",
":chocolate_bar:": "🍫",
":candy:": "🍬",
":lollipop:": "🍭",
":honey_pot:": "🍯",
":apple:": "🍎",
":green_apple:": "🍏",
":tangerine:": "🍊",
":lemon:": "🍋",
":cherries:": "🍒",
":grapes:": "🍇",
":watermelon:": "🍉",
":strawberry:": "🍓",
":peach:": "🍑",
":melon:": "🍈",
":banana:": "🍌",
":pear:": "🍐",
":pineapple:": "🍍",
":sweet_potato:": "🍠",
":eggplant:": "🍆",
":tomato:": "🍅",
":corn:": "🌽",
":house:": "🏠",
":house_with_garden:": "🏡",
":school:": "🏫",
":office:": "🏢",
":post_office:": "🏣",
":hospital:": "🏥",
":bank:": "🏦",
":convenience_store:": "🏪",
":love_hotel:": "🏩",
":hotel:": "🏨",
":wedding:": "💒",
":church:": "⛪️",
":department_store:": "🏬",
":european_post_office:": "🏤",
":city_sunrise:": "🌇",
":city_sunset:": "🌆",
":japanese_castle:": "🏯",
":european_castle:": "🏰",
":tent:": "⛺️",
":factory:": "🏭",
":tokyo_tower:": "🗼",
":japan:": "🗾",
":mount_fuji:": "🗻",
":sunrise_over_mountains:": "🌄",
":sunrise:": "🌅",
":stars:": "🌠",
":statue_of_liberty:": "🗽",
":bridge_at_night:": "🌉",
":carousel_horse:": "🎠",
":rainbow:": "🌈",
":ferris_wheel:": "🎡",
":fountain:": "⛲️",
":roller_coaster:": "🎢",
":ship:": "🚢",
":speedboat:": "🚤",
":boat:": "⛵️",
":sailboat:": "⛵️",
":rowboat:": "🚣",
":anchor:": "⚓️",
":rocket:": "🚀",
":airplane:": "✈️",
":helicopter:": "🚁",
":steam_locomotive:": "🚂",
":tram:": "🚊",
":mountain_railway:": "🚞",
":bike:": "🚲",
":aerial_tramway:": "🚡",
":suspension_railway:": "🚟",
":mountain_cableway:": "🚠",
":tractor:": "🚜",
":blue_car:": "🚙",
":oncoming_automobile:": "🚘",
":car:": "🚗",
":red_car:": "🚗",
":taxi:": "🚕",
":oncoming_taxi:": "🚖",
":articulated_lorry:": "🚛",
":bus:": "🚌",
":oncoming_bus:": "🚍",
":rotating_light:": "🚨",
":police_car:": "🚓",
":oncoming_police_car:": "🚔",
":fire_engine:": "🚒",
":ambulance:": "🚑",
":minibus:": "🚐",
":truck:": "🚚",
":train:": "🚋",
":station:": "🚉",
":train2:": "🚆",
":bullettrain_front:": "🚅",
":bullettrain_side:": "🚄",
":light_rail:": "🚈",
":monorail:": "🚝",
":railway_car:": "🚃",
":trolleybus:": "🚎",
":ticket:": "🎫",
":fuelpump:": "⛽️",
":vertical_traffic_light:": "🚦",
":traffic_light:": "🚥",
":warning:": "⚠️",
":construction:": "🚧",
":beginner:": "🔰",
":atm:": "🏧",
":slot_machine:": "🎰",
":busstop:": "🚏",
":barber:": "💈",
":hotsprings:": "♨️",
":checkered_flag:": "🏁",
":crossed_flags:": "🎌",
":izakaya_lantern:": "🏮",
":moyai:": "🗿",
":circus_tent:": "🎪",
":performing_arts:": "🎭",
":round_pushpin:": "📍",
":triangular_flag_on_post:": "🚩",
":jp:": "🇯🇵",
":kr:": "🇰🇷",
":cn:": "🇨🇳",
":us:": "🇺🇸",
":fr:": "🇫🇷",
":es:": "🇪🇸",
":it:": "🇮🇹",
":ru:": "🇷🇺",
":gb:": "🇬🇧",
":uk:": "🇬🇧",
":de:": "🇩🇪",
":keycap_ten:": "🔟",
":1234:": "🔢",
":symbols:": "🔣",
":arrow_backward:": "◀️",
":arrow_down:": "⬇️",
":arrow_forward:": "▶️",
":arrow_left:": "⬅️",
":capital_abcd:": "🔠",
":abcd:": "🔡",
":abc:": "🔤",
":arrow_lower_left:": "↙️",
":arrow_lower_right:": "↘️",
":arrow_right:": "➡️",
":arrow_up:": "⬆️",
":arrow_upper_left:": "↖️",
":arrow_upper_right:": "↗️",
":arrow_double_down:": "",
":arrow_double_up:": "",
":arrow_down_small:": "🔽",
":arrow_heading_down:": "⤵️",
":arrow_heading_up:": "⤴️",
":leftwards_arrow_with_hook:": "↩️",
":arrow_right_hook:": "↪️",
":left_right_arrow:": "↔️",
":arrow_up_down:": "↕️",
":arrow_up_small:": "🔼",
":arrows_clockwise:": "🔃",
":arrows_counterclockwise:": "🔄",
":rewind:": "",
":fast_forward:": "",
":information_source:": "",
":ok:": "🆗",
":twisted_rightwards_arrows:": "🔀",
":repeat:": "🔁",
":repeat_one:": "🔂",
":new:": "🆕",
":top:": "🔝",
":up:": "🆙",
":cool:": "🆒",
":free:": "🆓",
":ng:": "🆖",
":cinema:": "🎦",
":koko:": "🈁",
":signal_strength:": "📶",
":u5272:": "🈹",
":u5408:": "🈴",
":u55b6:": "🈺",
":u6307:": "🈯️",
":u6708:": "🈷️",
":u6709:": "🈶",
":u6e80:": "🈵",
":u7121:": "🈚️",
":u7533:": "🈸",
":u7a7a:": "🈳",
":u7981:": "🈲",
":sa:": "🈂️",
":restroom:": "🚻",
":mens:": "🚹",
":womens:": "🚺",
":baby_symbol:": "🚼",
":no_smoking:": "🚭",
":parking:": "🅿️",
":wheelchair:": "♿️",
":metro:": "🚇",
":baggage_claim:": "🛄",
":accept:": "🉑",
":wc:": "🚾",
":potable_water:": "🚰",
":put_litter_in_its_place:": "🚮",
":secret:": "㊙️",
":congratulations:": "㊗️",
":m:": "Ⓜ️",
":passport_control:": "🛂",
":left_luggage:": "🛅",
":customs:": "🛃",
":ideograph_advantage:": "🉐",
":cl:": "🆑",
":sos:": "🆘",
":id:": "🆔",
":no_entry_sign:": "🚫",
":underage:": "🔞",
":no_mobile_phones:": "📵",
":do_not_litter:": "🚯",
":non-potable_water:": "🚱",
":no_bicycles:": "🚳",
":no_pedestrians:": "🚷",
":children_crossing:": "🚸",
":no_entry:": "⛔️",
":eight_spoked_asterisk:": "✳️",
":eight_pointed_black_star:": "✴️",
":heart_decoration:": "💟",
":vs:": "🆚",
":vibration_mode:": "📳",
":mobile_phone_off:": "📴",
":chart:": "💹",
":currency_exchange:": "💱",
":aries:": "♈️",
":taurus:": "♉️",
":gemini:": "♊️",
":cancer:": "♋️",
":leo:": "♌️",
":virgo:": "♍️",
":libra:": "♎️",
":scorpius:": "♏️",
":sagittarius:": "♐️",
":capricorn:": "♑️",
":aquarius:": "♒️",
":pisces:": "♓️",
":ophiuchus:": "",
":six_pointed_star:": "🔯",
":negative_squared_cross_mark:": "",
":a:": "🅰️",
":b:": "🅱️",
":ab:": "🆎",
":o2:": "🆎",
":diamond_shape_with_a_dot_inside:": "💠",
":recycle:": "♻️",
":end:": "🔚",
":on:": "🔛",
":soon:": "🔜",
":clock1:": "🕐",
":clock130:": "🕜",
":clock10:": "🕙",
":clock1030:": "🕥",
":clock11:": "🕚",
":clock1130:": "🕦",
":clock12:": "🕛",
":clock1230:": "🕧",
":clock2:": "🕑",
":clock230:": "🕝",
":clock3:": "🕒",
":clock330:": "🕞",
":clock4:": "🕓",
":clock430:": "🕟",
":clock5:": "🕔",
":clock530:": "🕠",
":clock6:": "🕕",
":clock630:": "🕡",
":clock7:": "🕖",
":clock730:": "🕢",
":clock8:": "🕗",
":clock830:": "🕣",
":clock9:": "🕘",
":clock930:": "🕤",
":heavy_dollar_sign:": "💲",
":copyright:": "©️",
":registered:": "®️",
":tm:": "™️",
":x:": "",
":heavy_exclamation_mark:": "❗️",
":bangbang:": "‼️",
":interrobang:": "⁉️",
":o:": "⭕️",
":heavy_multiplication_x:": "✖️",
":heavy_plus_sign:": "",
":heavy_minus_sign:": "",
":heavy_division_sign:": "",
":white_flower:": "💮",
":100:": "💯",
":heavy_check_mark:": "✔️",
":ballot_box_with_check:": "☑️",
":radio_button:": "🔘",
":link:": "🔗",
":curly_loop:": "",
":wavy_dash:": "〰️",
":part_alternation_mark:": "〽️",
":trident:": "🔱",
":white_check_mark:": "",
":black_square_button:": "🔲",
":white_square_button:": "🔳",
":black_circle:": "⚫️",
":white_circle:": "⚪️",
":red_circle:": "🔴",
":large_blue_circle:": "🔵",
":large_blue_diamond:": "🔷",
":large_orange_diamond:": "🔶",
":small_blue_diamond:": "🔹",
":small_orange_diamond:": "🔸",
":small_red_triangle:": "🔺",
":small_red_triangle_down:": "🔻",
":black_square:": "⬛️",
":couplekiss:": "👩‍❤️‍💋‍👨",
":zero:": "0",
":one:": "1",
":two:": "2",
":three:": "3",
":four:": "4",
":five:": "5",
":six:": "6",
":seven:": "7",
":eight:": "8",
":nine:": "9",
]
let GithubEmojiRegex: NSRegularExpression = {
let pattern = "(" + GithubEmojiMap.keys.joined(separator: "|") + ")"
private let GithubEmojiRegex: NSRegularExpression = {
let pattern = "(" + GithubEmojis.map({ $0.regexList }).joined(separator: "|") + ")"
return try! NSRegularExpression(pattern: pattern, options: [])
}()
struct GitHubEmoji {
let emoji: String
let names: [String]
var regexList: String {
return names.map({ ":\($0):" }).joined(separator: "|")
}
init?(dict: [String: Any]) {
guard let emoji = dict["emoji"] as? String,
let aliases = dict["aliases"] as? [String],
let tags = dict["tags"] as? [String]
else { return nil }
self.emoji = emoji
self.names = aliases + tags
}
}
var GithubEmojis = [GitHubEmoji]()
func loadGitHubEmojis() {
guard let url = Bundle.main.url(forResource: "emoji", withExtension: "json"),
let data = try? Data(contentsOf: url),
let json = try? JSONSerialization.jsonObject(with: data, options: .init(rawValue: 0)),
let dict = json as? [[String: Any]] else { return }
GithubEmojis = dict.flatMap { GitHubEmoji(dict: $0) }
}

View File

@@ -347,6 +347,7 @@
98835BD01F1A14EC005BA24F /* SettingsVersionInfoSectionController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98835BCF1F1A14EC005BA24F /* SettingsVersionInfoSectionController.swift */; };
98835BD21F1A158D005BA24F /* LabelCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98835BD11F1A158D005BA24F /* LabelCell.swift */; };
98835BD41F1A17EE005BA24F /* Bundle+Version.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98835BD31F1A17EE005BA24F /* Bundle+Version.swift */; };
98F0A0431F27BC4B0062A2CA /* emoji.json in Resources */ = {isa = PBXBuildFile; fileRef = 98F0A0421F27BC4B0062A2CA /* emoji.json */; };
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
@@ -604,6 +605,7 @@
98835BCF1F1A14EC005BA24F /* SettingsVersionInfoSectionController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SettingsVersionInfoSectionController.swift; sourceTree = "<group>"; };
98835BD11F1A158D005BA24F /* LabelCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LabelCell.swift; sourceTree = "<group>"; };
98835BD31F1A17EE005BA24F /* Bundle+Version.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Bundle+Version.swift"; sourceTree = "<group>"; };
98F0A0421F27BC4B0062A2CA /* emoji.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = emoji.json; sourceTree = "<group>"; };
CB06D68438D845EC6D23788D /* Pods_FreetimeTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_FreetimeTests.framework; sourceTree = BUILT_PRODUCTS_DIR; };
E7BD38A4C4C37947FA1FBFB5 /* Pods-Freetime.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Freetime.debug.xcconfig"; path = "Pods/Target Support Files/Pods-Freetime/Pods-Freetime.debug.xcconfig"; sourceTree = "<group>"; };
FDDE84B781D3A44BF57394BE /* Pods-FreetimeTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-FreetimeTests.release.xcconfig"; path = "Pods/Target Support Files/Pods-FreetimeTests/Pods-FreetimeTests.release.xcconfig"; sourceTree = "<group>"; };
@@ -1127,6 +1129,7 @@
297AE86D1EC0D5C200B44A1F /* Resources */ = {
isa = PBXGroup;
children = (
98F0A0421F27BC4B0062A2CA /* emoji.json */,
297AE86E1EC0D5C200B44A1F /* Assets.xcassets */,
29FB94391EE767420016E6D4 /* Freetime-Bridging-Header.h */,
297AE8731EC0D5C200B44A1F /* Info.plist */,
@@ -1342,6 +1345,7 @@
files = (
29416BF91F1138B700D03E1A /* OauthLogin.storyboard in Resources */,
297AE8821EC0D5C200B44A1F /* LaunchScreen.storyboard in Resources */,
98F0A0431F27BC4B0062A2CA /* emoji.json in Resources */,
297AE8811EC0D5C200B44A1F /* Assets.xcassets in Resources */,
29A195071EC7601000C3E289 /* Localizable.stringsdict in Resources */,
984D9CA91F212ADF00ECEA7F /* Settings.bundle in Resources */,

15222
Resources/emoji.json Normal file

File diff suppressed because it is too large Load Diff