From 9abed458792564b610b2e999b01bae04ae0e23e0 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sun, 22 Sep 2019 12:00:55 -0700 Subject: RST reader: Fixed parsing of indented blocks. We were requiring consistent indentation, but this isn't required by RST, as long as each nonblank line of the block has *some* indentation. Closes #5753. --- src/Text/Pandoc/Readers/RST.hs | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) (limited to 'src') diff --git a/src/Text/Pandoc/Readers/RST.hs b/src/Text/Pandoc/Readers/RST.hs index 8875fdebe..fd20351b4 100644 --- a/src/Text/Pandoc/Readers/RST.hs +++ b/src/Text/Pandoc/Readers/RST.hs @@ -363,16 +363,19 @@ hrule = try $ do -- -- read a line indented by a given string -indentedLine :: Monad m => String -> ParserT [Char] st m [Char] +indentedLine :: (HasReaderOptions st, Monad m) + => Int -> ParserT [Char] st m [Char] indentedLine indents = try $ do - string indents + lookAhead spaceChar + gobbleAtMostSpaces indents anyLine -- one or more indented lines, possibly separated by blank lines. -- any amount of indentation will work. -indentedBlock :: Monad m => ParserT [Char] st m [Char] +indentedBlock :: (HasReaderOptions st, Monad m) + => ParserT [Char] st m [Char] indentedBlock = try $ do - indents <- lookAhead $ many1 spaceChar + indents <- length <$> lookAhead (many1 spaceChar) lns <- many1 $ try $ do b <- option "" blanklines l <- indentedLine indents return (b ++ l) @@ -389,10 +392,10 @@ quotedBlock = try $ do codeBlockStart :: Monad m => ParserT [Char] st m Char codeBlockStart = string "::" >> blankline >> blankline -codeBlock :: Monad m => ParserT [Char] st m Blocks +codeBlock :: (HasReaderOptions st, Monad m) => ParserT [Char] st m Blocks codeBlock = try $ codeBlockStart >> codeBlockBody -codeBlockBody :: Monad m => ParserT [Char] st m Blocks +codeBlockBody :: (HasReaderOptions st, Monad m) => ParserT [Char] st m Blocks codeBlockBody = try $ B.codeBlock . stripTrailingNewlines <$> (indentedBlock <|> quotedBlock) -- cgit v1.2.3