diff --git a/src/main/scala/gitbucket/core/util/EmojiConverter.scala b/src/main/scala/gitbucket/core/util/EmojiConverter.scala deleted file mode 100644 index f32ea9d..0000000 --- a/src/main/scala/gitbucket/core/util/EmojiConverter.scala +++ /dev/null @@ -1,905 +0,0 @@ -package gitbucket.core.util - -/** - * Converts an Emoji like :smiley: to its related image - */ -trait EmojiConverter { - - private val emojis = Set( - "+1", - "-1", - "100", - "109", - "1234", - "8ball", - "a", - "ab", - "abc", - "abcd", - "accept", - "aerial_tramway", - "airplane", - "alarm_clock", - "alien", - "ambulance", - "anchor", - "angel", - "anger", - "angry", - "anguished", - "ant", - "apple", - "aquarius", - "aries", - "arrow_backward", - "arrow_double_down", - "arrow_double_up", - "arrow_down", - "arrow_down_small", - "arrow_forward", - "arrow_heading_down", - "arrow_heading_up", - "arrow_left", - "arrow_lower_left", - "arrow_lower_right", - "arrow_right", - "arrow_right_hook", - "arrow_up", - "arrow_up_down", - "arrow_up_small", - "arrow_upper_left", - "arrow_upper_right", - "arrows_clockwise", - "arrows_counterclockwise", - "art", - "articulated_lorry", - "astonished", - "atm", - "b", - "baby", - "baby_bottle", - "baby_chick", - "baby_symbol", - "baggage_claim", - "balloon", - "ballot_box_with_check", - "bamboo", - "banana", - "bangbang", - "bank", - "bar_chart", - "barber", - "baseball", - "basketball", - "bath", - "bathtub", - "battery", - "bear", - "beer", - "beers", - "beetle", - "beginner", - "bell", - "bento", - "bicyclist", - "bike", - "bikini", - "bird", - "birthday", - "black_circle", - "black_joker", - "black_nib", - "black_square", - "black_square_button", - "blossom", - "blowfish", - "blue_book", - "blue_car", - "blue_heart", - "blush", - "blush", - "boar", - "boat", - "bomb", - "book", - "bookmark", - "bookmark_tabs", - "books", - "boom", - "boot", - "bouquet", - "bow", - "bowling", - "bowtie", - "boy", - "bread", - "bride_with_veil", - "bridge_at_night", - "briefcase", - "broken_heart", - "broken_heart", - "bug", - "bulb", - "bullettrain_front", - "bullettrain_side", - "bus", - "busstop", - "bust_in_silhouette", - "busts_in_silhouette", - "cactus", - "cake", - "calendar", - "calling", - "camel", - "camera", - "cancer", - "candy", - "capital_abcd", - "capricorn", - "car", - "card_index", - "carousel_horse", - "cat2", - "cat", - "cd", - "chart", - "chart_with_downwards_trend", - "chart_with_upwards_trend", - "checkered_flag", - "cherries", - "cherry_blossom", - "chestnut", - "chicken", - "children_crossing", - "chocolate_bar", - "christmas_tree", - "church", - "cinema", - "circus_tent", - "city_sunrise", - "city_sunset", - "cl", - "clap", - "clapper", - "clipboard", - "clock1030", - "clock10", - "clock1130", - "clock11", - "clock1230", - "clock12", - "clock130", - "clock1", - "clock230", - "clock2", - "clock330", - "clock3", - "clock430", - "clock4", - "clock530", - "clock5", - "clock630", - "clock6", - "clock730", - "clock7", - "clock830", - "clock8", - "clock930", - "clock9", - "closed_book", - "closed_lock_with_key", - "closed_umbrella", - "cloud", - "clubs", - "cn", - "cocktail", - "coffee", - "cold_sweat", - "collision", - "computer", - "confetti_ball", - "confounded", - "confounded", - "confused", - "congratulations", - "construction", - "construction_worker", - "convenience_store", - "cookie", - "cool", - "cop", - "copyright", - "corn", - "couple", - "couple_with_heart", - "couplekiss", - "cow2", - "cow", - "credit_card", - "crocodile", - "crossed_flags", - "crown", - "cry", - "crying_cat_face", - "crystal_ball", - "cupid", - "curly_loop", - "currency_exchange", - "curry", - "custard", - "customs", - "cyclone", - "dancer", - "dancers", - "dango", - "dart", - "dash", - "date", - "de", - "deciduous_tree", - "department_store", - "diamond_shape_with_a_dot_inside", - "diamonds", - "disappointed", - "disappointed", - "dizzy", - "dizzy_face", - "do_not_litter", - "dog2", - "dog", - "dollar", - "dolls", - "dolphin", - "door", - "doughnut", - "dragon", - "dragon_face", - "dress", - "dromedary_camel", - "droplet", - "dvd", - "e-mail", - "ear", - "ear_of_rice", - "earth_africa", - "earth_americas", - "earth_asia", - "egg", - "eggplant", - "eight", - "eight_pointed_black_star", - "eight_spoked_asterisk", - "electric_plug", - "elephant", - "email", - "end", - "envelope", - "es", - "euro", - "european_castle", - "european_post_office", - "evergreen_tree", - "exclamation", - "expressionless", - "eyeglasses", - "eyes", - "facepunch", - "factory", - "fallen_leaf", - "family", - "fast_forward", - "fax", - "fearful", - "feelsgood", - "feet", - "ferris_wheel", - "file_folder", - "finnadie", - "fire", - "fire_engine", - "fireworks", - "first_quarter_moon", - "first_quarter_moon_with_face", - "fish", - "fish_cake", - "fishing_pole_and_fish", - "fist", - "five", - "flags", - "flashlight", - "floppy_disk", - "flower_playing_cards", - "flushed", - "flushed", - "foggy", - "football", - "fork_and_knife", - "fountain", - "four", - "four_leaf_clover", - "fr", - "free", - "fried_shrimp", - "fries", - "frog", - "frowning", - "fuelpump", - "full_moon", - "full_moon_with_face", - "game_die", - "gb", - "gem", - "gemini", - "ghost", - "gift", - "gift_heart", - "girl", - "globe_with_meridians", - "goat", - "goberserk", - "godmode", - "golf", - "grapes", - "green_apple", - "green_book", - "green_heart", - "grey_exclamation", - "grey_question", - "grimacing", - "grin", - "grinning", - "guardsman", - "guitar", - "gun", - "haircut", - "hamburger", - "hammer", - "hamster", - "hand", - "handbag", - "hankey", - "hash", - "hatched_chick", - "hatching_chick", - "headphones", - "hear_no_evil", - "heart", - "heart", - "heart_decoration", - "heart_eyes", - "heart_eyes_cat", - "heartbeat", - "heartpulse", - "hearts", - "heavy_check_mark", - "heavy_division_sign", - "heavy_dollar_sign", - "heavy_exclamation_mark", - "heavy_minus_sign", - "heavy_multiplication_x", - "heavy_plus_sign", - "helicopter", - "herb", - "hibiscus", - "high_brightness", - "high_heel", - "hocho", - "honey_pot", - "honeybee", - "horse", - "horse_racing", - "hospital", - "hotel", - "hotsprings", - "hourglass", - "hourglass_flowing_sand", - "house", - "house_with_garden", - "hurtrealbad", - "hushed", - "ice_cream", - "icecream", - "id", - "ideograph_advantage", - "imp", - "inbox_tray", - "incoming_envelope", - "information_desk_person", - "information_source", - "innocent", - "interrobang", - "iphone", - "it", - "izakaya_lantern", - "jack_o_lantern", - "japan", - "japanese_castle", - "japanese_goblin", - "japanese_ogre", - "jeans", - "joy", - "joy_cat", - "jp", - "key", - "keycap_ten", - "kimono", - "kiss", - "kissing", - "kissing_cat", - "kissing_closed_eyes", - "kissing_heart", - "kissing_heart", - "kissing_smiling_eyes", - "koala", - "koko", - "kr", - "large_blue_circle", - "large_blue_diamond", - "large_orange_diamond", - "last_quarter_moon", - "last_quarter_moon_with_face", - "laughing", - "leaves", - "ledger", - "left_luggage", - "left_right_arrow", - "leftwards_arrow_with_hook", - "lemon", - "leo", - "leopard", - "libra", - "light_rail", - "link", - "lips", - "lipstick", - "lock", - "lock_with_ink_pen", - "lollipop", - "loop", - "loudspeaker", - "love_hotel", - "love_letter", - "low_brightness", - "m", - "mag", - "mag_right", - "mahjong", - "mailbox", - "mailbox_closed", - "mailbox_with_mail", - "mailbox_with_no_mail", - "man", - "man_with_gua_pi_mao", - "man_with_turban", - "mans_shoe", - "maple_leaf", - "mask", - "mask", - "massage", - "meat_on_bone", - "mega", - "melon", - "memo", - "mens", - "metal", - "metro", - "microphone", - "microscope", - "milky_way", - "minibus", - "minidisc", - "mobile_phone_off", - "money_with_wings", - "moneybag", - "monkey", - "monkey_face", - "monorail", - "moon", - "mortar_board", - "mount_fuji", - "mountain_bicyclist", - "mountain_cableway", - "mountain_railway", - "mouse2", - "mouse", - "movie_camera", - "moyai", - "muscle", - "mushroom", - "musical_keyboard", - "musical_note", - "musical_score", - "mute", - "nail_care", - "name_badge", - "neckbeard", - "necktie", - "negative_squared_cross_mark", - "neutral_face", - "new", - "new_moon", - "new_moon_with_face", - "newspaper", - "ng", - "nine", - "no_bell", - "no_bicycles", - "no_entry", - "no_entry_sign", - "no_good", - "no_mobile_phones", - "no_mouth", - "no_pedestrians", - "no_smoking", - "non-potable_water", - "nose", - "notebook", - "notebook_with_decorative_cover", - "notes", - "nut_and_bolt", - "o2", - "o", - "ocean", - "octocat", - "octopus", - "oden", - "office", - "ok", - "ok_hand", - "ok_woman", - "older_man", - "older_woman", - "on", - "oncoming_automobile", - "oncoming_bus", - "oncoming_police_car", - "oncoming_taxi", - "one", - "open_file_folder", - "open_hands", - "open_mouth", - "ophiuchus", - "orange_book", - "outbox_tray", - "ox", - "page_facing_up", - "page_with_curl", - "pager", - "palm_tree", - "panda_face", - "paperclip", - "parking", - "part_alternation_mark", - "partly_sunny", - "passport_control", - "paw_prints", - "peach", - "pear", - "pencil2", - "pencil", - "penguin", - "pensive", - "pensive", - "performing_arts", - "persevere", - "person_frowning", - "person_with_blond_hair", - "person_with_pouting_face", - "phone", - "pig2", - "pig", - "pig_nose", - "pill", - "pineapple", - "pisces", - "pizza", - "point_down", - "point_left", - "point_right", - "point_up", - "point_up_2", - "police_car", - "poodle", - "poop", - "post_office", - "postal_horn", - "postbox", - "potable_water", - "pouch", - "poultry_leg", - "pound", - "pouting_cat", - "pray", - "princess", - "punch", - "purple_heart", - "purse", - "pushpin", - "put_litter_in_its_place", - "question", - "rabbit2", - "rabbit", - "racehorse", - "radio", - "radio_button", - "rage1", - "rage2", - "rage3", - "rage4", - "rage", - "rage", - "railway_car", - "rainbow", - "raised_hand", - "raised_hands", - "ram", - "ramen", - "rat", - "recycle", - "red_car", - "red_circle", - "registered", - "relaxed", - "relaxed", - "relieved", - "repeat", - "repeat_one", - "restroom", - "revolving_hearts", - "rewind", - "ribbon", - "rice", - "rice_ball", - "rice_cracker", - "rice_scene", - "ring", - "rocket", - "roller_coaster", - "rooster", - "rose", - "rotating_light", - "round_pushpin", - "rowboat", - "ru", - "rugby_football", - "runner", - "running", - "running_shirt_with_sash", - "sa", - "sagittarius", - "sailboat", - "sake", - "sandal", - "santa", - "satellite", - "satisfied", - "saxophone", - "school", - "school_satchel", - "scissors", - "scorpius", - "scream", - "scream", - "scream_cat", - "scroll", - "seat", - "secret", - "see_no_evil", - "seedling", - "seven", - "shaved_ice", - "sheep", - "shell", - "ship", - "shipit", - "shirt", - "shit", - "shoe", - "shower", - "signal_strength", - "six", - "six_pointed_star", - "ski", - "skull", - "sleeping", - "sleepy", - "slot_machine", - "small_blue_diamond", - "small_orange_diamond", - "small_red_triangle", - "small_red_triangle_down", - "smile", - "smile_cat", - "smiley", - "smiley", - "smiley_cat", - "smiling_imp", - "smirk", - "smirk", - "smirk_cat", - "smoking", - "snail", - "snake", - "snowboarder", - "snowflake", - "snowman", - "sob", - "sob", - "soccer", - "soon", - "sos", - "sound", - "space_invader", - "spades", - "spaghetti", - "sparkler", - "sparkles", - "sparkling_heart", - "speak_no_evil", - "speaker", - "speech_balloon", - "speedboat", - "squirrel", - "star2", - "star", - "stars", - "station", - "statue_of_liberty", - "steam_locomotive", - "stew", - "straight_ruler", - "strawberry", - "stuck_out_tongue", - "stuck_out_tongue_closed_eyes", - "stuck_out_tongue_closed_eyes", - "stuck_out_tongue_winking_eye", - "stuck_out_tongue_winking_eye", - "sun_with_face", - "sunflower", - "sunglasses", - "sunny", - "sunrise", - "sunrise_over_mountains", - "surfer", - "sushi", - "suspect", - "suspension_railway", - "sweat", - "sweat_drops", - "sweat_smile", - "sweet_potato", - "swimmer", - "symbols", - "syringe", - "tada", - "tanabata_tree", - "tangerine", - "taurus", - "taxi", - "tea", - "telephone", - "telephone_receiver", - "telescope", - "tennis", - "tent", - "thought_balloon", - "three", - "thumbsdown", - "thumbsup", - "ticket", - "tiger2", - "tiger", - "tired_face", - "tm", - "toilet", - "tokyo_tower", - "tomato", - "tongue", - "top", - "tophat", - "tractor", - "traffic_light", - "train2", - "train", - "tram", - "triangular_flag_on_post", - "triangular_ruler", - "trident", - "triumph", - "trolleybus", - "trollface", - "trophy", - "tropical_drink", - "tropical_fish", - "truck", - "trumpet", - "tshirt", - "tulip", - "turtle", - "tv", - "twisted_rightwards_arrows", - "two", - "two_hearts", - "two_men_holding_hands", - "two_women_holding_hands", - "u5272", - "u5408", - "u55b6", - "u6307", - "u6708", - "u6709", - "u6e80", - "u7121", - "u7533", - "u7981", - "u7a7a", - "uk", - "umbrella", - "unamused", - "underage", - "unlock", - "up", - "us", - "v", - "vertical_traffic_light", - "vhs", - "vibration_mode", - "video_camera", - "video_game", - "violin", - "virgo", - "volcano", - "vs", - "walking", - "waning_crescent_moon", - "waning_gibbous_moon", - "warning", - "watch", - "water_buffalo", - "watermelon", - "wave", - "wavy_dash", - "waxing_crescent_moon", - "waxing_gibbous_moon", - "wc", - "weary", - "wedding", - "whale2", - "whale", - "wheelchair", - "white_check_mark", - "white_circle", - "white_flower", - "white_square", - "white_square_button", - "wind_chime", - "wine_glass", - "wink2", - "wink", - "wink", - "wolf", - "woman", - "womans_clothes", - "womans_hat", - "womens", - "worried", - "wrench", - "x", - "yellow_heart", - "yen", - "yum", - "zap", - "zero", - "zzz" - ) - - private val emojiPattern = """\:[a-z0-9_\-\+]+\:""".r - - protected def convertEmojis(text: String)(implicit context: gitbucket.core.controller.Context): String = - emojiPattern replaceAllIn(text, e => { - val emoji = e.group(0) replaceAll(":", "") - if (!emojis.contains(emoji)) s":$emoji:" - else s""":$emoji:""" - }) - -} diff --git a/src/main/scala/gitbucket/core/util/EmojiUtil.scala b/src/main/scala/gitbucket/core/util/EmojiUtil.scala new file mode 100644 index 0000000..925fc20 --- /dev/null +++ b/src/main/scala/gitbucket/core/util/EmojiUtil.scala @@ -0,0 +1,905 @@ +package gitbucket.core.util + +/** + * Converts an Emoji like :smiley: to its related image + */ +object EmojiUtil { + + private val emojis = Set( + "+1", + "-1", + "100", + "109", + "1234", + "8ball", + "a", + "ab", + "abc", + "abcd", + "accept", + "aerial_tramway", + "airplane", + "alarm_clock", + "alien", + "ambulance", + "anchor", + "angel", + "anger", + "angry", + "anguished", + "ant", + "apple", + "aquarius", + "aries", + "arrow_backward", + "arrow_double_down", + "arrow_double_up", + "arrow_down", + "arrow_down_small", + "arrow_forward", + "arrow_heading_down", + "arrow_heading_up", + "arrow_left", + "arrow_lower_left", + "arrow_lower_right", + "arrow_right", + "arrow_right_hook", + "arrow_up", + "arrow_up_down", + "arrow_up_small", + "arrow_upper_left", + "arrow_upper_right", + "arrows_clockwise", + "arrows_counterclockwise", + "art", + "articulated_lorry", + "astonished", + "atm", + "b", + "baby", + "baby_bottle", + "baby_chick", + "baby_symbol", + "baggage_claim", + "balloon", + "ballot_box_with_check", + "bamboo", + "banana", + "bangbang", + "bank", + "bar_chart", + "barber", + "baseball", + "basketball", + "bath", + "bathtub", + "battery", + "bear", + "beer", + "beers", + "beetle", + "beginner", + "bell", + "bento", + "bicyclist", + "bike", + "bikini", + "bird", + "birthday", + "black_circle", + "black_joker", + "black_nib", + "black_square", + "black_square_button", + "blossom", + "blowfish", + "blue_book", + "blue_car", + "blue_heart", + "blush", + "blush", + "boar", + "boat", + "bomb", + "book", + "bookmark", + "bookmark_tabs", + "books", + "boom", + "boot", + "bouquet", + "bow", + "bowling", + "bowtie", + "boy", + "bread", + "bride_with_veil", + "bridge_at_night", + "briefcase", + "broken_heart", + "broken_heart", + "bug", + "bulb", + "bullettrain_front", + "bullettrain_side", + "bus", + "busstop", + "bust_in_silhouette", + "busts_in_silhouette", + "cactus", + "cake", + "calendar", + "calling", + "camel", + "camera", + "cancer", + "candy", + "capital_abcd", + "capricorn", + "car", + "card_index", + "carousel_horse", + "cat2", + "cat", + "cd", + "chart", + "chart_with_downwards_trend", + "chart_with_upwards_trend", + "checkered_flag", + "cherries", + "cherry_blossom", + "chestnut", + "chicken", + "children_crossing", + "chocolate_bar", + "christmas_tree", + "church", + "cinema", + "circus_tent", + "city_sunrise", + "city_sunset", + "cl", + "clap", + "clapper", + "clipboard", + "clock1030", + "clock10", + "clock1130", + "clock11", + "clock1230", + "clock12", + "clock130", + "clock1", + "clock230", + "clock2", + "clock330", + "clock3", + "clock430", + "clock4", + "clock530", + "clock5", + "clock630", + "clock6", + "clock730", + "clock7", + "clock830", + "clock8", + "clock930", + "clock9", + "closed_book", + "closed_lock_with_key", + "closed_umbrella", + "cloud", + "clubs", + "cn", + "cocktail", + "coffee", + "cold_sweat", + "collision", + "computer", + "confetti_ball", + "confounded", + "confounded", + "confused", + "congratulations", + "construction", + "construction_worker", + "convenience_store", + "cookie", + "cool", + "cop", + "copyright", + "corn", + "couple", + "couple_with_heart", + "couplekiss", + "cow2", + "cow", + "credit_card", + "crocodile", + "crossed_flags", + "crown", + "cry", + "crying_cat_face", + "crystal_ball", + "cupid", + "curly_loop", + "currency_exchange", + "curry", + "custard", + "customs", + "cyclone", + "dancer", + "dancers", + "dango", + "dart", + "dash", + "date", + "de", + "deciduous_tree", + "department_store", + "diamond_shape_with_a_dot_inside", + "diamonds", + "disappointed", + "disappointed", + "dizzy", + "dizzy_face", + "do_not_litter", + "dog2", + "dog", + "dollar", + "dolls", + "dolphin", + "door", + "doughnut", + "dragon", + "dragon_face", + "dress", + "dromedary_camel", + "droplet", + "dvd", + "e-mail", + "ear", + "ear_of_rice", + "earth_africa", + "earth_americas", + "earth_asia", + "egg", + "eggplant", + "eight", + "eight_pointed_black_star", + "eight_spoked_asterisk", + "electric_plug", + "elephant", + "email", + "end", + "envelope", + "es", + "euro", + "european_castle", + "european_post_office", + "evergreen_tree", + "exclamation", + "expressionless", + "eyeglasses", + "eyes", + "facepunch", + "factory", + "fallen_leaf", + "family", + "fast_forward", + "fax", + "fearful", + "feelsgood", + "feet", + "ferris_wheel", + "file_folder", + "finnadie", + "fire", + "fire_engine", + "fireworks", + "first_quarter_moon", + "first_quarter_moon_with_face", + "fish", + "fish_cake", + "fishing_pole_and_fish", + "fist", + "five", + "flags", + "flashlight", + "floppy_disk", + "flower_playing_cards", + "flushed", + "flushed", + "foggy", + "football", + "fork_and_knife", + "fountain", + "four", + "four_leaf_clover", + "fr", + "free", + "fried_shrimp", + "fries", + "frog", + "frowning", + "fuelpump", + "full_moon", + "full_moon_with_face", + "game_die", + "gb", + "gem", + "gemini", + "ghost", + "gift", + "gift_heart", + "girl", + "globe_with_meridians", + "goat", + "goberserk", + "godmode", + "golf", + "grapes", + "green_apple", + "green_book", + "green_heart", + "grey_exclamation", + "grey_question", + "grimacing", + "grin", + "grinning", + "guardsman", + "guitar", + "gun", + "haircut", + "hamburger", + "hammer", + "hamster", + "hand", + "handbag", + "hankey", + "hash", + "hatched_chick", + "hatching_chick", + "headphones", + "hear_no_evil", + "heart", + "heart", + "heart_decoration", + "heart_eyes", + "heart_eyes_cat", + "heartbeat", + "heartpulse", + "hearts", + "heavy_check_mark", + "heavy_division_sign", + "heavy_dollar_sign", + "heavy_exclamation_mark", + "heavy_minus_sign", + "heavy_multiplication_x", + "heavy_plus_sign", + "helicopter", + "herb", + "hibiscus", + "high_brightness", + "high_heel", + "hocho", + "honey_pot", + "honeybee", + "horse", + "horse_racing", + "hospital", + "hotel", + "hotsprings", + "hourglass", + "hourglass_flowing_sand", + "house", + "house_with_garden", + "hurtrealbad", + "hushed", + "ice_cream", + "icecream", + "id", + "ideograph_advantage", + "imp", + "inbox_tray", + "incoming_envelope", + "information_desk_person", + "information_source", + "innocent", + "interrobang", + "iphone", + "it", + "izakaya_lantern", + "jack_o_lantern", + "japan", + "japanese_castle", + "japanese_goblin", + "japanese_ogre", + "jeans", + "joy", + "joy_cat", + "jp", + "key", + "keycap_ten", + "kimono", + "kiss", + "kissing", + "kissing_cat", + "kissing_closed_eyes", + "kissing_heart", + "kissing_heart", + "kissing_smiling_eyes", + "koala", + "koko", + "kr", + "large_blue_circle", + "large_blue_diamond", + "large_orange_diamond", + "last_quarter_moon", + "last_quarter_moon_with_face", + "laughing", + "leaves", + "ledger", + "left_luggage", + "left_right_arrow", + "leftwards_arrow_with_hook", + "lemon", + "leo", + "leopard", + "libra", + "light_rail", + "link", + "lips", + "lipstick", + "lock", + "lock_with_ink_pen", + "lollipop", + "loop", + "loudspeaker", + "love_hotel", + "love_letter", + "low_brightness", + "m", + "mag", + "mag_right", + "mahjong", + "mailbox", + "mailbox_closed", + "mailbox_with_mail", + "mailbox_with_no_mail", + "man", + "man_with_gua_pi_mao", + "man_with_turban", + "mans_shoe", + "maple_leaf", + "mask", + "mask", + "massage", + "meat_on_bone", + "mega", + "melon", + "memo", + "mens", + "metal", + "metro", + "microphone", + "microscope", + "milky_way", + "minibus", + "minidisc", + "mobile_phone_off", + "money_with_wings", + "moneybag", + "monkey", + "monkey_face", + "monorail", + "moon", + "mortar_board", + "mount_fuji", + "mountain_bicyclist", + "mountain_cableway", + "mountain_railway", + "mouse2", + "mouse", + "movie_camera", + "moyai", + "muscle", + "mushroom", + "musical_keyboard", + "musical_note", + "musical_score", + "mute", + "nail_care", + "name_badge", + "neckbeard", + "necktie", + "negative_squared_cross_mark", + "neutral_face", + "new", + "new_moon", + "new_moon_with_face", + "newspaper", + "ng", + "nine", + "no_bell", + "no_bicycles", + "no_entry", + "no_entry_sign", + "no_good", + "no_mobile_phones", + "no_mouth", + "no_pedestrians", + "no_smoking", + "non-potable_water", + "nose", + "notebook", + "notebook_with_decorative_cover", + "notes", + "nut_and_bolt", + "o2", + "o", + "ocean", + "octocat", + "octopus", + "oden", + "office", + "ok", + "ok_hand", + "ok_woman", + "older_man", + "older_woman", + "on", + "oncoming_automobile", + "oncoming_bus", + "oncoming_police_car", + "oncoming_taxi", + "one", + "open_file_folder", + "open_hands", + "open_mouth", + "ophiuchus", + "orange_book", + "outbox_tray", + "ox", + "page_facing_up", + "page_with_curl", + "pager", + "palm_tree", + "panda_face", + "paperclip", + "parking", + "part_alternation_mark", + "partly_sunny", + "passport_control", + "paw_prints", + "peach", + "pear", + "pencil2", + "pencil", + "penguin", + "pensive", + "pensive", + "performing_arts", + "persevere", + "person_frowning", + "person_with_blond_hair", + "person_with_pouting_face", + "phone", + "pig2", + "pig", + "pig_nose", + "pill", + "pineapple", + "pisces", + "pizza", + "point_down", + "point_left", + "point_right", + "point_up", + "point_up_2", + "police_car", + "poodle", + "poop", + "post_office", + "postal_horn", + "postbox", + "potable_water", + "pouch", + "poultry_leg", + "pound", + "pouting_cat", + "pray", + "princess", + "punch", + "purple_heart", + "purse", + "pushpin", + "put_litter_in_its_place", + "question", + "rabbit2", + "rabbit", + "racehorse", + "radio", + "radio_button", + "rage1", + "rage2", + "rage3", + "rage4", + "rage", + "rage", + "railway_car", + "rainbow", + "raised_hand", + "raised_hands", + "ram", + "ramen", + "rat", + "recycle", + "red_car", + "red_circle", + "registered", + "relaxed", + "relaxed", + "relieved", + "repeat", + "repeat_one", + "restroom", + "revolving_hearts", + "rewind", + "ribbon", + "rice", + "rice_ball", + "rice_cracker", + "rice_scene", + "ring", + "rocket", + "roller_coaster", + "rooster", + "rose", + "rotating_light", + "round_pushpin", + "rowboat", + "ru", + "rugby_football", + "runner", + "running", + "running_shirt_with_sash", + "sa", + "sagittarius", + "sailboat", + "sake", + "sandal", + "santa", + "satellite", + "satisfied", + "saxophone", + "school", + "school_satchel", + "scissors", + "scorpius", + "scream", + "scream", + "scream_cat", + "scroll", + "seat", + "secret", + "see_no_evil", + "seedling", + "seven", + "shaved_ice", + "sheep", + "shell", + "ship", + "shipit", + "shirt", + "shit", + "shoe", + "shower", + "signal_strength", + "six", + "six_pointed_star", + "ski", + "skull", + "sleeping", + "sleepy", + "slot_machine", + "small_blue_diamond", + "small_orange_diamond", + "small_red_triangle", + "small_red_triangle_down", + "smile", + "smile_cat", + "smiley", + "smiley", + "smiley_cat", + "smiling_imp", + "smirk", + "smirk", + "smirk_cat", + "smoking", + "snail", + "snake", + "snowboarder", + "snowflake", + "snowman", + "sob", + "sob", + "soccer", + "soon", + "sos", + "sound", + "space_invader", + "spades", + "spaghetti", + "sparkler", + "sparkles", + "sparkling_heart", + "speak_no_evil", + "speaker", + "speech_balloon", + "speedboat", + "squirrel", + "star2", + "star", + "stars", + "station", + "statue_of_liberty", + "steam_locomotive", + "stew", + "straight_ruler", + "strawberry", + "stuck_out_tongue", + "stuck_out_tongue_closed_eyes", + "stuck_out_tongue_closed_eyes", + "stuck_out_tongue_winking_eye", + "stuck_out_tongue_winking_eye", + "sun_with_face", + "sunflower", + "sunglasses", + "sunny", + "sunrise", + "sunrise_over_mountains", + "surfer", + "sushi", + "suspect", + "suspension_railway", + "sweat", + "sweat_drops", + "sweat_smile", + "sweet_potato", + "swimmer", + "symbols", + "syringe", + "tada", + "tanabata_tree", + "tangerine", + "taurus", + "taxi", + "tea", + "telephone", + "telephone_receiver", + "telescope", + "tennis", + "tent", + "thought_balloon", + "three", + "thumbsdown", + "thumbsup", + "ticket", + "tiger2", + "tiger", + "tired_face", + "tm", + "toilet", + "tokyo_tower", + "tomato", + "tongue", + "top", + "tophat", + "tractor", + "traffic_light", + "train2", + "train", + "tram", + "triangular_flag_on_post", + "triangular_ruler", + "trident", + "triumph", + "trolleybus", + "trollface", + "trophy", + "tropical_drink", + "tropical_fish", + "truck", + "trumpet", + "tshirt", + "tulip", + "turtle", + "tv", + "twisted_rightwards_arrows", + "two", + "two_hearts", + "two_men_holding_hands", + "two_women_holding_hands", + "u5272", + "u5408", + "u55b6", + "u6307", + "u6708", + "u6709", + "u6e80", + "u7121", + "u7533", + "u7981", + "u7a7a", + "uk", + "umbrella", + "unamused", + "underage", + "unlock", + "up", + "us", + "v", + "vertical_traffic_light", + "vhs", + "vibration_mode", + "video_camera", + "video_game", + "violin", + "virgo", + "volcano", + "vs", + "walking", + "waning_crescent_moon", + "waning_gibbous_moon", + "warning", + "watch", + "water_buffalo", + "watermelon", + "wave", + "wavy_dash", + "waxing_crescent_moon", + "waxing_gibbous_moon", + "wc", + "weary", + "wedding", + "whale2", + "whale", + "wheelchair", + "white_check_mark", + "white_circle", + "white_flower", + "white_square", + "white_square_button", + "wind_chime", + "wine_glass", + "wink2", + "wink", + "wink", + "wolf", + "woman", + "womans_clothes", + "womans_hat", + "womens", + "worried", + "wrench", + "x", + "yellow_heart", + "yen", + "yum", + "zap", + "zero", + "zzz" + ) + + private val emojiPattern = """\:[a-z0-9_\-\+]+\:""".r + + def convertEmojis(text: String)(implicit context: gitbucket.core.controller.Context): String = + emojiPattern replaceAllIn(text, e => { + val emoji = e.group(0) replaceAll(":", "") + if (!emojis.contains(emoji)) s":$emoji:" + else s""":$emoji:""" + }) + +} diff --git a/src/main/scala/gitbucket/core/view/Markdown.scala b/src/main/scala/gitbucket/core/view/Markdown.scala index d3e27fb..7a0b4b7 100644 --- a/src/main/scala/gitbucket/core/view/Markdown.scala +++ b/src/main/scala/gitbucket/core/view/Markdown.scala @@ -6,7 +6,7 @@ import gitbucket.core.controller.Context import gitbucket.core.service.{RepositoryService, RequestCache} -import gitbucket.core.util.{EmojiConverter, StringUtil} +import gitbucket.core.util.{EmojiUtil, StringUtil} import io.github.gitbucket.markedj._ import io.github.gitbucket.markedj.Utils._ @@ -58,7 +58,7 @@ enableTaskList: Boolean, hasWritePermission: Boolean, pages: List[String]) - (implicit val context: Context) extends Renderer(options) with LinkConverter with EmojiConverter with RequestCache { + (implicit val context: Context) extends Renderer(options) with LinkConverter with RequestCache { override def heading(text: String, level: Int, raw: String): String = { val id = generateAnchorName(text) @@ -114,7 +114,7 @@ val t2 = if(enableTaskList) convertCheckBox(t1, hasWritePermission) else t1 // convert emoji to image - val t3 = convertEmojis(t2) + val t3 = EmojiUtil.convertEmojis(t2) t3 }