From d83b70f3a0d72c322b2c0da3c78d4478c20f7f93 Mon Sep 17 00:00:00 2001 From: fiddlosopher Date: Mon, 8 Jan 2007 23:54:15 +0000 Subject: [PATCH] + Changed 'escapedChar' in Markdown reader so that only the characters Markdown escapes are escaped in strict mode. When not in strict mode, Pandoc allows all non-alphanumeric characters to be escaped. + Added documentation of backslash escapes to README. git-svn-id: https://pandoc.googlecode.com/svn/trunk@461 788f1e2b-df1e-0410-8736-df70ead52e1b --- README | 22 ++++++++++++++++++++++ src/Text/Pandoc/Readers/Markdown.hs | 9 ++++++++- 2 files changed, 30 insertions(+), 1 deletion(-) 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 + + *hello* + +instead of + + hello + +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 <