From 529146decf7f0e390964bb7aa709082af6e8639b Mon Sep 17 00:00:00 2001 From: Albert Krewinkel <albert@zeitkraut.de> Date: Thu, 14 Jul 2016 13:23:18 +0200 Subject: [PATCH] Org reader: fix parsing of verbatim inlines Org rules for allowed characters before or after markup chars were not checked for verbatim text. This resultet in wrong parsing outcomes of if the verbatim text contained e.g. space enclosed markup characters as part of the text (`=is_substr = True=`). Forcing the parser to update the positions of allowed/forbidden markup border characters fixes this. This fixes #3016. --- src/Text/Pandoc/Readers/Org/Inlines.hs | 6 ++++-- tests/Tests/Readers/Org.hs | 3 +++ 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/Text/Pandoc/Readers/Org/Inlines.hs b/src/Text/Pandoc/Readers/Org/Inlines.hs index 6a8773c3c..e1a66a8c7 100644 --- a/src/Text/Pandoc/Readers/Org/Inlines.hs +++ b/src/Text/Pandoc/Readers/Org/Inlines.hs @@ -614,7 +614,7 @@ displayMath = return . B.displayMath <$> choice [ rawMathBetween "\\[" "\\]" ] updatePositions :: Char - -> OrgParser (Char) + -> OrgParser Char updatePositions c = do when (c `elem` emphasisPreChars) updateLastPreCharPos when (c `elem` emphasisForbiddenBorderChars) updateLastForbiddenCharPos @@ -637,7 +637,9 @@ verbatimBetween :: Char -> OrgParser String verbatimBetween c = try $ emphasisStart c *> - many1TillNOrLessNewlines 1 (noneOf "\n\r") (emphasisEnd c) + many1TillNOrLessNewlines 1 verbatimChar (emphasisEnd c) + where + verbatimChar = noneOf "\n\r" >>= updatePositions -- | Parses a raw string delimited by @c@ using Org's math rules mathStringBetween :: Char diff --git a/tests/Tests/Readers/Org.hs b/tests/Tests/Readers/Org.hs index fdd9bc6bf..1f8a8a01e 100644 --- a/tests/Tests/Readers/Org.hs +++ b/tests/Tests/Readers/Org.hs @@ -185,6 +185,9 @@ tests = , "3" <> subscript "{}" , "4" <> superscript ("(a(" <> strong "b(c" <> ")d))") ]) + , "Verbatim text can contain equal signes (=)" =: + "=is_subst = True=" =?> + para (code "is_subst = True") , "Image" =: "[[./sunset.jpg]]" =?>