aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--README6
-rw-r--r--changelog9
-rw-r--r--pandoc.cabal1
-rw-r--r--src/Text/Pandoc/Emoji.hs905
-rw-r--r--src/Text/Pandoc/Options.hs2
-rw-r--r--src/Text/Pandoc/Parsing.hs3
-rw-r--r--src/Text/Pandoc/Readers/Markdown.hs17
-rw-r--r--src/Text/Pandoc/Readers/Org.hs13
-rw-r--r--tests/Tests/Readers/Markdown.hs4
-rw-r--r--tests/Tests/Readers/Org.hs9
10 files changed, 963 insertions, 6 deletions
diff --git a/README b/README
index 408bc66a4..abc4c165b 100644
--- a/README
+++ b/README
@@ -3146,6 +3146,10 @@ treated as spaces or as hard line breaks. This option is intended for
use with East Asian languages where spaces are not used between words,
but text is divided into lines for readability.
+#### Extension: `emoji` ####
+
+Parses textual emojis like `:smile:` as Unicode emoticons.
+
#### Extension: `tex_math_single_backslash` ####
Causes anything between `\(` and `\)` to be interpreted as inline
@@ -3256,7 +3260,7 @@ variants are supported:
: `pipe_tables`, `raw_html`, `tex_math_single_backslash`,
`fenced_code_blocks`, `auto_identifiers`,
`ascii_identifiers`, `backtick_code_blocks`, `autolink_bare_uris`,
- `intraword_underscores`, `strikeout`, `hard_line_breaks`,
+ `intraword_underscores`, `strikeout`, `hard_line_breaks`, `emoji`,
`shortcut_reference_links`.
`markdown_mmd` (MultiMarkdown)
diff --git a/changelog b/changelog
index 46a8eb128..3cffa9f93 100644
--- a/changelog
+++ b/changelog
@@ -5,6 +5,10 @@ pandoc (1.15.2)
* Fixed omitted `url(...)` in CSS data-uri with `--self-contained` (#2489).
+ * Added `emoji` Markdown extension, enabled by default in `markdown_github`
+ (#2523). Added `Ext_emoji` to `Extension` in `Text.Pandoc.Options`
+ (API change).
+
* `Text.Pandoc.Readers.HTML.parseTags`: Fixed over-eager raw HTML inline
parsing (#2469). Tightened up the inline HTML parser so it disallows
TagWarnings.
@@ -27,6 +31,9 @@ pandoc (1.15.2)
can start need to be marked explicitly by changing the parser state.
This wasn't done for headers. The proper function to update the state
is now called at the beginning of the header parser, fixing this issue.
+ + Fix emphasis rules for smart parsing (Albert Krewinkel, #2513).
+ Smart quotes, ellipses, and dashes should behave like normal quotes,
+ single dashes, and dots with respect to text markup parsing.
* Markdown reader:
@@ -41,6 +48,8 @@ pandoc (1.15.2)
permit this.
+ Improved parser for `mmd_title_block`. We now allow blank metadata
fields. These were explicitly disallowed before.
+ + Citation keys can now contain `://`, so URLs and DOIs can be used
+ as citation keys (jgm/pandoc-citeproc#166).
* Beamer template: fix incompatibility of section slides with natbib.
Natbib (and presumably biblatex) bibliography commands create
diff --git a/pandoc.cabal b/pandoc.cabal
index 7c2666edf..40f994ef1 100644
--- a/pandoc.cabal
+++ b/pandoc.cabal
@@ -391,6 +391,7 @@ Library
Text.Pandoc.Writers.Shared,
Text.Pandoc.Asciify,
Text.Pandoc.MIME,
+ Text.Pandoc.Emoji,
Text.Pandoc.Parsing,
Text.Pandoc.UUID,
Text.Pandoc.ImageSize,
diff --git a/src/Text/Pandoc/Emoji.hs b/src/Text/Pandoc/Emoji.hs
new file mode 100644
index 000000000..2ae7962cb
--- /dev/null
+++ b/src/Text/Pandoc/Emoji.hs
@@ -0,0 +1,905 @@
+{-
+Copyright (C) 2015 John MacFarlane <jgm@berkeley.edu>
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+-}
+
+{- |
+ Module : Text.Pandoc.Emoji
+ Copyright : Copyright (C) 2015 John MacFarlane
+ License : GNU GPL, version 2 or above
+
+ Maintainer : John MacFarlane <jgm@berkeley.edu>
+ Stability : alpha
+ Portability : portable
+
+Emoji symbol lookup from canonical string identifier.
+-}
+module Text.Pandoc.Emoji ( emojis ) where
+import qualified Data.Map as M
+
+emojis :: M.Map String String
+emojis = M.fromList
+ [ ("100", "๐Ÿ’ฏ")
+ , ("1234", "๐Ÿ”ข")
+ , ("smile", "๐Ÿ˜„")
+ , ("smiley", "๐Ÿ˜ƒ")
+ , ("grinning", "๐Ÿ˜€")
+ , ("blush", "๐Ÿ˜Š")
+ , ("relaxed", "โ˜บ๏ธ")
+ , ("wink", "๐Ÿ˜‰")
+ , ("heart_eyes", "๐Ÿ˜")
+ , ("kissing_heart", "๐Ÿ˜˜")
+ , ("kissing_closed_eyes", "๐Ÿ˜š")
+ , ("kissing", "๐Ÿ˜—")
+ , ("kissing_smiling_eyes", "๐Ÿ˜™")
+ , ("stuck_out_tongue_winking_eye", "๐Ÿ˜œ")
+ , ("stuck_out_tongue_closed_eyes", "๐Ÿ˜")
+ , ("stuck_out_tongue", "๐Ÿ˜›")
+ , ("flushed", "๐Ÿ˜ณ")
+ , ("grin", "๐Ÿ˜")
+ , ("pensive", "๐Ÿ˜”")
+ , ("relieved", "๐Ÿ˜Œ")
+ , ("unamused", "๐Ÿ˜’")
+ , ("disappointed", "๐Ÿ˜ž")
+ , ("persevere", "๐Ÿ˜ฃ")
+ , ("cry", "๐Ÿ˜ข")
+ , ("joy", "๐Ÿ˜‚")
+ , ("sob", "๐Ÿ˜ญ")
+ , ("sleepy", "๐Ÿ˜ช")
+ , ("disappointed_relieved", "๐Ÿ˜ฅ")
+ , ("cold_sweat", "๐Ÿ˜ฐ")
+ , ("sweat_smile", "๐Ÿ˜…")
+ , ("sweat", "๐Ÿ˜“")
+ , ("weary", "๐Ÿ˜ฉ")
+ , ("tired_face", "๐Ÿ˜ซ")
+ , ("fearful", "๐Ÿ˜จ")
+ , ("scream", "๐Ÿ˜ฑ")
+ , ("angry", "๐Ÿ˜ ")
+ , ("rage", "๐Ÿ˜ก")
+ , ("triumph", "๐Ÿ˜ค")
+ , ("confounded", "๐Ÿ˜–")
+ , ("laughing", "๐Ÿ˜†")
+ , ("satisfied", "๐Ÿ˜†")
+ , ("yum", "๐Ÿ˜‹")
+ , ("mask", "๐Ÿ˜ท")
+ , ("sunglasses", "๐Ÿ˜Ž")
+ , ("sleeping", "๐Ÿ˜ด")
+ , ("dizzy_face", "๐Ÿ˜ต")
+ , ("astonished", "๐Ÿ˜ฒ")
+ , ("worried", "๐Ÿ˜Ÿ")
+ , ("frowning", "๐Ÿ˜ฆ")
+ , ("anguished", "๐Ÿ˜ง")
+ , ("smiling_imp", "๐Ÿ˜ˆ")
+ , ("imp", "๐Ÿ‘ฟ")
+ , ("open_mouth", "๐Ÿ˜ฎ")
+ , ("grimacing", "๐Ÿ˜ฌ")
+ , ("neutral_face", "๐Ÿ˜")
+ , ("confused", "๐Ÿ˜•")
+ , ("hushed", "๐Ÿ˜ฏ")
+ , ("no_mouth", "๐Ÿ˜ถ")
+ , ("innocent", "๐Ÿ˜‡")
+ , ("smirk", "๐Ÿ˜")
+ , ("expressionless", "๐Ÿ˜‘")
+ , ("man_with_gua_pi_mao", "๐Ÿ‘ฒ")
+ , ("man_with_turban", "๐Ÿ‘ณ")
+ , ("cop", "๐Ÿ‘ฎ")
+ , ("construction_worker", "๐Ÿ‘ท")
+ , ("guardsman", "๐Ÿ’‚")
+ , ("baby", "๐Ÿ‘ถ")
+ , ("boy", "๐Ÿ‘ฆ")
+ , ("girl", "๐Ÿ‘ง")
+ , ("man", "๐Ÿ‘จ")
+ , ("woman", "๐Ÿ‘ฉ")
+ , ("older_man", "๐Ÿ‘ด")
+ , ("older_woman", "๐Ÿ‘ต")
+ , ("person_with_blond_hair", "๐Ÿ‘ฑ")
+ , ("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", "๐Ÿ™Š")
+ , ("skull", "๐Ÿ’€")
+ , ("alien", "๐Ÿ‘ฝ")
+ , ("hankey", "๐Ÿ’ฉ")
+ , ("poop", "๐Ÿ’ฉ")
+ , ("shit", "๐Ÿ’ฉ")
+ , ("fire", "๐Ÿ”ฅ")
+ , ("sparkles", "โœจ")
+ , ("star2", "๐ŸŒŸ")
+ , ("dizzy", "๐Ÿ’ซ")
+ , ("boom", "๐Ÿ’ฅ")
+ , ("collision", "๐Ÿ’ฅ")
+ , ("anger", "๐Ÿ’ข")
+ , ("sweat_drops", "๐Ÿ’ฆ")
+ , ("droplet", "๐Ÿ’ง")
+ , ("zzz", "๐Ÿ’ค")
+ , ("dash", "๐Ÿ’จ")
+ , ("ear", "๐Ÿ‘‚")
+ , ("eyes", "๐Ÿ‘€")
+ , ("nose", "๐Ÿ‘ƒ")
+ , ("tongue", "๐Ÿ‘…")
+ , ("lips", "๐Ÿ‘„")
+ , ("+1", "๐Ÿ‘")
+ , ("thumbsup", "๐Ÿ‘")
+ , ("-1", "๐Ÿ‘Ž")
+ , ("thumbsdown", "๐Ÿ‘Ž")
+ , ("ok_hand", "๐Ÿ‘Œ")
+ , ("facepunch", "๐Ÿ‘Š")
+ , ("punch", "๐Ÿ‘Š")
+ , ("fist", "โœŠ")
+ , ("v", "โœŒ๏ธ")
+ , ("wave", "๐Ÿ‘‹")
+ , ("hand", "โœ‹")
+ , ("raised_hand", "โœ‹")
+ , ("open_hands", "๐Ÿ‘")
+ , ("point_up_2", "๐Ÿ‘†")
+ , ("point_down", "๐Ÿ‘‡")
+ , ("point_right", "๐Ÿ‘‰")
+ , ("point_left", "๐Ÿ‘ˆ")
+ , ("raised_hands", "๐Ÿ™Œ")
+ , ("pray", "๐Ÿ™")
+ , ("point_up", "โ˜๏ธ")
+ , ("clap", "๐Ÿ‘")
+ , ("muscle", "๐Ÿ’ช")
+ , ("walking", "๐Ÿšถ")
+ , ("runner", "๐Ÿƒ")
+ , ("running", "๐Ÿƒ")
+ , ("dancer", "๐Ÿ’ƒ")
+ , ("couple", "๐Ÿ‘ซ")
+ , ("family", "๐Ÿ‘ช")
+ , ("two_men_holding_hands", "๐Ÿ‘ฌ")
+ , ("two_women_holding_hands", "๐Ÿ‘ญ")
+ , ("couplekiss", "๐Ÿ’")
+ , ("couple_with_heart", "๐Ÿ’‘")
+ , ("dancers", "๐Ÿ‘ฏ")
+ , ("ok_woman", "๐Ÿ™†")
+ , ("no_good", "๐Ÿ™…")
+ , ("information_desk_person", "๐Ÿ’")
+ , ("raising_hand", "๐Ÿ™‹")
+ , ("massage", "๐Ÿ’†")
+ , ("haircut", "๐Ÿ’‡")
+ , ("nail_care", "๐Ÿ’…")
+ , ("bride_with_veil", "๐Ÿ‘ฐ")
+ , ("person_with_pouting_face", "๐Ÿ™Ž")
+ , ("person_frowning", "๐Ÿ™")
+ , ("bow", "๐Ÿ™‡")
+ , ("tophat", "๐ŸŽฉ")
+ , ("crown", "๐Ÿ‘‘")
+ , ("womans_hat", "๐Ÿ‘’")
+ , ("athletic_shoe", "๐Ÿ‘Ÿ")
+ , ("mans_shoe", "๐Ÿ‘ž")
+ , ("shoe", "๐Ÿ‘ž")
+ , ("sandal", "๐Ÿ‘ก")
+ , ("high_heel", "๐Ÿ‘ ")
+ , ("boot", "๐Ÿ‘ข")
+ , ("shirt", "๐Ÿ‘•")
+ , ("tshirt", "๐Ÿ‘•")
+ , ("necktie", "๐Ÿ‘”")
+ , ("womans_clothes", "๐Ÿ‘š")
+ , ("dress", "๐Ÿ‘—")
+ , ("running_shirt_with_sash", "๐ŸŽฝ")
+ , ("jeans", "๐Ÿ‘–")
+ , ("kimono", "๐Ÿ‘˜")
+ , ("bikini", "๐Ÿ‘™")
+ , ("briefcase", "๐Ÿ’ผ")
+ , ("handbag", "๐Ÿ‘œ")
+ , ("pouch", "๐Ÿ‘")
+ , ("purse", "๐Ÿ‘›")
+ , ("eyeglasses", "๐Ÿ‘“")
+ , ("ribbon", "๐ŸŽ€")
+ , ("closed_umbrella", "๐ŸŒ‚")
+ , ("lipstick", "๐Ÿ’„")
+ , ("yellow_heart", "๐Ÿ’›")
+ , ("blue_heart", "๐Ÿ’™")
+ , ("purple_heart", "๐Ÿ’œ")
+ , ("green_heart", "๐Ÿ’š")
+ , ("heart", "โค๏ธ")
+ , ("broken_heart", "๐Ÿ’”")
+ , ("heartpulse", "๐Ÿ’—")
+ , ("heartbeat", "๐Ÿ’“")
+ , ("two_hearts", "๐Ÿ’•")
+ , ("sparkling_heart", "๐Ÿ’–")
+ , ("revolving_hearts", "๐Ÿ’ž")
+ , ("cupid", "๐Ÿ’˜")
+ , ("love_letter", "๐Ÿ’Œ")
+ , ("kiss", "๐Ÿ’‹")
+ , ("ring", "๐Ÿ’")
+ , ("gem", "๐Ÿ’Ž")
+ , ("bust_in_silhouette", "๐Ÿ‘ค")
+ , ("busts_in_silhouette", "๐Ÿ‘ฅ")
+ , ("speech_balloon", "๐Ÿ’ฌ")
+ , ("footprints", "๐Ÿ‘ฃ")
+ , ("thought_balloon", "๐Ÿ’ญ")
+ , ("dog", "๐Ÿถ")
+ , ("wolf", "๐Ÿบ")
+ , ("cat", "๐Ÿฑ")
+ , ("mouse", "๐Ÿญ")
+ , ("hamster", "๐Ÿน")
+ , ("rabbit", "๐Ÿฐ")
+ , ("frog", "๐Ÿธ")
+ , ("tiger", "๐Ÿฏ")
+ , ("koala", "๐Ÿจ")
+ , ("bear", "๐Ÿป")
+ , ("pig", "๐Ÿท")
+ , ("pig_nose", "๐Ÿฝ")
+ , ("cow", "๐Ÿฎ")
+ , ("boar", "๐Ÿ—")
+ , ("monkey_face", "๐Ÿต")
+ , ("monkey", "๐Ÿ’")
+ , ("horse", "๐Ÿด")
+ , ("sheep", "๐Ÿ‘")
+ , ("elephant", "๐Ÿ˜")
+ , ("panda_face", "๐Ÿผ")
+ , ("penguin", "๐Ÿง")
+ , ("bird", "๐Ÿฆ")
+ , ("baby_chick", "๐Ÿค")
+ , ("hatched_chick", "๐Ÿฅ")
+ , ("hatching_chick", "๐Ÿฃ")
+ , ("chicken", "๐Ÿ”")
+ , ("snake", "๐Ÿ")
+ , ("turtle", "๐Ÿข")
+ , ("bug", "๐Ÿ›")
+ , ("bee", "๐Ÿ")
+ , ("honeybee", "๐Ÿ")
+ , ("ant", "๐Ÿœ")
+ , ("beetle", "๐Ÿž")
+ , ("snail", "๐ŸŒ")
+ , ("octopus", "๐Ÿ™")
+ , ("shell", "๐Ÿš")
+ , ("tropical_fish", "๐Ÿ ")
+ , ("fish", "๐ŸŸ")
+ , ("dolphin", "๐Ÿฌ")
+ , ("flipper", "๐Ÿฌ")
+ , ("whale", "๐Ÿณ")
+ , ("whale2", "๐Ÿ‹")
+ , ("cow2", "๐Ÿ„")
+ , ("ram", "๐Ÿ")
+ , ("rat", "๐Ÿ€")
+ , ("water_buffalo", "๐Ÿƒ")
+ , ("tiger2", "๐Ÿ…")
+ , ("rabbit2", "๐Ÿ‡")
+ , ("dragon", "๐Ÿ‰")
+ , ("racehorse", "๐ŸŽ")
+ , ("goat", "๐Ÿ")
+ , ("rooster", "๐Ÿ“")
+ , ("dog2", "๐Ÿ•")
+ , ("pig2", "๐Ÿ–")
+ , ("mouse2", "๐Ÿ")
+ , ("ox", "๐Ÿ‚")
+ , ("dragon_face", "๐Ÿฒ")
+ , ("blowfish", "๐Ÿก")
+ , ("crocodile", "๐ŸŠ")
+ , ("camel", "๐Ÿซ")
+ , ("dromedary_camel", "๐Ÿช")
+ , ("leopard", "๐Ÿ†")
+ , ("cat2", "๐Ÿˆ")
+ , ("poodle", "๐Ÿฉ")
+ , ("feet", "๐Ÿพ")
+ , ("paw_prints", "๐Ÿพ")
+ , ("bouquet", "๐Ÿ’")
+ , ("cherry_blossom", "๐ŸŒธ")
+ , ("tulip", "๐ŸŒท")
+ , ("four_leaf_clover", "๐Ÿ€")
+ , ("rose", "๐ŸŒน")
+ , ("sunflower", "๐ŸŒป")
+ , ("hibiscus", "๐ŸŒบ")
+ , ("maple_leaf", "๐Ÿ")
+ , ("leaves", "๐Ÿƒ")
+ , ("fallen_leaf", "๐Ÿ‚")
+ , ("herb", "๐ŸŒฟ")
+ , ("ear_of_rice", "๐ŸŒพ")
+ , ("mushroom", "๐Ÿ„")
+ , ("cactus", "๐ŸŒต")
+ , ("palm_tree", "๐ŸŒด")
+ , ("evergreen_tree", "๐ŸŒฒ")
+ , ("deciduous_tree", "๐ŸŒณ")
+ , ("chestnut", "๐ŸŒฐ")
+ , ("seedling", "๐ŸŒฑ")
+ , ("blossom", "๐ŸŒผ")
+ , ("globe_with_meridians", "๐ŸŒ")
+ , ("sun_with_face", "๐ŸŒž")
+ , ("full_moon_with_face", "๐ŸŒ")
+ , ("new_moon_with_face", "๐ŸŒš")
+ , ("new_moon", "๐ŸŒ‘")
+ , ("waxing_crescent_moon", "๐ŸŒ’")
+ , ("first_quarter_moon", "๐ŸŒ“")
+ , ("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", "๐ŸŒ›")
+ , ("crescent_moon", "๐ŸŒ™")
+ , ("earth_africa", "๐ŸŒ")
+ , ("earth_americas", "๐ŸŒŽ")
+ , ("earth_asia", "๐ŸŒ")
+ , ("volcano", "๐ŸŒ‹")
+ , ("milky_way", "๐ŸŒŒ")
+ , ("stars", "๐ŸŒ ")
+ , ("star", "โญ")
+ , ("sunny", "โ˜€๏ธ")
+ , ("partly_sunny", "โ›…")
+ , ("cloud", "โ˜๏ธ")
+ , ("zap", "โšก")
+ , ("umbrella", "โ˜”")
+ , ("snowflake", "โ„๏ธ")
+ , ("snowman", "โ›„")
+ , ("cyclone", "๐ŸŒ€")
+ , ("foggy", "๐ŸŒ")
+ , ("rainbow", "๐ŸŒˆ")
+ , ("ocean", "๐ŸŒŠ")
+ , ("bamboo", "๐ŸŽ")
+ , ("gift_heart", "๐Ÿ’")
+ , ("dolls", "๐ŸŽŽ")
+ , ("school_satchel", "๐ŸŽ’")
+ , ("mortar_board", "๐ŸŽ“")
+ , ("flags", "๐ŸŽ")
+ , ("fireworks", "๐ŸŽ†")
+ , ("sparkler", "๐ŸŽ‡")
+ , ("wind_chime", "๐ŸŽ")
+ , ("rice_scene", "๐ŸŽ‘")
+ , ("jack_o_lantern", "๐ŸŽƒ")
+ , ("ghost", "๐Ÿ‘ป")
+ , ("santa", "๐ŸŽ…")
+ , ("christmas_tree", "๐ŸŽ„")
+ , ("gift", "๐ŸŽ")
+ , ("tanabata_tree", "๐ŸŽ‹")
+ , ("tada", "๐ŸŽ‰")
+ , ("confetti_ball", "๐ŸŽŠ")
+ , ("balloon", "๐ŸŽˆ")
+ , ("crossed_flags", "๐ŸŽŒ")
+ , ("crystal_ball", "๐Ÿ”ฎ")
+ , ("movie_camera", "๐ŸŽฅ")
+ , ("camera", "๐Ÿ“ท")
+ , ("video_camera", "๐Ÿ“น")
+ , ("vhs", "๐Ÿ“ผ")
+ , ("cd", "๐Ÿ’ฟ")
+ , ("dvd", "๐Ÿ“€")
+ , ("minidisc", "๐Ÿ’ฝ")
+ , ("floppy_disk", "๐Ÿ’พ")
+ , ("computer", "๐Ÿ’ป")
+ , ("iphone", "๐Ÿ“ฑ")
+ , ("phone", "โ˜Ž๏ธ")
+ , ("telephone", "โ˜Ž๏ธ")
+ , ("telephone_receiver", "๐Ÿ“ž")
+ , ("pager", "๐Ÿ“Ÿ")
+ , ("fax", "๐Ÿ“ ")
+ , ("satellite", "๐Ÿ“ก")
+ , ("tv", "๐Ÿ“บ")
+ , ("radio", "๐Ÿ“ป")
+ , ("loud_sound", "๐Ÿ”Š")
+ , ("sound", "๐Ÿ”‰")
+ , ("speaker", "๐Ÿ”ˆ")
+ , ("mute", "๐Ÿ”‡")
+ , ("bell", "๐Ÿ””")
+ , ("no_bell", "๐Ÿ”•")
+ , ("loudspeaker", "๐Ÿ“ข")
+ , ("mega", "๐Ÿ“ฃ")
+ , ("hourglass_flowing_sand", "โณ")
+ , ("hourglass", "โŒ›")
+ , ("alarm_clock", "โฐ")
+ , ("watch", "โŒš")
+ , ("unlock", "๐Ÿ”“")
+ , ("lock", "๐Ÿ”’")
+ , ("lock_with_ink_pen", "๐Ÿ”")
+ , ("closed_lock_with_key", "๐Ÿ”")
+ , ("key", "๐Ÿ”‘")
+ , ("mag_right", "๐Ÿ”Ž")
+ , ("bulb", "๐Ÿ’ก")
+ , ("flashlight", "๐Ÿ”ฆ")
+ , ("high_brightness", "๐Ÿ”†")
+ , ("low_brightness", "๐Ÿ”…")
+ , ("electric_plug", "๐Ÿ”Œ")
+ , ("battery", "๐Ÿ”‹")
+ , ("mag", "๐Ÿ”")
+ , ("bathtub", "๐Ÿ›")
+ , ("bath", "๐Ÿ›€")
+ , ("shower", "๐Ÿšฟ")
+ , ("toilet", "๐Ÿšฝ")
+ , ("wrench", "๐Ÿ”ง")
+ , ("nut_and_bolt", "๐Ÿ”ฉ")
+ , ("hammer", "๐Ÿ”จ")
+ , ("door", "๐Ÿšช")
+ , ("smoking", "๐Ÿšฌ")
+ , ("bomb", "๐Ÿ’ฃ")
+ , ("gun", "๐Ÿ”ซ")
+ , ("hocho", "๐Ÿ”ช")
+ , ("knife", "๐Ÿ”ช")
+ , ("pill", "๐Ÿ’Š")
+ , ("syringe", "๐Ÿ’‰")
+ , ("moneybag", "๐Ÿ’ฐ")
+ , ("yen", "๐Ÿ’ด")
+ , ("dollar", "๐Ÿ’ต")
+ , ("pound", "๐Ÿ’ท")
+ , ("euro", "๐Ÿ’ถ")
+ , ("credit_card", "๐Ÿ’ณ")
+ , ("money_with_wings", "๐Ÿ’ธ")
+ , ("calling", "๐Ÿ“ฒ")
+ , ("e-mail", "๐Ÿ“ง")
+ , ("inbox_tray", "๐Ÿ“ฅ")
+ , ("outbox_tray", "๐Ÿ“ค")
+ , ("email", "โœ‰๏ธ")
+ , ("envelope", "โœ‰๏ธ")
+ , ("envelope_with_arrow", "๐Ÿ“ฉ")
+ , ("incoming_envelope", "๐Ÿ“จ")
+ , ("postal_horn", "๐Ÿ“ฏ")
+ , ("mailbox", "๐Ÿ“ซ")
+ , ("mailbox_closed", "๐Ÿ“ช")
+ , ("mailbox_with_mail", "๐Ÿ“ฌ")
+ , ("mailbox_with_no_mail", "๐Ÿ“ญ")
+ , ("postbox", "๐Ÿ“ฎ")
+ , ("package", "๐Ÿ“ฆ")
+ , ("memo", "๐Ÿ“")
+ , ("pencil", "๐Ÿ“")
+ , ("page_facing_up", "๐Ÿ“„")
+ , ("page_with_curl", "๐Ÿ“ƒ")
+ , ("bookmark_tabs", "๐Ÿ“‘")
+ , ("bar_chart", "๐Ÿ“Š")
+ , ("chart_with_upwards_trend", "๐Ÿ“ˆ")
+ , ("chart_with_downwards_trend", "๐Ÿ“‰")
+ , ("scroll", "๐Ÿ“œ")
+ , ("clipboard", "๐Ÿ“‹")
+ , ("date", "๐Ÿ“…")
+ , ("calendar", "๐Ÿ“†")
+ , ("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", "๐Ÿ“š")
+ , ("book", "๐Ÿ“–")
+ , ("open_book", "๐Ÿ“–")
+ , ("bookmark", "๐Ÿ”–")
+ , ("name_badge", "๐Ÿ“›")
+ , ("microscope", "๐Ÿ”ฌ")
+ , ("telescope", "๐Ÿ”ญ")
+ , ("newspaper", "๐Ÿ“ฐ")
+ , ("art", "๐ŸŽจ")
+ , ("clapper", "๐ŸŽฌ")
+ , ("microphone", "๐ŸŽค")
+ , ("headphones", "๐ŸŽง")
+ , ("musical_score", "๐ŸŽผ")
+ , ("musical_note", "๐ŸŽต")
+ , ("notes", "๐ŸŽถ")
+ , ("musical_keyboard", "๐ŸŽน")
+ , ("violin", "๐ŸŽป")
+ , ("trumpet", "๐ŸŽบ")
+ , ("saxophone", "๐ŸŽท")
+ , ("guitar", "๐ŸŽธ")
+ , ("space_invader", "๐Ÿ‘พ")
+ , ("video_game", "๐ŸŽฎ")
+ , ("black_joker", "๐Ÿƒ")
+ , ("flower_playing_cards", "๐ŸŽด")
+ , ("mahjong", "๐Ÿ€„")
+ , ("game_die", "๐ŸŽฒ")
+ , ("dart", "๐ŸŽฏ")
+ , ("football", "๐Ÿˆ")
+ , ("basketball", "๐Ÿ€")
+ , ("soccer", "โšฝ")
+ , ("baseball", "โšพ๏ธ")
+ , ("tennis", "๐ŸŽพ")
+ , ("8ball", "๐ŸŽฑ")
+ , ("rugby_football", "๐Ÿ‰")
+ , ("bowling", "๐ŸŽณ")
+ , ("golf", "โ›ณ")
+ , ("mountain_bicyclist", "๐Ÿšต")
+ , ("bicyclist", "๐Ÿšด")
+ , ("checkered_flag", "๐Ÿ")
+ , ("horse_racing", "๐Ÿ‡")
+ , ("trophy", "๐Ÿ†")
+ , ("ski", "๐ŸŽฟ")
+ , ("snowboarder", "๐Ÿ‚")
+ , ("swimmer", "๐ŸŠ")
+ , ("surfer", "๐Ÿ„")
+ , ("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", "๐ŸŒ…")
+ , ("night_with_stars", "๐ŸŒƒ")
+ , ("statue_of_liberty", "๐Ÿ—ฝ")
+ , ("bridge_at_night", "๐ŸŒ‰")
+ , ("carousel_horse", "๐ŸŽ ")
+ , ("ferris_wheel", "๐ŸŽก")
+ , ("fountain", "โ›ฒ")
+ , ("roller_coaster", "๐ŸŽข")
+ , ("ship", "๐Ÿšข")
+ , ("boat", "โ›ต")
+ , ("sailboat", "โ›ต")
+ , ("speedboat", "๐Ÿšค")
+ , ("rowboat", "๐Ÿšฃ")
+ , ("anchor", "โš“")
+ , ("rocket", "๐Ÿš€")
+ , ("airplane", "โœˆ๏ธ")
+ , ("seat", "๐Ÿ’บ")
+ , ("helicopter", "๐Ÿš")
+ , ("steam_locomotive", "๐Ÿš‚")
+ , ("tram", "๐ŸšŠ")
+ , ("station", "๐Ÿš‰")
+ , ("mountain_railway", "๐Ÿšž")
+ , ("train2", "๐Ÿš†")
+ , ("bullettrain_side", "๐Ÿš„")
+ , ("bullettrain_front", "๐Ÿš…")
+ , ("light_rail", "๐Ÿšˆ")
+ , ("metro", "๐Ÿš‡")
+ , ("monorail", "๐Ÿš")
+ , ("train", "๐Ÿš‹")
+ , ("railway_car", "๐Ÿšƒ")
+ , ("trolleybus", "๐ŸšŽ")
+ , ("bus", "๐ŸšŒ")
+ , ("oncoming_bus", "๐Ÿš")
+ , ("blue_car", "๐Ÿš™")
+ , ("oncoming_automobile", "๐Ÿš˜")
+ , ("car", "๐Ÿš—")
+ , ("red_car", "๐Ÿš—")
+ , ("taxi", "๐Ÿš•")
+ , ("oncoming_taxi", "๐Ÿš–")
+ , ("articulated_lorry", "๐Ÿš›")
+ , ("truck", "๐Ÿšš")
+ , ("rotating_light", "๐Ÿšจ")
+ , ("police_car", "๐Ÿš“")
+ , ("oncoming_police_car", "๐Ÿš”")
+ , ("fire_engine", "๐Ÿš’")
+ , ("ambulance", "๐Ÿš‘")
+ , ("minibus", "๐Ÿš")
+ , ("bike", "๐Ÿšฒ")
+ , ("aerial_tramway", "๐Ÿšก")
+ , ("suspension_railway", "๐ŸšŸ")
+ , ("mountain_cableway", "๐Ÿš ")
+ , ("tractor", "๐Ÿšœ")
+ , ("barber", "๐Ÿ’ˆ")
+ , ("busstop", "๐Ÿš")
+ , ("ticket", "๐ŸŽซ")
+ , ("vertical_traffic_light", "๐Ÿšฆ")
+ , ("traffic_light", "๐Ÿšฅ")
+ , ("warning", "โš ๏ธ")
+ , ("construction", "๐Ÿšง")
+ , ("beginner", "๐Ÿ”ฐ")
+ , ("fuelpump", "โ›ฝ")
+ , ("izakaya_lantern", "๐Ÿฎ")
+ , ("lantern", "๐Ÿฎ")
+ , ("slot_machine", "๐ŸŽฐ")
+ , ("hotsprings", "โ™จ๏ธ")
+ , ("moyai", "๐Ÿ—ฟ")
+ , ("circus_tent", "๐ŸŽช")
+ , ("performing_arts", "๐ŸŽญ")
+ , ("round_pushpin", "๐Ÿ“")
+ , ("triangular_flag_on_post", "๐Ÿšฉ")
+ , ("jp", "๐Ÿ‡ฏ๐Ÿ‡ต")
+ , ("kr", "๐Ÿ‡ฐ๐Ÿ‡ท")
+ , ("de", "๐Ÿ‡ฉ๐Ÿ‡ช")
+ , ("cn", "๐Ÿ‡จ๐Ÿ‡ณ")
+ , ("us", "๐Ÿ‡บ๐Ÿ‡ธ")
+ , ("fr", "๐Ÿ‡ซ๐Ÿ‡ท")
+ , ("es", "๐Ÿ‡ช๐Ÿ‡ธ")
+ , ("it", "๐Ÿ‡ฎ๐Ÿ‡น")
+ , ("ru", "๐Ÿ‡ท๐Ÿ‡บ")
+ , ("gb", "๐Ÿ‡ฌ๐Ÿ‡ง")
+ , ("uk", "๐Ÿ‡ฌ๐Ÿ‡ง")
+ , ("one", "1๏ธโƒฃ")
+ , ("two", "2๏ธโƒฃ")
+ , ("three", "3๏ธโƒฃ")
+ , ("four", "4๏ธโƒฃ")
+ , ("five", "5๏ธโƒฃ")
+ , ("six", "6๏ธโƒฃ")
+ , ("seven", "7๏ธโƒฃ")
+ , ("eight", "8๏ธโƒฃ")
+ , ("nine", "9๏ธโƒฃ")
+ , ("zero", "0๏ธโƒฃ")
+ , ("keycap_ten", "๐Ÿ”Ÿ")
+ , ("hash", "#๏ธโƒฃ")
+ , ("symbols", "๐Ÿ”ฃ")
+ , ("arrow_up", "โฌ†๏ธ")
+ , ("arrow_down", "โฌ‡๏ธ")
+ , ("arrow_left", "โฌ…๏ธ")
+ , ("arrow_right", "โžก๏ธ")
+ , ("capital_abcd", "๐Ÿ” ")
+ , ("abcd", "๐Ÿ”ก")
+ , ("abc", "๐Ÿ”ค")
+ , ("arrow_upper_right", "โ†—๏ธ")
+ , ("arrow_upper_left", "โ†–๏ธ")
+ , ("arrow_lower_right", "โ†˜๏ธ")
+ , ("arrow_lower_left", "โ†™๏ธ")
+ , ("left_right_arrow", "โ†”๏ธ")
+ , ("arrow_up_down", "โ†•๏ธ")
+ , ("arrows_counterclockwise", "๐Ÿ”„")
+ , ("arrow_backward", "โ—€๏ธ")
+ , ("arrow_forward", "โ–ถ๏ธ")
+ , ("arrow_up_small", "๐Ÿ”ผ")
+ , ("arrow_down_small", "๐Ÿ”ฝ")
+ , ("leftwards_arrow_with_hook", "โ†ฉ๏ธ")
+ , ("arrow_right_hook", "โ†ช๏ธ")
+ , ("information_source", "โ„น๏ธ")
+ , ("rewind", "โช")
+ , ("fast_forward", "โฉ")
+ , ("arrow_double_up", "โซ")
+ , ("arrow_double_down", "โฌ")
+ , ("arrow_heading_down", "โคต๏ธ")
+ , ("arrow_heading_up", "โคด๏ธ")
+ , ("ok", "๐Ÿ†—")
+ , ("twisted_rightwards_arrows", "๐Ÿ”€")
+ , ("repeat", "๐Ÿ”")
+ , ("repeat_one", "๐Ÿ”‚")
+ , ("new", "๐Ÿ†•")
+ , ("up", "๐Ÿ†™")
+ , ("cool", "๐Ÿ†’")
+ , ("free", "๐Ÿ†“")
+ , ("ng", "๐Ÿ†–")
+ , ("signal_strength", "๐Ÿ“ถ")
+ , ("cinema", "๐ŸŽฆ")
+ , ("koko", "๐Ÿˆ")
+ , ("u6307", "๐Ÿˆฏ")
+ , ("u7a7a", "๐Ÿˆณ")
+ , ("u6e80", "๐Ÿˆต")
+ , ("u5408", "๐Ÿˆด")
+ , ("u7981", "๐Ÿˆฒ")
+ , ("ideograph_advantage", "๐Ÿ‰")
+ , ("u5272", "๐Ÿˆน")
+ , ("u55b6", "๐Ÿˆบ")
+ , ("u6709", "๐Ÿˆถ")
+ , ("u7121", "๐Ÿˆš")
+ , ("restroom", "๐Ÿšป")
+ , ("mens", "๐Ÿšน")
+ , ("womens", "๐Ÿšบ")
+ , ("baby_symbol", "๐Ÿšผ")
+ , ("wc", "๐Ÿšพ")
+ , ("potable_water", "๐Ÿšฐ")
+ , ("put_litter_in_its_place", "๐Ÿšฎ")
+ , ("parking", "๐Ÿ…ฟ๏ธ")
+ , ("wheelchair", "โ™ฟ")
+ , ("no_smoking", "๐Ÿšญ")
+ , ("u6708", "๐Ÿˆท๏ธ")
+ , ("u7533", "๐Ÿˆธ")
+ , ("sa", "๐Ÿˆ‚๏ธ")
+ , ("m", "โ“‚๏ธ")
+ , ("passport_control", "๐Ÿ›‚")
+ , ("baggage_claim", "๐Ÿ›„")
+ , ("left_luggage", "๐Ÿ›…")
+ , ("customs", "๐Ÿ›ƒ")
+ , ("accept", "๐Ÿ‰‘")
+ , ("secret", "ใŠ™๏ธ")
+ , ("congratulations", "ใŠ—๏ธ")
+ , ("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", "โœณ๏ธ")
+ , ("sparkle", "โ‡๏ธ")
+ , ("negative_squared_cross_mark", "โŽ")
+ , ("white_check_mark", "โœ…")
+ , ("eight_pointed_black_star", "โœด๏ธ")
+ , ("heart_decoration", "๐Ÿ’Ÿ")
+ , ("vs", "๐Ÿ†š")
+ , ("vibration_mode", "๐Ÿ“ณ")
+ , ("mobile_phone_off", "๐Ÿ“ด")
+ , ("a", "๐Ÿ…ฐ๏ธ")
+ , ("b", "๐Ÿ…ฑ๏ธ")
+ , ("ab", "๐Ÿ†Ž")
+ , ("o2", "๐Ÿ…พ๏ธ")
+ , ("diamond_shape_with_a_dot_inside", "๐Ÿ’ ")
+ , ("loop", "โžฟ")
+ , ("recycle", "โ™ป๏ธ")
+ , ("aries", "โ™ˆ")
+ , ("taurus", "โ™‰")
+ , ("gemini", "โ™Š")
+ , ("cancer", "โ™‹")
+ , ("leo", "โ™Œ")
+ , ("virgo", "โ™")
+ , ("libra", "โ™Ž")
+ , ("scorpius", "โ™")
+ , ("sagittarius", "โ™")
+ , ("capricorn", "โ™‘")
+ , ("aquarius", "โ™’")
+ , ("pisces", "โ™“")
+ , ("ophiuchus", "โ›Ž")
+ , ("six_pointed_star", "๐Ÿ”ฏ")
+ , ("atm", "๐Ÿง")
+ , ("chart", "๐Ÿ’น")
+ , ("heavy_dollar_sign", "๐Ÿ’ฒ")
+ , ("currency_exchange", "๐Ÿ’ฑ")
+ , ("copyright", "ยฉ๏ธ")
+ , ("registered", "ยฎ๏ธ")
+ , ("tm", "โ„ข๏ธ")
+ , ("x", "โŒ")
+ , ("bangbang", "โ€ผ๏ธ")
+ , ("interrobang", "โ‰๏ธ")
+ , ("exclamation", "โ—")
+ , ("heavy_exclamation_mark", "โ—")
+ , ("question", "โ“")
+ , ("grey_exclamation", "โ•")
+ , ("grey_question", "โ”")
+ , ("o", "โญ•")
+ , ("top", "๐Ÿ”")
+ , ("end", "๐Ÿ”š")
+ , ("back", "๐Ÿ”™")
+ , ("on", "๐Ÿ”›")
+ , ("soon", "๐Ÿ”œ")
+ , ("arrows_clockwise", "๐Ÿ”ƒ")
+ , ("clock12", "๐Ÿ•›")
+ , ("clock1230", "๐Ÿ•ง")
+ , ("clock1", "๐Ÿ•")
+ , ("clock130", "๐Ÿ•œ")
+ , ("clock2", "๐Ÿ•‘")
+ , ("clock230", "๐Ÿ•")
+ , ("clock3", "๐Ÿ•’")
+ , ("clock330", "๐Ÿ•ž")
+ , ("clock4", "๐Ÿ•“")
+ , ("clock430", "๐Ÿ•Ÿ")
+ , ("clock5", "๐Ÿ•”")
+ , ("clock530", "๐Ÿ• ")
+ , ("clock6", "๐Ÿ••")
+ , ("clock7", "๐Ÿ•–")
+ , ("clock8", "๐Ÿ•—")
+ , ("clock9", "๐Ÿ•˜")
+ , ("clock10", "๐Ÿ•™")
+ , ("clock11", "๐Ÿ•š")
+ , ("clock630", "๐Ÿ•ก")
+ , ("clock730", "๐Ÿ•ข")
+ , ("clock830", "๐Ÿ•ฃ")
+ , ("clock930", "๐Ÿ•ค")
+ , ("clock1030", "๐Ÿ•ฅ")
+ , ("clock1130", "๐Ÿ•ฆ")
+ , ("heavy_multiplication_x", "โœ–๏ธ")
+ , ("heavy_plus_sign", "โž•")
+ , ("heavy_minus_sign", "โž–")
+ , ("heavy_division_sign", "โž—")
+ , ("spades", "โ™ ๏ธ")
+ , ("hearts", "โ™ฅ๏ธ")
+ , ("clubs", "โ™ฃ๏ธ")
+ , ("diamonds", "โ™ฆ๏ธ")
+ , ("white_flower", "๐Ÿ’ฎ")
+ , ("heavy_check_mark", "โœ”๏ธ")
+ , ("ballot_box_with_check", "โ˜‘๏ธ")
+ , ("radio_button", "๐Ÿ”˜")
+ , ("link", "๐Ÿ”—")
+ , ("curly_loop", "โžฐ")
+ , ("wavy_dash", "ใ€ฐ๏ธ")
+ , ("part_alternation_mark", "ใ€ฝ๏ธ")
+ , ("trident", "๐Ÿ”ฑ")
+ , ("black_medium_square", "โ—ผ๏ธ")
+ , ("white_medium_square", "โ—ป๏ธ")
+ , ("black_medium_small_square", "โ—พ")
+ , ("white_medium_small_square", "โ—ฝ")
+ , ("black_small_square", "โ–ช๏ธ")
+ , ("white_small_square", "โ–ซ๏ธ")
+ , ("small_red_triangle", "๐Ÿ”บ")
+ , ("black_square_button", "๐Ÿ”ฒ")
+ , ("white_square_button", "๐Ÿ”ณ")
+ , ("black_circle", "โšซ")
+ , ("white_circle", "โšช")
+ , ("red_circle", "๐Ÿ”ด")
+ , ("large_blue_circle", "๐Ÿ”ต")
+ , ("small_red_triangle_down", "๐Ÿ”ป")
+ , ("white_large_square", "โฌœ")
+ , ("black_large_square", "โฌ›")
+ , ("large_orange_diamond", "๐Ÿ”ถ")
+ , ("large_blue_diamond", "๐Ÿ”ท")
+ , ("small_orange_diamond", "๐Ÿ”ธ")
+ , ("small_blue_diamond", "๐Ÿ”น")
+ ]
diff --git a/src/Text/Pandoc/Options.hs b/src/Text/Pandoc/Options.hs
index 20c842e0d..b7d268a65 100644
--- a/src/Text/Pandoc/Options.hs
+++ b/src/Text/Pandoc/Options.hs
@@ -105,6 +105,7 @@ data Extension =
| Ext_ignore_line_breaks -- ^ Newlines in paragraphs are ignored
| Ext_literate_haskell -- ^ Enable literate Haskell conventions
| Ext_abbreviations -- ^ PHP markdown extra abbreviation definitions
+ | Ext_emoji -- ^ Support emoji like :smile:
| Ext_auto_identifiers -- ^ Automatic identifiers for headers
| Ext_ascii_identifiers -- ^ ascii-only identifiers for headers
| Ext_header_attributes -- ^ Explicit header attributes {#id .class k=v}
@@ -203,6 +204,7 @@ githubMarkdownExtensions = Set.fromList
, Ext_intraword_underscores
, Ext_strikeout
, Ext_hard_line_breaks
+ , Ext_emoji
, Ext_lists_without_preceding_blankline
, Ext_shortcut_reference_links
]
diff --git a/src/Text/Pandoc/Parsing.hs b/src/Text/Pandoc/Parsing.hs
index c64860ad9..02d114e0f 100644
--- a/src/Text/Pandoc/Parsing.hs
+++ b/src/Text/Pandoc/Parsing.hs
@@ -1211,7 +1211,8 @@ citeKey = try $ do
firstChar <- alphaNum <|> char '_' <|> char '*' -- @* for wildcard in nocite
let regchar = satisfy (\c -> isAlphaNum c || c == '_')
let internal p = try $ p <* lookAhead regchar
- rest <- many $ regchar <|> internal (oneOf ":.#$%&-+?<>~/")
+ rest <- many $ regchar <|> internal (oneOf ":.#$%&-+?<>~/") <|>
+ (oneOf ":/" <* lookAhead (char '/'))
let key = firstChar:rest
return (suppress_author, key)
diff --git a/src/Text/Pandoc/Readers/Markdown.hs b/src/Text/Pandoc/Readers/Markdown.hs
index d73b92fbd..7e811a966 100644
--- a/src/Text/Pandoc/Readers/Markdown.hs
+++ b/src/Text/Pandoc/Readers/Markdown.hs
@@ -39,6 +39,7 @@ import Data.Ord ( comparing )
import Data.Char ( isSpace, isAlphaNum, toLower )
import Data.Maybe
import Text.Pandoc.Definition
+import Text.Pandoc.Emoji (emojis)
import qualified Data.Text as T
import Data.Text (Text)
import qualified Data.Yaml as Yaml
@@ -1467,6 +1468,7 @@ inline = choice [ whitespace
, exampleRef
, smart
, return . B.singleton <$> charRef
+ , emoji
, symbol
, ltSign
] <?> "inline"
@@ -1898,6 +1900,21 @@ rawHtmlInline = do
else not . isTextTag
return $ return $ B.rawInline "html" result
+-- Emoji
+
+emojiChars :: [Char]
+emojiChars = ['a'..'z'] ++ ['0'..'9'] ++ ['_','+','-']
+
+emoji :: MarkdownParser (F Inlines)
+emoji = try $ do
+ guardEnabled Ext_emoji
+ char ':'
+ emojikey <- many1 (oneOf emojiChars)
+ char ':'
+ case M.lookup emojikey emojis of
+ Just s -> return (return (B.str s))
+ Nothing -> mzero
+
-- Citations
cite :: MarkdownParser (F Inlines)
diff --git a/src/Text/Pandoc/Readers/Org.hs b/src/Text/Pandoc/Readers/Org.hs
index 44474a37a..3be47cfd4 100644
--- a/src/Text/Pandoc/Readers/Org.hs
+++ b/src/Text/Pandoc/Readers/Org.hs
@@ -21,7 +21,7 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
{- |
Module : Text.Pandoc.Readers.Org
- Copyright : Copyright (C) 2014 Albert Krewinkel
+ Copyright : Copyright (C) 2014-2015 Albert Krewinkel
License : GNU GPL, version 2 or above
Maintainer : Albert Krewinkel <tarleb+pandoc@moltkeplatz.de>
@@ -1588,8 +1588,11 @@ smart :: OrgParser (F Inlines)
smart = do
getOption readerSmart >>= guard
doubleQuoted <|> singleQuoted <|>
- choice (map (return <$>) [orgApostrophe, dash, ellipses])
- where orgApostrophe =
+ choice (map (return <$>) [orgApostrophe, orgDash, orgEllipses])
+ where
+ orgDash = dash <* updatePositions '-'
+ orgEllipses = ellipses <* updatePositions '.'
+ orgApostrophe =
(char '\'' <|> char '\8217') <* updateLastPreCharPos
<* updateLastForbiddenCharPos
*> return (B.str "\x2019")
@@ -1597,9 +1600,10 @@ smart = do
singleQuoted :: OrgParser (F Inlines)
singleQuoted = try $ do
singleQuoteStart
+ updatePositions '\''
withQuoteContext InSingleQuote $
fmap B.singleQuoted . trimInlinesF . mconcat <$>
- many1Till inline singleQuoteEnd
+ many1Till inline (singleQuoteEnd <* updatePositions '\'')
-- doubleQuoted will handle regular double-quoted sections, as well
-- as dialogues with an open double-quote without a close double-quote
@@ -1607,6 +1611,7 @@ singleQuoted = try $ do
doubleQuoted :: OrgParser (F Inlines)
doubleQuoted = try $ do
doubleQuoteStart
+ updatePositions '"'
contents <- mconcat <$> many (try $ notFollowedBy doubleQuoteEnd >> inline)
(withQuoteContext InDoubleQuote $ (doubleQuoteEnd <* updateLastForbiddenCharPos) >> return
(fmap B.doubleQuoted . trimInlinesF $ contents))
diff --git a/tests/Tests/Readers/Markdown.hs b/tests/Tests/Readers/Markdown.hs
index f6afacb34..366ab7413 100644
--- a/tests/Tests/Readers/Markdown.hs
+++ b/tests/Tests/Readers/Markdown.hs
@@ -185,6 +185,10 @@ tests = [ testGroup "inline code"
"<\n\na>" =?>
para (text "<") <> para (text "a>")
]
+ , testGroup "emoji"
+ [ test markdownGH "emoji symbols" $
+ ":smile: and :+1:" =?> para (text "๐Ÿ˜„ and ๐Ÿ‘")
+ ]
, "unbalanced brackets" =:
"[[[[[[[[[[[[[[[hi" =?> para (text "[[[[[[[[[[[[[[[hi")
, testGroup "backslash escapes"
diff --git a/tests/Tests/Readers/Org.hs b/tests/Tests/Readers/Org.hs
index d956e89e3..9e7399aa0 100644
--- a/tests/Tests/Readers/Org.hs
+++ b/tests/Tests/Readers/Org.hs
@@ -1250,6 +1250,7 @@ tests =
]
in codeBlockWith ( "", classes, params) "code body\n"
]
+
, testGroup "Smart punctuation"
[ test orgSmart "quote before ellipses"
("'...hi'"
@@ -1270,5 +1271,13 @@ tests =
, test orgSmart "Dashes are allowed at the borders of emphasis'"
("/foo---/" =?>
para (emph "fooโ€”"))
+
+ , test orgSmart "Single quotes can be followed by emphasized text"
+ ("Singles on the '/meat market/'" =?>
+ para ("Singles on the " <> (singleQuoted $ emph "meat market")))
+
+ , test orgSmart "Double quotes can be followed by emphasized text"
+ ("Double income, no kids: \"/DINK/\"" =?>
+ para ("Double income, no kids: " <> (doubleQuoted $ emph "DINK")))
]
]