From 1a23bc65b8e8a07d2578ddb0f3b842353ba81dcf Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 11 Feb 2017 20:55:13 +0100 Subject: Fixed small bug in RST list parsing. See #3432. Previously the parser didn't handle properly this case: * - a - b * - c - d --- src/Text/Pandoc/Readers/RST.hs | 5 ++--- test/command/3432a.md | 19 +++++++++++++++++++ 2 files changed, 21 insertions(+), 3 deletions(-) create mode 100644 test/command/3432a.md diff --git a/src/Text/Pandoc/Readers/RST.hs b/src/Text/Pandoc/Readers/RST.hs index c5ddbbad8..ebb1d09e9 100644 --- a/src/Text/Pandoc/Readers/RST.hs +++ b/src/Text/Pandoc/Readers/RST.hs @@ -548,8 +548,7 @@ listItem :: PandocMonad m listItem start = try $ do (markerLength, first) <- rawListItem start rest <- many (listContinuation markerLength) - blanks <- choice [ try (many blankline <* lookAhead start), - many1 blankline ] -- whole list must end with blank. + skipMany1 blankline <|> () <$ lookAhead start -- parsing with ListItemState forces markers at beginning of lines to -- count as list item markers, even if not separated by blank space. -- see definition of "endline" @@ -557,7 +556,7 @@ listItem start = try $ do let oldContext = stateParserContext state setState $ state {stateParserContext = ListItemState} -- parse the extracted block, which may itself contain block elements - parsed <- parseFromString parseBlocks $ concat (first:rest) ++ blanks + parsed <- parseFromString parseBlocks $ concat (first:rest) ++ "\n" updateState (\st -> st {stateParserContext = oldContext}) return $ case B.toList parsed of [Para xs] -> B.singleton $ Plain xs diff --git a/test/command/3432a.md b/test/command/3432a.md new file mode 100644 index 000000000..5f25bce60 --- /dev/null +++ b/test/command/3432a.md @@ -0,0 +1,19 @@ +``` +% pandoc -f rst +* - a + - b +* - c + - d +^D + +``` + -- cgit v1.2.3