From 3535af019722fc5086e968cc485ab8b94b76f1fd Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Fri, 16 Feb 2018 15:59:03 -0800 Subject: Markdown writer: properly escape @ to avoid capture as citation. Closes #4366. --- src/Text/Pandoc/Writers/Markdown.hs | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/Text/Pandoc/Writers/Markdown.hs b/src/Text/Pandoc/Writers/Markdown.hs index c8b3a1526..cdd8f3b66 100644 --- a/src/Text/Pandoc/Writers/Markdown.hs +++ b/src/Text/Pandoc/Writers/Markdown.hs @@ -36,7 +36,7 @@ Markdown: module Text.Pandoc.Writers.Markdown (writeMarkdown, writePlain) where import Control.Monad.Reader import Control.Monad.State.Strict -import Data.Char (chr, isPunctuation, isSpace, ord) +import Data.Char (chr, isPunctuation, isSpace, ord, isAlphaNum) import Data.Default import qualified Data.HashMap.Strict as H import Data.List (find, group, intersperse, sortBy, stripPrefix, transpose) @@ -286,6 +286,12 @@ escapeString opts (c:cs) = '>' | isEnabled Ext_all_symbols_escapable opts -> '\\' : '>' : escapeString opts cs | otherwise -> ">" ++ escapeString opts cs + '@' | isEnabled Ext_citations opts -> + case cs of + (d:_) + | isAlphaNum d || d == '_' + -> '\\':'@':escapeString opts cs + _ -> '@':escapeString opts cs _ | c `elem` ['\\','`','*','_','[',']','#'] -> '\\':c:escapeString opts cs '|' | isEnabled Ext_pipe_tables opts -> '\\':'|':escapeString opts cs -- cgit v1.2.3