git.iko.soy/typeable/pandoc
on master help sign in
CommonMark reader: support `emoji` extension.
commit714d8a6377b83ce9e8b5ef5b721cc1f196341438 authorJohn MacFarlane <jgm@berkeley.edu> dateTue 8 Aug 2017, 12:05 (9 years ago) parent73caf92
1 file changed+19−1
src/Text/Pandoc/Readers/CommonMark.hs+19−1
src/Text/Pandoc/Readers/CommonMark.hs+19−1
@@ -40,9 +40,10 @@ import Data.Text (Text, unpack)
4040import qualified Data.Map as Map
4141import Text.Pandoc.Class (PandocMonad)
4242import Text.Pandoc.Definition
43+import Text.Pandoc.Emoji (emojis)
4344import Text.Pandoc.Options
4445import Text.Pandoc.Shared (stringify)
45−import Text.Pandoc.Walk (walkM)
46+import Text.Pandoc.Walk (walkM, walk)
4647
4748-- | Parse a CommonMark formatted string into a 'Pandoc' structure.
4849readCommonMark :: PandocMonad m => ReaderOptions -> Text -> m Pandoc
@@ -50,6 +51,9 @@ readCommonMark opts s = return $
5051 (if enabled Ext_gfm_auto_identifiers
5152 then addHeaderIdentifiers
5253 else id) $
54+ (if enabled Ext_emoji
55+ then addEmojis
56+ else id) $
5357 nodeToPandoc $ commonmarkToNode opts' exts s
5458 where opts' = [ optSmart | enabled Ext_smart ]
5559 exts = [ extStrikethrough | enabled Ext_strikeout ] ++
@@ -57,6 +61,20 @@ readCommonMark opts s = return $
5761 [ extAutolink | enabled Ext_autolink_bare_uris ]
5862 enabled x = extensionEnabled x (readerExtensions opts)
5963
64+addEmojis :: Pandoc -> Pandoc
65+addEmojis = walk go
66+ where go (Str xs) = Str (convertEmojis xs)
67+ go x = x
68+ convertEmojis (':':xs) =
69+ case break (==':') xs of
70+ (ys,':':zs) ->
71+ case Map.lookup ys emojis of
72+ Just s -> s ++ convertEmojis zs
73+ Nothing -> ':' : ys ++ convertEmojis (':':zs)
74+ _ -> ':':xs
75+ convertEmojis (x:xs) = x : convertEmojis xs
76+ convertEmojis [] = []
77+
6078addHeaderIdentifiers :: Pandoc -> Pandoc
6179addHeaderIdentifiers doc = evalState (walkM addHeaderId doc) mempty
6280