@@ -119,20 +119,15 @@ anyEnvironment = try $ do
120-- | Process LaTeX preamble, extracting metadata.
120-- | Process LaTeX preamble, extracting metadata.
121processLaTeXPreamble :: GenParser Char ParserState ()
121processLaTeXPreamble :: GenParser Char ParserState ()
122−processLaTeXPreamble = try $ manyTill
122+processLaTeXPreamble =
123− (choice [bibliographic, comment, unknownCommand, nullBlock])
123+ skipMany $ notFollowedBy' anyEnvironment >> block
124− (try (string "\\begin{document}")) >>
127-- | Parse LaTeX and return 'Pandoc'.
125-- | Parse LaTeX and return 'Pandoc'.
128parseLaTeX :: GenParser Char ParserState Pandoc
126parseLaTeX :: GenParser Char ParserState Pandoc
129parseLaTeX = do
127parseLaTeX = do
130− optional processLaTeXPreamble -- preamble might not be present (fragment)
132− blocks <- parseBlocks
134− optional $ try (string "\\end{document}" >> many anyChar)
129+ blocks <- try (processLaTeXPreamble >> spaces >> environment "document")
135− -- might not be present (fragment)
130+ <|> many block
138 state <- getState
133 state <- getState
@@ -420,8 +415,8 @@ ignore = try $ do
421unknownCommand :: GenParser Char ParserState Block
416unknownCommand :: GenParser Char ParserState Block
422unknownCommand = try $ do
417unknownCommand = try $ do
423− notFollowedBy' $ choice $ map end ["itemize", "enumerate", "description",
418+ spaces
424− "document"]
419+ notFollowedBy' $ oneOfStrings ["\\begin","\\end","\\item"]
425 state <- getState
420 state <- getState
426 when (stateParserContext state == ListItemState) $
421 when (stateParserContext state == ListItemState) $
427 notFollowedBy' (string "\\item")
422 notFollowedBy' (string "\\item")