# # Notice: This file was extracted from https://github.com/elm-city-craftworks/md_emoji # ## ## Copyright (c) 2011 Jordan Byron ## ## 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. module MdEmoji EMOJI = %w{+1 -1 0 1 100 109 1234 2 3 4 5 6 7 8 8ball 9 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 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 bust_in_silhouette busts_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 couple_with_heart couplekiss 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 diamond_shape_with_a_dot_inside diamonds disappointed disappointed_relieved dizzy dizzy_face do_not_litter dog dog2 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 egplant 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 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 hear_no_evil 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_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 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 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 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 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 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 page_facing_up page_with_curl pager palm_tree panda_face paperclip parking part_alternation_mark partly_sunny 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 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 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 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_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 speak_no_evil speaker 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 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 tiger tiger2 tired_face tm toilet tokyo_tower tomato tongue tongue2 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 water_buffalo watermelon 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 wink2 wolf woman womans_clothes womans_hat womens worried wrench x yellow_heart yen yum zap zero zzz} end module MdEmoji class Render < Redcarpet::Render::HTML def initialize(options={}) @options = options.merge(:no_intra_emphasis => true) super @options end def paragraph(text) text.gsub!("\n", "
\n") if @options[:hard_wrap] "

#{replace_emoji(text)}

\n" end def list_item(text, list_type) "
  • #{replace_emoji(text)}
  • " end # Replaces valid emoji characters, ie :smile:, with img tags # # Valid emoji charaters are listed in +MdEmoji::EMOJI+ def replace_emoji(text) text.gsub(/:([^\s:])+:/) do |emoji| emoji_code = emoji #.gsub("|", "_") emoji = emoji_code.gsub(":", "") if MdEmoji::EMOJI.include?(emoji) file_name = "#{emoji.gsub('+', 'plus')}.png" default_size = %{height="20" width="20"} %{#{emoji_code}} else emoji_code end end end private # Returns +true+ if emoji are present in +text+, otherwise returns +false+ def include_emoji?(text) text && text[/:\S+:/] end end end