diff options
author | John MacFarlane <jgm@berkeley.edu> | 2017-08-08 12:05:20 -0700 |
---|---|---|
committer | John MacFarlane <jgm@berkeley.edu> | 2017-08-08 12:05:20 -0700 |
commit | 714d8a6377b83ce9e8b5ef5b721cc1f196341438 (patch) | |
tree | 9f26eedc3b62a1ac80b14d309afdc8f8013f7bef /src/Text/Pandoc/Readers | |
parent | 73caf92871a2fb40b6f092e90a86d366eca630cb (diff) | |
download | pandoc-714d8a6377b83ce9e8b5ef5b721cc1f196341438.tar.gz |
CommonMark reader: support `emoji` extension.
Diffstat (limited to 'src/Text/Pandoc/Readers')
-rw-r--r-- | src/Text/Pandoc/Readers/CommonMark.hs | 20 |
1 files changed, 19 insertions, 1 deletions
diff --git a/src/Text/Pandoc/Readers/CommonMark.hs b/src/Text/Pandoc/Readers/CommonMark.hs index ea9d696cb..4a5081d65 100644 --- a/src/Text/Pandoc/Readers/CommonMark.hs +++ b/src/Text/Pandoc/Readers/CommonMark.hs @@ -40,9 +40,10 @@ import Data.Text (Text, unpack) import qualified Data.Map as Map import Text.Pandoc.Class (PandocMonad) import Text.Pandoc.Definition +import Text.Pandoc.Emoji (emojis) import Text.Pandoc.Options import Text.Pandoc.Shared (stringify) -import Text.Pandoc.Walk (walkM) +import Text.Pandoc.Walk (walkM, walk) -- | Parse a CommonMark formatted string into a 'Pandoc' structure. readCommonMark :: PandocMonad m => ReaderOptions -> Text -> m Pandoc @@ -50,6 +51,9 @@ readCommonMark opts s = return $ (if enabled Ext_gfm_auto_identifiers then addHeaderIdentifiers else id) $ + (if enabled Ext_emoji + then addEmojis + else id) $ nodeToPandoc $ commonmarkToNode opts' exts s where opts' = [ optSmart | enabled Ext_smart ] exts = [ extStrikethrough | enabled Ext_strikeout ] ++ @@ -57,6 +61,20 @@ readCommonMark opts s = return $ [ extAutolink | enabled Ext_autolink_bare_uris ] enabled x = extensionEnabled x (readerExtensions opts) +addEmojis :: Pandoc -> Pandoc +addEmojis = walk go + where go (Str xs) = Str (convertEmojis xs) + go x = x + convertEmojis (':':xs) = + case break (==':') xs of + (ys,':':zs) -> + case Map.lookup ys emojis of + Just s -> s ++ convertEmojis zs + Nothing -> ':' : ys ++ convertEmojis (':':zs) + _ -> ':':xs + convertEmojis (x:xs) = x : convertEmojis xs + convertEmojis [] = [] + addHeaderIdentifiers :: Pandoc -> Pandoc addHeaderIdentifiers doc = evalState (walkM addHeaderId doc) mempty |