git.iko.soy/typeable/pandoc
on master help sign in
LaTeX reader: Improved parsing of preamble.

Previously you'd get unexpected behavior on a document that contained '\begin{document}' in, say, a verbatim block.

commit2dfb45950ee0142f5454f5bab040e904dfaef21e authorJohn MacFarlane <jgm@berkeley.edu> dateFri 10 Dec 2010, 23:21 (16 years ago) parent9602f73
1 file changed+6−11
src/Text/Pandoc/Readers/LaTeX.hs+6−11
src/Text/Pandoc/Readers/LaTeX.hs+6−11
@@ -119,20 +119,15 @@ anyEnvironment = try $ do
119119
120120-- | Process LaTeX preamble, extracting metadata.
121121processLaTeXPreamble :: GenParser Char ParserState ()
122−processLaTeXPreamble = try $ manyTill
123− (choice [bibliographic, comment, unknownCommand, nullBlock])
124− (try (string "\\begin{document}")) >>
125− spaces
122+processLaTeXPreamble =
123+ skipMany $ notFollowedBy' anyEnvironment >> block
126124
127125-- | Parse LaTeX and return 'Pandoc'.
128126parseLaTeX :: GenParser Char ParserState Pandoc
129127parseLaTeX = do
130− optional processLaTeXPreamble -- preamble might not be present (fragment)
131− spaces
132− blocks <- parseBlocks
133128 spaces
134− optional $ try (string "\\end{document}" >> many anyChar)
135− -- might not be present (fragment)
129+ blocks <- try (processLaTeXPreamble >> spaces >> environment "document")
130+ <|> many block
136131 spaces
137132 eof
138133 state <- getState
@@ -420,8 +415,8 @@ ignore = try $ do
420415
421416unknownCommand :: GenParser Char ParserState Block
422417unknownCommand = try $ do
423− notFollowedBy' $ choice $ map end ["itemize", "enumerate", "description",
424− "document"]
418+ spaces
419+ notFollowedBy' $ oneOfStrings ["\\begin","\\end","\\item"]
425420 state <- getState
426421 when (stateParserContext state == ListItemState) $
427422 notFollowedBy' (string "\\item")