From 5314df51f368853f7ee4bf8f75eedf43afc0400e Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Wed, 4 Dec 2013 10:00:40 -0800 Subject: Stop parsing "list lines" when we hit a block tag. This fixes exponential slowdown in certain input, e.g. a series of lists followed by ``. --- src/Text/Pandoc/Readers/Markdown.hs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'src/Text/Pandoc/Readers/Markdown.hs') diff --git a/src/Text/Pandoc/Readers/Markdown.hs b/src/Text/Pandoc/Readers/Markdown.hs index 33d1a9620..4cb75d86c 100644 --- a/src/Text/Pandoc/Readers/Markdown.hs +++ b/src/Text/Pandoc/Readers/Markdown.hs @@ -732,7 +732,8 @@ listLine = try $ do notFollowedBy' (do indentSpaces many (spaceChar) listStart) - chunks <- manyTill (liftM snd (htmlTag isCommentTag) <|> count 1 anyChar) newline + chunks <- manyTill (liftM snd (htmlTag isCommentTag) <|> count 1 (satisfy (/='<')) + <|> (notFollowedBy' (htmlTag isBlockTag) >> count 1 anyChar)) newline return $ concat chunks -- parse raw text for one list item, excluding start marker and continuations @@ -759,6 +760,7 @@ listContinuationLine :: MarkdownParser String listContinuationLine = try $ do notFollowedBy blankline notFollowedBy' listStart + notFollowedBy' $ try $ skipMany spaceChar >> htmlTag (~== TagClose "div") optional indentSpaces result <- anyLine return $ result ++ "\n" -- cgit v1.2.3