Moving emoji to an extension
parent
4bae101c83
commit
db91acb065
|
@ -9,6 +9,7 @@ from . import semi_sane_lists
|
||||||
from . import spaced_link
|
from . import spaced_link
|
||||||
from . import strikethrough
|
from . import strikethrough
|
||||||
from . import wikilinks
|
from . import wikilinks
|
||||||
|
from . import emojify
|
||||||
|
|
||||||
AutolinkExtension = autolink.AutolinkExtension
|
AutolinkExtension = autolink.AutolinkExtension
|
||||||
AutomailExtension = automail.AutomailExtension
|
AutomailExtension = automail.AutomailExtension
|
||||||
|
@ -17,3 +18,4 @@ SemiSaneListExtension = semi_sane_lists.SemiSaneListExtension
|
||||||
SpacedLinkExtension = spaced_link.SpacedLinkExtension
|
SpacedLinkExtension = spaced_link.SpacedLinkExtension
|
||||||
StrikethroughExtension = strikethrough.StrikethroughExtension
|
StrikethroughExtension = strikethrough.StrikethroughExtension
|
||||||
WikiLinkExtension = wikilinks.WikiLinkExtension
|
WikiLinkExtension = wikilinks.WikiLinkExtension
|
||||||
|
EmojifyExtension = emojify.EmojifyExtension
|
||||||
|
|
|
@ -0,0 +1,184 @@
|
||||||
|
#-*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
# Tested on Markdown 2.3.1
|
||||||
|
#
|
||||||
|
# Copyright (c) 2014, Esteban Castro Borsani
|
||||||
|
# The MIT License (MIT)
|
||||||
|
#
|
||||||
|
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
# of this software and associated documentation files (the "Software"), to deal
|
||||||
|
# in the Software without restriction, including without limitation the rights
|
||||||
|
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
# copies of the Software, and to permit persons to whom the Software is
|
||||||
|
# furnished to do so, subject to the following conditions:
|
||||||
|
#
|
||||||
|
# The above copyright notice and this permission notice shall be included in
|
||||||
|
# all copies or substantial portions of the Software.
|
||||||
|
#
|
||||||
|
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
# THE SOFTWARE.
|
||||||
|
|
||||||
|
|
||||||
|
import re
|
||||||
|
import os
|
||||||
|
|
||||||
|
from markdown.extensions import Extension
|
||||||
|
from markdown.preprocessors import Preprocessor
|
||||||
|
|
||||||
|
|
||||||
|
# Grab the emojis (+800) here: https://github.com/arvida/emoji-cheat-sheet.com
|
||||||
|
# This **crazy long** list was generated by walking through the emojis.png
|
||||||
|
emojis_path = "http://localhost:8000/static/img/emojis/"
|
||||||
|
emojis_set = {
|
||||||
|
"+1", "-1", "100", "1234", "8ball", "a", "ab", "abc", "abcd", "accept", "aerial_tramway", "airplane",
|
||||||
|
"alarm_clock", "alien", "ambulance", "anchor", "angel", "anger", "angry", "anguished", "ant", "apple",
|
||||||
|
"aquarius", "aries", "arrows_clockwise", "arrows_counterclockwise", "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_upper_left", "arrow_upper_right", "arrow_up_down", "arrow_up_small", "art", "articulated_lorry",
|
||||||
|
"astonished", "atm", "b", "baby", "baby_bottle", "baby_chick", "baby_symbol", "baggage_claim", "balloon",
|
||||||
|
"ballot_box_with_check", "bamboo", "banana", "bangbang", "bank", "barber", "bar_chart", "baseball", "basketball",
|
||||||
|
"bath", "bathtub", "battery", "bear", "bee", "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", "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", "bug", "bulb",
|
||||||
|
"bullettrain_front", "bullettrain_side", "bus", "busstop", "busts_in_silhouette", "bust_in_silhouette",
|
||||||
|
"cactus", "cake", "calendar", "calling", "camel", "camera", "cancer", "candy", "capital_abcd", "capricorn",
|
||||||
|
"car", "card_index", "carousel_horse", "cat", "cat2", "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", "clock1", "clock10", "clock1030", "clock11", "clock1130",
|
||||||
|
"clock12", "clock1230", "clock130", "clock2", "clock230", "clock3", "clock330", "clock4", "clock430", "clock5",
|
||||||
|
"clock530", "clock6", "clock630", "clock7", "clock730", "clock8", "clock830", "clock9", "clock930",
|
||||||
|
"closed_book", "closed_lock_with_key", "closed_umbrella", "cloud", "clubs", "cn", "cocktail", "coffee",
|
||||||
|
"cold_sweat", "collision", "computer", "confetti_ball", "confounded", "confused", "congratulations",
|
||||||
|
"construction", "construction_worker", "convenience_store", "cookie", "cool", "cop", "copyright", "corn",
|
||||||
|
"couple", "couplekiss", "couple_with_heart", "cow", "cow2", "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", "diamonds", "diamond_shape_with_a_dot_inside", "disappointed", "disappointed_relieved",
|
||||||
|
"dizzy", "dizzy_face", "dog", "dog2", "dollar", "dolls", "dolphin", "donut", "door", "doughnut",
|
||||||
|
"do_not_litter", "dragon", "dragon_face", "dress", "dromedary_camel", "droplet", "dvd", "e-mail", "ear",
|
||||||
|
"earth_africa", "earth_americas", "earth_asia", "ear_of_rice", "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", "fireworks", "fire_engine",
|
||||||
|
"first_quarter_moon", "first_quarter_moon_with_face", "fish", "fishing_pole_and_fish", "fish_cake", "fist",
|
||||||
|
"five", "flags", "flashlight", "floppy_disk", "flower_playing_cards", "flushed", "foggy", "football",
|
||||||
|
"fork_and_knife", "fountain", "four", "four_leaf_clover", "fr", "free", "fried_shrimp", "fries", "frog",
|
||||||
|
"frowning", "fu", "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", "heart", "heartbeat", "heartpulse",
|
||||||
|
"hearts", "heart_decoration", "heart_eyes", "heart_eyes_cat", "hear_no_evil", "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", "honeybee", "honey_pot", "horse", "horse_racing", "hospital", "hotel", "hotsprings",
|
||||||
|
"hourglass", "hourglass_flowing_sand", "house", "house_with_garden", "hurtrealbad", "hushed", "icecream",
|
||||||
|
"ice_cream", "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_face", "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", "leftwards_arrow_with_hook",
|
||||||
|
"left_luggage", "left_right_arrow", "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", "mans_shoe", "man_with_gua_pi_mao", "man_with_turban", "maple_leaf", "mask",
|
||||||
|
"massage", "meat_on_bone", "mega", "melon", "memo", "mens", "metal", "metro", "microphone", "microscope",
|
||||||
|
"milky_way", "minibus", "minidisc", "mobile_phone_off", "moneybag", "money_with_wings", "monkey", "monkey_face",
|
||||||
|
"monorail", "moon", "mortar_board", "mountain_bicyclist", "mountain_cableway", "mountain_railway",
|
||||||
|
"mount_fuji", "mouse", "mouse2", "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", "newspaper", "new_moon", "new_moon_with_face",
|
||||||
|
"ng", "nine", "non-potable_water", "nose", "notebook", "notebook_with_decorative_cover", "notes", "no_bell",
|
||||||
|
"no_bicycles", "no_entry", "no_entry_sign", "no_good", "no_mobile_phones", "no_mouth", "no_pedestrians",
|
||||||
|
"no_smoking", "nut_and_bolt", "o", "o2", "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", "pager", "page_facing_up", "page_with_curl", "palm_tree", "panda_face", "paperclip",
|
||||||
|
"parking", "partly_sunny", "part_alternation_mark", "passport_control", "paw_prints", "peach", "pear",
|
||||||
|
"pencil", "pencil2", "penguin", "pensive", "performing_arts", "persevere", "person_frowning",
|
||||||
|
"person_with_blond_hair", "person_with_pouting_face", "phone", "pig", "pig2", "pig_nose", "pill",
|
||||||
|
"pineapple", "pisces", "pizza", "plus1", "point_down", "point_left", "point_right", "point_up",
|
||||||
|
"point_up_2", "police_car", "poodle", "poop", "postal_horn", "postbox", "post_office", "potable_water",
|
||||||
|
"pouch", "poultry_leg", "pound", "pouting_cat", "pray", "princess", "punch", "purple_heart", "purse",
|
||||||
|
"pushpin", "put_litter_in_its_place", "question", "rabbit", "rabbit2", "racehorse", "radio", "radio_button",
|
||||||
|
"rage", "rage1", "rage2", "rage3", "rage4", "railway_car", "rainbow", "raised_hand", "raised_hands",
|
||||||
|
"raising_hand", "ram", "ramen", "rat", "recycle", "red_car", "red_circle", "registered", "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_cat", "scroll", "seat", "secret", "seedling",
|
||||||
|
"see_no_evil", "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",
|
||||||
|
"smiley", "smiley_cat", "smile_cat", "smiling_imp", "smirk", "smirk_cat", "smoking", "snail", "snake",
|
||||||
|
"snowboarder", "snowflake", "snowman", "sob", "soccer", "soon", "sos", "sound", "space_invader", "spades",
|
||||||
|
"spaghetti", "sparkler", "sparkles", "sparkling_heart", "speaker", "speak_no_evil", "speech_balloon",
|
||||||
|
"speedboat", "squirrel", "star", "star2", "stars", "station", "statue_of_liberty", "steam_locomotive",
|
||||||
|
"stew", "straight_ruler", "strawberry", "stuck_out_tongue", "stuck_out_tongue_closed_eyes",
|
||||||
|
"stuck_out_tongue_winking_eye", "sunflower", "sunglasses", "sunny", "sunrise", "sunrise_over_mountains",
|
||||||
|
"sun_with_face", "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", "tiger", "tiger2", "tired_face", "tm", "toilet", "tokyo_tower", "tomato",
|
||||||
|
"tongue", "top", "tophat", "tractor", "traffic_light", "train", "train2", "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", "watermelon", "water_buffalo", "wave", "wavy_dash", "waxing_crescent_moon",
|
||||||
|
"waxing_gibbous_moon", "wc", "weary", "wedding", "whale", "whale2", "wheelchair", "white_check_mark",
|
||||||
|
"white_circle", "white_flower", "white_square", "white_square_button", "wind_chime", "wine_glass",
|
||||||
|
"wink", "wolf", "woman", "womans_clothes", "womans_hat", "womens", "worried", "wrench", "x", "yellow_heart",
|
||||||
|
"yen", "yum", "zap", "zero", "zzz",
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
class EmojifyExtension(Extension):
|
||||||
|
|
||||||
|
def extendMarkdown(self, md, md_globals):
|
||||||
|
md.registerExtension(self)
|
||||||
|
md.preprocessors.add('emojify',
|
||||||
|
EmojifyPreprocessor(md),
|
||||||
|
'_end')
|
||||||
|
|
||||||
|
|
||||||
|
class EmojifyPreprocessor(Preprocessor):
|
||||||
|
|
||||||
|
def run(self, lines):
|
||||||
|
new_lines = []
|
||||||
|
|
||||||
|
def emojify(match):
|
||||||
|
emoji = match.group(1)
|
||||||
|
|
||||||
|
if not emoji in emojis_set:
|
||||||
|
return match.group(0)
|
||||||
|
|
||||||
|
url = emojis_path + emoji + u'.png'
|
||||||
|
|
||||||
|
return u's)' % {'emoji': emoji, 'url': url}
|
||||||
|
|
||||||
|
for line in lines:
|
||||||
|
if line.strip():
|
||||||
|
line = re.sub(r':([a-z0-9\+\-_]+):', emojify, line, flags=re.UNICODE)
|
||||||
|
|
||||||
|
new_lines.append(line)
|
||||||
|
|
||||||
|
return new_lines
|
||||||
|
|
||||||
|
|
||||||
|
def makeExtension(configs=None):
|
||||||
|
return EmojifyExtension(configs=configs)
|
|
@ -1,134 +0,0 @@
|
||||||
#!/usr/bin/env python
|
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
#
|
|
||||||
# Copyright (c) 2012, lepture.com
|
|
||||||
#
|
|
||||||
# Redistribution and use in source and binary forms, with or without
|
|
||||||
# modification, are permitted provided that the following conditions
|
|
||||||
# are met:
|
|
||||||
#
|
|
||||||
# * Redistributions of source code must retain the above copyright
|
|
||||||
# notice, this list of conditions and the following disclaimer.
|
|
||||||
# * Redistributions in binary form must reproduce the above
|
|
||||||
# copyright notice, this list of conditions and the following
|
|
||||||
# disclaimer in the documentation and/or other materials provided
|
|
||||||
# with the distribution.
|
|
||||||
# * Neither the name of the author nor the names of its contributors
|
|
||||||
# may be used to endorse or promote products derived from this
|
|
||||||
# software without specific prior written permission.
|
|
||||||
#
|
|
||||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
||||||
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
||||||
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
||||||
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
||||||
# HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
||||||
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
||||||
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
||||||
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
||||||
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
||||||
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
|
|
||||||
import re
|
|
||||||
|
|
||||||
|
|
||||||
emoji_url = 'http://localhost:8000/static/img/emojis/'
|
|
||||||
emoji_list = [
|
|
||||||
"-1", "0", "1", "109", "2", "3", "4", "5", "6", "7", "8", "8ball", "9",
|
|
||||||
"a", "ab", "airplane", "alien", "ambulance", "angel", "anger", "angry",
|
|
||||||
"apple", "aquarius", "aries", "arrow_backward", "arrow_down",
|
|
||||||
"arrow_forward", "arrow_left", "arrow_lower_left", "arrow_lower_right",
|
|
||||||
"arrow_right", "arrow_up", "arrow_upper_left", "arrow_upper_right",
|
|
||||||
"art", "astonished", "atm", "b", "baby", "baby_chick", "baby_symbol",
|
|
||||||
"balloon", "bamboo", "bank", "barber", "baseball", "basketball", "bath",
|
|
||||||
"bear", "beer", "beers", "beginner", "bell", "bento", "bike", "bikini",
|
|
||||||
"bird", "birthday", "black_square", "blue_car", "blue_heart", "blush",
|
|
||||||
"boar", "boat", "bomb", "book", "boot", "bouquet", "bow", "bowtie",
|
|
||||||
"boy", "bread", "briefcase", "broken_heart", "bug", "bulb",
|
|
||||||
"bullettrain_front", "bullettrain_side", "bus", "busstop", "cactus",
|
|
||||||
"cake", "calling", "camel", "camera", "cancer", "capricorn", "car",
|
|
||||||
"cat", "cd", "chart", "checkered_flag", "cherry_blossom", "chicken",
|
|
||||||
"christmas_tree", "church", "cinema", "city_sunrise", "city_sunset",
|
|
||||||
"clap", "clapper", "clock1", "clock10", "clock11", "clock12", "clock2",
|
|
||||||
"clock3", "clock4", "clock5", "clock6", "clock7", "clock8", "clock9",
|
|
||||||
"closed_umbrella", "cloud", "clubs", "cn", "cocktail", "coffee",
|
|
||||||
"cold_sweat", "computer", "confounded", "congratulations",
|
|
||||||
"construction", "construction_worker", "convenience_store", "cool",
|
|
||||||
"cop", "copyright", "couple", "couple_with_heart", "couplekiss", "cow",
|
|
||||||
"crossed_flags", "crown", "cry", "cupid", "currency_exchange", "curry",
|
|
||||||
"cyclone", "dancer", "dancers", "dango", "dart", "dash", "de",
|
|
||||||
"department_store", "diamonds", "disappointed", "dog", "dolls",
|
|
||||||
"dolphin", "dress", "dvd", "ear", "ear_of_rice", "egg", "eggplant",
|
|
||||||
"egplant", "eight_pointed_black_star", "eight_spoked_asterisk",
|
|
||||||
"elephant", "email", "es", "european_castle", "exclamation", "eyes",
|
|
||||||
"factory", "fallen_leaf", "fast_forward", "fax", "fearful", "feelsgood",
|
|
||||||
"feet", "ferris_wheel", "finnadie", "fire", "fire_engine", "fireworks",
|
|
||||||
"fish", "fist", "flags", "flushed", "football", "fork_and_knife",
|
|
||||||
"fountain", "four_leaf_clover", "fr", "fries", "frog", "fuelpump", "gb",
|
|
||||||
"gem", "gemini", "ghost", "gift", "gift_heart", "girl", "goberserk",
|
|
||||||
"godmode", "golf", "green_heart", "grey_exclamation", "grey_question",
|
|
||||||
"grin", "guardsman", "guitar", "gun", "haircut", "hamburger", "hammer",
|
|
||||||
"hamster", "hand", "handbag", "hankey", "hash", "headphones", "heart",
|
|
||||||
"heart_decoration", "heart_eyes", "heartbeat", "heartpulse", "hearts",
|
|
||||||
"hibiscus", "high_heel", "horse", "hospital", "hotel", "hotsprings",
|
|
||||||
"house", "hurtrealbad", "icecream", "id", "ideograph_advantage", "imp",
|
|
||||||
"information_desk_person", "iphone", "it", "jack_o_lantern",
|
|
||||||
"japanese_castle", "joy", "jp", "key", "kimono", "kiss", "kissing_face",
|
|
||||||
"kissing_heart", "koala", "koko", "kr", "leaves", "leo", "libra", "lips",
|
|
||||||
"lipstick", "lock", "loop", "loudspeaker", "love_hotel", "mag",
|
|
||||||
"mahjong", "mailbox", "man", "man_with_gua_pi_mao", "man_with_turban",
|
|
||||||
"maple_leaf", "mask", "massage", "mega", "memo", "mens", "metal",
|
|
||||||
"metro", "microphone", "minidisc", "mobile_phone_off", "moneybag",
|
|
||||||
"monkey", "monkey_face", "moon", "mortar_board", "mount_fuji", "mouse",
|
|
||||||
"movie_camera", "muscle", "musical_note", "nail_care", "necktie", "new",
|
|
||||||
"no_good", "no_smoking", "nose", "notes", "o", "o2", "ocean", "octocat",
|
|
||||||
"octopus", "oden", "office", "ok", "ok_hand", "ok_woman", "older_man",
|
|
||||||
"older_woman", "open_hands", "ophiuchus", "palm_tree", "parking",
|
|
||||||
"part_alternation_mark", "pencil", "penguin", "pensive", "persevere",
|
|
||||||
"person_with_blond_hair", "phone", "pig", "pill", "pisces", "plus1",
|
|
||||||
"point_down", "point_left", "point_right", "point_up", "point_up_2",
|
|
||||||
"police_car", "poop", "post_office", "postbox", "pray", "princess",
|
|
||||||
"punch", "purple_heart", "question", "rabbit", "racehorse", "radio",
|
|
||||||
"rage", "rage1", "rage2", "rage3", "rage4", "rainbow", "raised_hands",
|
|
||||||
"ramen", "red_car", "red_circle", "registered", "relaxed", "relieved",
|
|
||||||
"restroom", "rewind", "ribbon", "rice", "rice_ball", "rice_cracker",
|
|
||||||
"rice_scene", "ring", "rocket", "roller_coaster", "rose", "ru", "runner",
|
|
||||||
"sa", "sagittarius", "sailboat", "sake", "sandal", "santa", "satellite",
|
|
||||||
"satisfied", "saxophone", "school", "school_satchel", "scissors",
|
|
||||||
"scorpius", "scream", "seat", "secret", "shaved_ice", "sheep", "shell",
|
|
||||||
"ship", "shipit", "shirt", "shit", "shoe", "signal_strength",
|
|
||||||
"six_pointed_star", "ski", "skull", "sleepy", "slot_machine", "smile",
|
|
||||||
"smiley", "smirk", "smoking", "snake", "snowman", "sob", "soccer",
|
|
||||||
"space_invader", "spades", "spaghetti", "sparkler", "sparkles",
|
|
||||||
"speaker", "speedboat", "squirrel", "star", "star2", "stars", "station",
|
|
||||||
"statue_of_liberty", "stew", "strawberry", "sunflower", "sunny",
|
|
||||||
"sunrise", "sunrise_over_mountains", "surfer", "sushi", "suspect",
|
|
||||||
"sweat", "sweat_drops", "swimmer", "syringe", "tada", "tangerine",
|
|
||||||
"taurus", "taxi", "tea", "telephone", "tennis", "tent", "thumbsdown",
|
|
||||||
"thumbsup", "ticket", "tiger", "tm", "toilet", "tokyo_tower", "tomato",
|
|
||||||
"tongue", "top", "tophat", "traffic_light", "train", "trident",
|
|
||||||
"trollface", "trophy", "tropical_fish", "truck", "trumpet", "tshirt",
|
|
||||||
"tulip", "tv", "u5272", "u55b6", "u6307", "u6708", "u6709", "u6e80",
|
|
||||||
"u7121", "u7533", "u7a7a", "umbrella", "unamused", "underage", "unlock",
|
|
||||||
"up", "us", "v", "vhs", "vibration_mode", "virgo", "vs", "walking",
|
|
||||||
"warning", "watermelon", "wave", "wc", "wedding", "whale", "wheelchair",
|
|
||||||
"white_square", "wind_chime", "wink", "wink2", "wolf", "woman",
|
|
||||||
"womans_hat", "womens", "x", "yellow_heart", "zap", "zzz", "+1"
|
|
||||||
]
|
|
||||||
|
|
||||||
|
|
||||||
def emoji(text):
|
|
||||||
pattern = re.compile(':([a-z0-9\+\-_]+):')
|
|
||||||
|
|
||||||
def make_emoji(m):
|
|
||||||
name = m.group(1)
|
|
||||||
if name not in emoji_list:
|
|
||||||
return ':%s:' % name
|
|
||||||
tpl = ('<img class="emoji" title="%(name)s" alt="%(name)s" height="20"'
|
|
||||||
' width="20" src="%(url)s%(name)s.png" align="top">')
|
|
||||||
return tpl % {'name': name, 'url': emoji_url}
|
|
||||||
|
|
||||||
text = pattern.sub(make_emoji, text)
|
|
||||||
return text
|
|
||||||
|
|
||||||
__all__ = ['emoji']
|
|
|
@ -5,7 +5,6 @@ from django.core.cache import cache
|
||||||
from django.utils.encoding import force_bytes
|
from django.utils.encoding import force_bytes
|
||||||
|
|
||||||
from markdown import markdown
|
from markdown import markdown
|
||||||
#from markdown.extensions.wikilinks import WikiLinkExtension
|
|
||||||
from fn import F
|
from fn import F
|
||||||
|
|
||||||
from .gfm import AutolinkExtension
|
from .gfm import AutolinkExtension
|
||||||
|
@ -15,8 +14,8 @@ from .gfm import SemiSaneListExtension
|
||||||
from .gfm import SpacedLinkExtension
|
from .gfm import SpacedLinkExtension
|
||||||
from .gfm import StrikethroughExtension
|
from .gfm import StrikethroughExtension
|
||||||
from .gfm import WikiLinkExtension
|
from .gfm import WikiLinkExtension
|
||||||
|
from .gfm import EmojifyExtension
|
||||||
|
|
||||||
from .processors.emoji import emoji
|
|
||||||
from .processors.mentions import mentions
|
from .processors.mentions import mentions
|
||||||
from .processors.references import references
|
from .processors.references import references
|
||||||
|
|
||||||
|
@ -28,6 +27,7 @@ def _make_extensions_list(wikilinks_config=None):
|
||||||
SpacedLinkExtension(),
|
SpacedLinkExtension(),
|
||||||
StrikethroughExtension(),
|
StrikethroughExtension(),
|
||||||
WikiLinkExtension(wikilinks_config),
|
WikiLinkExtension(wikilinks_config),
|
||||||
|
EmojifyExtension(),
|
||||||
"extra",
|
"extra",
|
||||||
"codehilite"]
|
"codehilite"]
|
||||||
|
|
||||||
|
@ -64,14 +64,10 @@ def _preprocessors(project, text):
|
||||||
pre = F() >> mentions >> F(references, project)
|
pre = F() >> mentions >> F(references, project)
|
||||||
return pre(text)
|
return pre(text)
|
||||||
|
|
||||||
def _postprocessors(project, html):
|
|
||||||
post = F() >> emoji
|
|
||||||
return post(html)
|
|
||||||
|
|
||||||
|
|
||||||
#@cache_by_sha
|
#@cache_by_sha
|
||||||
def render(project, text):
|
def render(project, text):
|
||||||
renderer = F() >> F(_preprocessors, project) >> F(_render_markdown, project) >> F(_postprocessors, project)
|
renderer = F() >> F(_preprocessors, project) >> F(_render_markdown, project)
|
||||||
return renderer(text)
|
return renderer(text)
|
||||||
|
|
||||||
class DiffMatchPatch(diff_match_patch.diff_match_patch):
|
class DiffMatchPatch(diff_match_patch.diff_match_patch):
|
||||||
|
|
Loading…
Reference in New Issue