git.iko.soy/typeable/pandoc
on master help sign in
Markdown writer: properly escape @ to avoid capture as citation.
3535af0John MacFarlane
src/Text/Pandoc/Writers/Markdown.hs+7−1
@@ -36,7 +36,7 @@ Markdown: <http://daringfireball.net/projects/markdown/>
36module Text.Pandoc.Writers.Markdown (writeMarkdown, writePlain) where
36module Text.Pandoc.Writers.Markdown (writeMarkdown, writePlain) where
37import Control.Monad.Reader
37import Control.Monad.Reader
38import Control.Monad.State.Strict
38import Control.Monad.State.Strict
39−import Data.Char (chr, isPunctuation, isSpace, ord)
39+import Data.Char (chr, isPunctuation, isSpace, ord, isAlphaNum)
40import Data.Default
40import Data.Default
41import qualified Data.HashMap.Strict as H
41import qualified Data.HashMap.Strict as H
42import Data.List (find, group, intersperse, sortBy, stripPrefix, transpose)
42import Data.List (find, group, intersperse, sortBy, stripPrefix, transpose)
@@ -286,6 +286,12 @@ escapeString opts (c:cs) =
286 '>' | isEnabled Ext_all_symbols_escapable opts ->
286 '>' | isEnabled Ext_all_symbols_escapable opts ->
287 '\\' : '>' : escapeString opts cs
287 '\\' : '>' : escapeString opts cs
288 | otherwise -> "&gt;" ++ escapeString opts cs
288 | otherwise -> "&gt;" ++ escapeString opts cs
289+ '@' | isEnabled Ext_citations opts ->
290+ case cs of
291+ (d:_)
292+ | isAlphaNum d || d == '_'
293+ -> '\\':'@':escapeString opts cs
294+ _ -> '@':escapeString opts cs
289 _ | c `elem` ['\\','`','*','_','[',']','#'] ->
295 _ | c `elem` ['\\','`','*','_','[',']','#'] ->
290 '\\':c:escapeString opts cs
296 '\\':c:escapeString opts cs
291 '|' | isEnabled Ext_pipe_tables opts -> '\\':'|':escapeString opts cs
297 '|' | isEnabled Ext_pipe_tables opts -> '\\':'|':escapeString opts cs