aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--README22
-rw-r--r--src/Text/Pandoc/Readers/Markdown.hs9
2 files changed, 30 insertions, 1 deletions
diff --git a/README b/README
index f95a93758..23290fadd 100644
--- a/README
+++ b/README
@@ -342,6 +342,28 @@ using the `hsmarkdown` wrapper.
[standard markdown]: http://daringfireball.net/projects/markdown/syntax
"Markdown syntax description"
+Backslash escapes
+-----------------
+
+Except inside a code block or inline code, any punctuation or space
+character preceded by a backslash will be treated literally, even if it
+would normally indicate formatting. Thus, for example, if one writes
+
+ *\*hello\**
+
+one will get
+
+ <em>*hello*</em>
+
+instead of
+
+ <strong>hello</strong>
+
+This rule is easier to remember than standard markdown's rule,
+which allows only the following characters to be backslash-escaped:
+
+ \`*_{}[]()>#+-.!
+
Lists
-----
diff --git a/src/Text/Pandoc/Readers/Markdown.hs b/src/Text/Pandoc/Readers/Markdown.hs
index f72918a0e..4e6a7b39c 100644
--- a/src/Text/Pandoc/Readers/Markdown.hs
+++ b/src/Text/Pandoc/Readers/Markdown.hs
@@ -32,6 +32,7 @@ module Text.Pandoc.Readers.Markdown (
) where
import Data.List ( findIndex, sortBy )
+import Data.Char ( isAlphaNum )
import Text.ParserCombinators.Pandoc
import Text.Pandoc.Definition
import Text.Pandoc.Readers.LaTeX ( rawLaTeXInline, rawLaTeXEnvironment )
@@ -535,7 +536,13 @@ inline = choice [ rawLaTeXInline', escapedChar, special, text ] <?> "inline"
special = choice [ noteRef, inlineNote, link, referenceLink, rawHtmlInline',
autoLink, image ] <?> "link, inline html, note, or image"
-escapedChar = escaped anyChar
+escapedChar = try $ do
+ char '\\'
+ state <- getState
+ result <- if stateStrict state
+ then oneOf "\\`*_{}[]()>#+-.!"
+ else satisfy (not . isAlphaNum)
+ return (Str [result])
ltSign = try (do
notFollowedBy (noneOf "<") -- continue only if it's a <