git.iko.soy/typeable/pandoc
on master help sign in
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
1 file changed+3
src/Text/Pandoc/Readers/Markdown.hs+3
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)