Created
June 20, 2017 09:12
-
-
Save harini-ua/bc964b47343221278d6fdc50ec0dcc76 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| <?php | |
| namespace App\Helpers; | |
| class EmojiHelper | |
| { | |
| const SEEK_LEFT_DELIMITER = 0x00; | |
| const SEEK_RIGHT_DELIMITER= 0x01; | |
| protected $emoji = array( | |
| //People | |
| "100", | |
| "bowtie", | |
| "smile", | |
| "blush", | |
| "smiley", | |
| "relaxed", | |
| "smirk", | |
| "heart_eyes", | |
| "kissing_heart", | |
| "kissing_face", | |
| "flushed", | |
| "relieved", | |
| "satisfied", | |
| "grin", | |
| "wink", | |
| "wink2", | |
| "tongue", | |
| "unamused", | |
| "sweat", | |
| "pensive", | |
| "disappointed", | |
| "confounded", | |
| "fearful", | |
| "cold_sweat", | |
| "persevere", | |
| "cry", | |
| "sob", | |
| "joy", | |
| "astonished", | |
| "scream", | |
| "angry", | |
| "rage", | |
| "sleepy", | |
| "mask", | |
| "imp", | |
| "alien", | |
| "yellow_heart", | |
| "blue_heart", | |
| "purple_heart", | |
| "heart", | |
| "green_heart", | |
| "broken_heart", | |
| "heartbeat", | |
| "heartpulse", | |
| "cupid", | |
| "sparkles", | |
| "star", | |
| "star2", | |
| "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", | |
| "fist", | |
| "v", | |
| "wave", | |
| "hand", | |
| "open_hands", | |
| "point_up", | |
| "point_down", | |
| "point_left", | |
| "point_right", | |
| "raised_hands", | |
| "pray", | |
| "point_up_2", | |
| "clap", | |
| "muscle", | |
| "metal", | |
| "walking", | |
| "runner", | |
| "couple", | |
| "dancer", | |
| "dancers", | |
| "ok_woman", | |
| "no_good", | |
| "information_desk_person", | |
| "bow", | |
| "couplekiss", | |
| "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", | |
| "guardsman", | |
| "skull", | |
| "feet", | |
| "lips", | |
| "kiss", | |
| "ear", | |
| "eyes", | |
| "nose", | |
| "feelsgood", | |
| "finnadie", | |
| "goberserk", | |
| "godmode", | |
| "hurtrealbad", | |
| "rage1", | |
| "rage2", | |
| "rage3", | |
| "rage4", | |
| "suspect", | |
| "trollface", | |
| //Nature | |
| "sunny", | |
| "umbrella", | |
| "cloud", | |
| "snowman", | |
| "moon", | |
| "zap", | |
| "cyclone", | |
| "ocean", | |
| "cat", | |
| "dog", | |
| "mouse", | |
| "hamster", | |
| "rabbit", | |
| "wolf", | |
| "frog", | |
| "tiger", | |
| "koala", | |
| "bear", | |
| "pig", | |
| "cow", | |
| "boar", | |
| "monkey_face", | |
| "monkey", | |
| "horse", | |
| "racehorse", | |
| "camel", | |
| "sheep", | |
| "elephant", | |
| "snake", | |
| "bird", | |
| "baby_chick", | |
| "chicken", | |
| "penguin", | |
| "bug", | |
| "octopus", | |
| "tropical_fish", | |
| "fish", | |
| "whale", | |
| "dolphin", | |
| "bouquet", | |
| "cherry_blossom", | |
| "tulip", | |
| "four_leaf_clover", | |
| "rose", | |
| "sunflower", | |
| "hibiscus", | |
| "maple_leaf", | |
| "leaves", | |
| "fallen_leaf", | |
| "palm_tree", | |
| "cactus", | |
| "ear_of_rice", | |
| "shell", | |
| "octocat", | |
| "squirrel", | |
| //Objects | |
| "bamboo", | |
| "gift_heart", | |
| "dolls", | |
| "school_satchel", | |
| "mortar_board", | |
| "flags", | |
| "fireworks", | |
| "sparkler", | |
| "wind_chime", | |
| "rice_scene", | |
| "jack_o_lantern", | |
| "ghost", | |
| "santa", | |
| "christmas_tree", | |
| "gift", | |
| "bell", | |
| "tada", | |
| "balloon", | |
| "cd", | |
| "dvd", | |
| "camera", | |
| "movie_camera", | |
| "computer", | |
| "tv", | |
| "iphone", | |
| "fax", | |
| "phone", | |
| "telephone", | |
| "minidisc", | |
| "vhs", | |
| "speaker", | |
| "loudspeaker", | |
| "mega", | |
| "radio", | |
| "satellite", | |
| "loop", | |
| "mag", | |
| "unlock", | |
| "lock", | |
| "key", | |
| "scissors", | |
| "hammer", | |
| "bulb", | |
| "calling", | |
| "email", | |
| "mailbox", | |
| "postbox", | |
| "bath", | |
| "toilet", | |
| "seat", | |
| "moneybag", | |
| "trident", | |
| "smoking", | |
| "bomb", | |
| "gun", | |
| "pill", | |
| "syringe", | |
| "football", | |
| "basketball", | |
| "soccer", | |
| "baseball", | |
| "tennis", | |
| "golf", | |
| "8ball", | |
| "swimmer", | |
| "surfer", | |
| "ski", | |
| "spades", | |
| "hearts", | |
| "clubs", | |
| "diamonds", | |
| "gem", | |
| "ring", | |
| "trophy", | |
| "space_invader", | |
| "dart", | |
| "mahjong", | |
| "clapper", | |
| "memo", | |
| "pencil", | |
| "book", | |
| "art", | |
| "microphone", | |
| "headphones", | |
| "trumpet", | |
| "saxophone", | |
| "guitar", | |
| "part_alternation_mark", | |
| "shoe", | |
| "sandal", | |
| "high_heel", | |
| "lipstick", | |
| "boot", | |
| "shirt", | |
| "tshirt", | |
| "necktie", | |
| "dress", | |
| "kimono", | |
| "bikini", | |
| "ribbon", | |
| "tophat", | |
| "crown", | |
| "womans_hat", | |
| "closed_umbrella", | |
| "briefcase", | |
| "handbag", | |
| "beer", | |
| "beers", | |
| "cocktail", | |
| "sake", | |
| "fork_and_knife", | |
| "hamburger", | |
| "fries", | |
| "spaghetti", | |
| "curry", | |
| "bento", | |
| "sushi", | |
| "rice_ball", | |
| "rice_cracker", | |
| "rice", | |
| "ramen", | |
| "stew", | |
| "bread", | |
| "egg", | |
| "oden", | |
| "dango", | |
| "icecream", | |
| "shaved_ice", | |
| "birthday", | |
| "cake", | |
| "apple", | |
| "tangerine", | |
| "watermelon", | |
| "strawberry", | |
| "eggplant", | |
| "egplant", | |
| "tomato", | |
| "coffee", | |
| "tea", | |
| //Places | |
| "109", | |
| "house", | |
| "school", | |
| "office", | |
| "post_office", | |
| "hospital", | |
| "bank", | |
| "convenience_store", | |
| "love_hotel", | |
| "hotel", | |
| "wedding", | |
| "church", | |
| "department_store", | |
| "city_sunrise", | |
| "city_sunset", | |
| "japanese_castle", | |
| "european_castle", | |
| "tent", | |
| "factory", | |
| "tokyo_tower", | |
| "mount_fuji", | |
| "sunrise_over_mountains", | |
| "sunrise", | |
| "stars", | |
| "statue_of_liberty", | |
| "rainbow", | |
| "ferris_wheel", | |
| "fountain", | |
| "roller_coaster", | |
| "ship", | |
| "speedboat", | |
| "boat", | |
| "sailboat", | |
| "airplane", | |
| "rocket", | |
| "bike", | |
| "blue_car", | |
| "car", | |
| "red_car", | |
| "taxi", | |
| "bus", | |
| "police_car", | |
| "fire_engine", | |
| "ambulance", | |
| "truck", | |
| "train", | |
| "station", | |
| "bullettrain_front", | |
| "bullettrain_side", | |
| "ticket", | |
| "fuelpump", | |
| "traffic_light", | |
| "warning", | |
| "construction", | |
| "beginner", | |
| "atm", | |
| "slot_machine", | |
| "busstop", | |
| "barber", | |
| "hotsprings", | |
| "checkered_flag", | |
| "crossed_flags", | |
| "jp", | |
| "kr", | |
| "cn", | |
| "us", | |
| "fr", | |
| "es", | |
| "it", | |
| "ru", | |
| "gb", | |
| "de", | |
| //Symbols | |
| "1", | |
| "2", | |
| "3", | |
| "4", | |
| "5", | |
| "6", | |
| "7", | |
| "8", | |
| "9", | |
| "0", | |
| "hash", | |
| "arrow_backward", | |
| "arrow_down", | |
| "arrow_forward", | |
| "arrow_left", | |
| "arrow_lower_left", | |
| "arrow_lower_right", | |
| "arrow_right", | |
| "arrow_up", | |
| "arrow_upper_left", | |
| "arrow_upper_right", | |
| "rewind", | |
| "fast_forward", | |
| "ok", | |
| "new", | |
| "top", | |
| "up", | |
| "cool", | |
| "cinema", | |
| "koko", | |
| "signal_strength", | |
| "u5272", | |
| "u55b6", | |
| "u6307", | |
| "u6708", | |
| "u6709", | |
| "u6e80", | |
| "u7121", | |
| "u7533", | |
| "u7a7a", | |
| "sa", | |
| "restroom", | |
| "mens", | |
| "womens", | |
| "baby_symbol", | |
| "no_smoking", | |
| "parking", | |
| "wheelchair", | |
| "metro", | |
| "wc", | |
| "secret", | |
| "congratulations", | |
| "ideograph_advantage", | |
| "underage", | |
| "id", | |
| "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", | |
| "plus1", | |
| "ophiuchus", | |
| "six_pointed_star", | |
| "a", | |
| "b", | |
| "ab", | |
| "o2", | |
| "red_circle", | |
| "black_square", | |
| "white_square", | |
| "clock1", | |
| "clock10", | |
| "clock11", | |
| "clock12", | |
| "clock2", | |
| "clock3", | |
| "clock4", | |
| "clock5", | |
| "clock6", | |
| "clock7", | |
| "clock8", | |
| "clock9", | |
| "o", | |
| "x", | |
| "copyright", | |
| "registered", | |
| "tm", | |
| "shipit", | |
| ); | |
| protected $options = array(); | |
| protected $default_options = array( | |
| "emoji.path" => "/img/emojis/" | |
| ); | |
| public function __construct($options = array()) | |
| { | |
| $this->options = array_merge($this->default_options, $options); | |
| } | |
| /** | |
| * | |
| * | |
| * @param $name | |
| * @return bool|string | |
| */ | |
| public function getEmoji($name) | |
| { | |
| if (in_array($name, $this->emoji)) { | |
| $format = '<img src="%s%s.png" title=":%s:" alt=":%s:" width="21" height="21" style="vertical-align: middle;" />'; | |
| return sprintf($format, $this->options['emoji.path'], $name, $name, $name); | |
| } else { | |
| return false; | |
| } | |
| } | |
| /** | |
| * render converted string | |
| * | |
| * @param $string | |
| * @return mixed | |
| */ | |
| public function render($string) | |
| { | |
| $length = strlen($string); | |
| $mode = self::SEEK_LEFT_DELIMITER; | |
| $result = $string; | |
| for ($i=0; $i < $length; $i++) { | |
| if ($mode == self::SEEK_LEFT_DELIMITER && $result[$i] == ":") { | |
| $offset = $i; | |
| $mode = self::SEEK_RIGHT_DELIMITER; | |
| } else if ($mode == self::SEEK_RIGHT_DELIMITER && $result[$i] == ":") { | |
| $mode = self::SEEK_LEFT_DELIMITER; | |
| $symbol = substr($result, $offset+1, $i - ($offset+1)); | |
| if ($replacement = $this->getEmoji($symbol)) { | |
| $result = substr_replace( | |
| $result, | |
| $replacement, | |
| $offset, | |
| strlen($symbol)+2 // symbol name + (colon * 2) | |
| ); | |
| // adjust offsets. | |
| $offset += strlen($replacement) - (strlen($symbol)+2); | |
| $i += strlen($replacement) - (strlen($symbol)+2); | |
| $length = strlen($result); | |
| } | |
| } | |
| } | |
| return $result; | |
| } | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment