Markdown parser performance improvement.
Do a quick lookahead to make sure what follows looks like a setext
header before parsing any Inlines. This gives a 15% performance
boost in one benchmark. Many thanks to knieriem for finding
the problem (in peg-markdown):
https://github.com/jgm/peg-markdown/issues/issue/3
commit3ffd7246173b8bdc0d25167355f55e3193aaa989
authorJohn MacFarlane <jgm@berkeley.edu>
dateSun 28 Nov 2010, 20:19 (16 years ago)
parente9cfbd5
src/Text/Pandoc/Readers/Markdown.hs+3
@@ -320,6 +320,9 @@ atxClosing = try $ skipMany (char '#') >> blanklines
320320
321321setextHeader :: GenParser Char ParserState Block
322322setextHeader = try $ do
323+ -- This lookahead prevents us from wasting time parsing Inlines
324+ -- unless necessary -- it gives a significant performance boost.
325+ lookAhead $ anyLine >> many1 (oneOf setextHChars) >> blankline
323326 text <- many1Till inline newline
324327 underlineChar <- oneOf setextHChars
325328 many (char underlineChar)