diff options
author | John MacFarlane <jgm@berkeley.edu> | 2013-12-04 10:00:40 -0800 |
---|---|---|
committer | John MacFarlane <jgm@berkeley.edu> | 2013-12-04 10:18:05 -0800 |
commit | 5314df51f368853f7ee4bf8f75eedf43afc0400e (patch) | |
tree | badab107cbc4e8d973d161b6975feaaeaa40134b /src/Text/Pandoc | |
parent | eebb15ba1d135169495641748bbe83cb6899441b (diff) | |
download | pandoc-5314df51f368853f7ee4bf8f75eedf43afc0400e.tar.gz |
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 `</div>`.
Diffstat (limited to 'src/Text/Pandoc')
-rw-r--r-- | src/Text/Pandoc/Readers/Markdown.hs | 4 |
1 files changed, 3 insertions, 1 deletions
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" |