From d820eb2c47bccfd81a51503e997596addb584198 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Tue, 12 Mar 2013 19:18:14 -0700 Subject: [PATCH] Markdown reader: Handle unmatched double quotes in dialogues. They do not generate a Quoted element; instead, the double quote is just turned into a Str with a curly left quote. This should satisfy the fiction writers. Closes #99 (again). --- src/Text/Pandoc/Readers/Markdown.hs | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/Text/Pandoc/Readers/Markdown.hs b/src/Text/Pandoc/Readers/Markdown.hs index 50ee1aef3f82..591fcf155d29 100644 --- a/src/Text/Pandoc/Readers/Markdown.hs +++ b/src/Text/Pandoc/Readers/Markdown.hs @@ -1748,9 +1748,14 @@ singleQuoted = try $ do fmap B.singleQuoted . trimInlinesF . mconcat <$> many1Till inline singleQuoteEnd +-- doubleQuoted will handle regular double-quoted sections, as well +-- as dialogues with an open double-quote without a close double-quote +-- in the same paragraph. doubleQuoted :: MarkdownParser (F Inlines) doubleQuoted = try $ do doubleQuoteStart - withQuoteContext InDoubleQuote $ - fmap B.doubleQuoted . trimInlinesF . mconcat <$> - many1Till inline doubleQuoteEnd + contents <- mconcat <$> many (try $ notFollowedBy doubleQuoteEnd >> inline) + (withQuoteContext InDoubleQuote $ doubleQuoteEnd >> return + (fmap B.doubleQuoted . trimInlinesF $ contents)) + <|> (return $ return (B.str "\8220") <> contents) +