summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn MacFarlane <jgm@berkeley.edu>2014-08-16 17:14:51 -0700
committerJohn MacFarlane <jgm@berkeley.edu>2014-08-16 17:14:51 -0700
commitcb4ae6112e4bf9b12b3131fa96fc8d29b1e77dec (patch)
tree27034e7e11526aeb8ada299d1ec84994f3528690
parentfd8ad0413bf7b782142558c112862a8f99b9796d (diff)
Markdown writer: don't escape $, ^, ~ when extensions are deactivated.
`tex_math_dollars`, `superscript`, and `subscript` extensions, respectively. Closes #1127.
-rw-r--r--src/Text/Pandoc/Writers/Markdown.hs21
1 files changed, 16 insertions, 5 deletions
diff --git a/src/Text/Pandoc/Writers/Markdown.hs b/src/Text/Pandoc/Writers/Markdown.hs
index 95d4db29b..f06f1d6cc 100644
--- a/src/Text/Pandoc/Writers/Markdown.hs
+++ b/src/Text/Pandoc/Writers/Markdown.hs
@@ -241,9 +241,20 @@ noteToMarkdown opts num blocks = do
else marker <> spacer <> contents
-- | Escape special characters for Markdown.
-escapeString :: String -> String
-escapeString = escapeStringUsing markdownEscapes
- where markdownEscapes = backslashEscapes "\\`*_$<>#~^"
+escapeString :: WriterOptions -> String -> String
+escapeString opts = escapeStringUsing markdownEscapes
+ where markdownEscapes = backslashEscapes specialChars
+ specialChars =
+ (if isEnabled Ext_superscript opts
+ then ('^':)
+ else id) .
+ (if isEnabled Ext_subscript opts
+ then ('~':)
+ else id) .
+ (if isEnabled Ext_tex_math_dollars opts
+ then ('$':)
+ else id) $
+ "\\`*_<>#"
-- | Construct table of contents from list of header blocks.
tableOfContents :: WriterOptions -> [Block] -> Doc
@@ -742,11 +753,11 @@ inlineToMarkdown opts (Code attr str) = do
if plain
then return $ text str
else return $ text (marker ++ spacer ++ str ++ spacer ++ marker) <> attrs
-inlineToMarkdown _ (Str str) = do
+inlineToMarkdown opts (Str str) = do
st <- get
if stPlain st
then return $ text str
- else return $ text $ escapeString str
+ else return $ text $ escapeString opts str
inlineToMarkdown opts (Math InlineMath str)
| isEnabled Ext_tex_math_dollars opts =
return $ "$" <> text str <> "$"