From 9db98550dfc39d31072e43ac066154a483865fc4 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Tue, 7 Feb 2017 19:16:56 +0100 Subject: Refactored include file handling in LaTeX reader. --- src/Text/Pandoc/Readers/LaTeX.hs | 30 ++++++++++++++++-------------- 1 file changed, 16 insertions(+), 14 deletions(-) (limited to 'src/Text/Pandoc/Readers/LaTeX.hs') diff --git a/src/Text/Pandoc/Readers/LaTeX.hs b/src/Text/Pandoc/Readers/LaTeX.hs index ea284efef..5950ec852 100644 --- a/src/Text/Pandoc/Readers/LaTeX.hs +++ b/src/Text/Pandoc/Readers/LaTeX.hs @@ -960,22 +960,24 @@ include = do return $ if name == "usepackage" then map (maybeAddExtension ".sty") fs else map (maybeAddExtension ".tex") fs + mconcat <$> mapM insertIncludedFile fs' + +insertIncludedFile :: PandocMonad m => FilePath -> LP m Blocks +insertIncludedFile f = do oldPos <- getPosition oldInput <- getInput - -- now process each include file in order... - mconcat <$> forM fs' (\f -> do - containers <- stateContainers <$> getState - when (f `elem` containers) $ - throwError $ PandocParseError $ "Include file loop at " ++ show oldPos - updateState $ \s -> s{ stateContainers = f : stateContainers s } - contents <- lift $ readTeXFile f - setPosition $ newPos f 1 1 - setInput contents - bs <- blocks - setInput oldInput - setPosition oldPos - updateState $ \s -> s{ stateContainers = tail $ stateContainers s } - return bs) + containers <- stateContainers <$> getState + when (f `elem` containers) $ + throwError $ PandocParseError $ "Include file loop at " ++ show oldPos + updateState $ \s -> s{ stateContainers = f : stateContainers s } + contents <- lift $ readTeXFile f + setPosition $ newPos f 1 1 + setInput contents + bs <- blocks + setInput oldInput + setPosition oldPos + updateState $ \s -> s{ stateContainers = tail $ stateContainers s } + return bs readTeXFile :: PandocMonad m => FilePath -> m String readTeXFile f = do -- cgit v1.2.3