From d4b71a6423721c79852b96c4ac398dff1c7ac428 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Tue, 1 Feb 2011 22:35:27 -0800 Subject: Markdown reader: Simplified and corrected footnote block parser. --- src/Tests/Readers/Markdown.hs | 2 +- src/Text/Pandoc/Readers/Markdown.hs | 17 ++++++++++------- 2 files changed, 11 insertions(+), 8 deletions(-) (limited to 'src') diff --git a/src/Tests/Readers/Markdown.hs b/src/Tests/Readers/Markdown.hs index 9fc0496bb..eae03fcae 100644 --- a/src/Tests/Readers/Markdown.hs +++ b/src/Tests/Readers/Markdown.hs @@ -31,7 +31,7 @@ tests = [ testGroup "inline code" "[^1]\n\n[^1]: my note\n\n \nnot in note\n" =?> para (note (para "my note")) +++ para "not in note" , "indent followed by newline and indented text" =: - "[^1]\n\n[^1]: my note\n\n \n in note\n" + "[^1]\n\n[^1]: my note\n \n in note\n" =?> para (note (para "my note" +++ para "in note")) ] ] diff --git a/src/Text/Pandoc/Readers/Markdown.hs b/src/Text/Pandoc/Readers/Markdown.hs index 2bfb742bd..01cc5e2e8 100644 --- a/src/Text/Pandoc/Readers/Markdown.hs +++ b/src/Text/Pandoc/Readers/Markdown.hs @@ -245,15 +245,17 @@ noteMarker :: GenParser Char ParserState [Char] noteMarker = string "[^" >> many1Till (satisfy $ not . isBlank) (char ']') rawLine :: GenParser Char ParserState [Char] -rawLine = do +rawLine = try $ do notFollowedBy blankline notFollowedBy' $ try $ skipNonindentSpaces >> noteMarker - contents <- many1 nonEndline - end <- option "" (newline >> optional indentSpaces >> return "\n") - return $ contents ++ end + optional indentSpaces + anyLine rawLines :: GenParser Char ParserState [Char] -rawLines = many1 rawLine >>= return . concat +rawLines = do + first <- anyLine + rest <- many rawLine + return $ unlines (first:rest) noteBlock :: GenParser Char ParserState [Char] noteBlock = try $ do @@ -263,8 +265,9 @@ noteBlock = try $ do char ':' optional blankline optional indentSpaces - raw <- sepBy rawLines (try (blankline >> indentSpaces >> - notFollowedBy blankline)) + raw <- sepBy rawLines + (try (blankline >> indentSpaces >> + notFollowedBy blankline)) optional blanklines endPos <- getPosition let newnote = (ref, (intercalate "\n" raw) ++ "\n\n") -- cgit v1.2.3