@@ -40,22 +40,20 @@ import Text.Pandoc.Shared
4040import Text.Pandoc.Options
4141import Text.Pandoc.Parsing hiding ((<|>), many, optional, space,
4242 mathDisplay, mathInline)
43−import qualified Text.Pandoc.UTF8 as UTF8
4443import Data.Char ( chr, ord, isLetter, isAlphaNum )
45−import Control.Monad.Trans (lift)
4644import Control.Monad
4745import Text.Pandoc.Builder
4846import Control.Applicative ((<|>), many, optional)
4947import Data.Maybe (fromMaybe, maybeToList)
50−import System.FilePath (replaceExtension, (</>), takeExtension, addExtension)
48+import System.FilePath (replaceExtension, takeExtension, addExtension)
5149import Data.List (intercalate)
5250import qualified Data.Map as M
5351import Text.Pandoc.Highlighting (fromListingsLanguage)
5452import Text.Pandoc.ImageSize (numUnit, showFl)
5553import Text.Pandoc.Error
56−import Control.Monad.Except (throwError, catchError)
57−import Text.Pandoc.Class (PandocMonad, PandocPure, lookupEnv, readFileLazy,
58− warning, warningWithPos)
54+import Control.Monad.Except (throwError)
55+import Text.Pandoc.Class (PandocMonad, PandocPure, lookupEnv,
56+ warningWithPos, readFileFromDirs)
5957
6058-- | Parse LaTeX from string and return 'Pandoc' document.
6159readLaTeX :: PandocMonad m
@@ -960,17 +958,18 @@ include = do
960958 return $ if name == "usepackage"
961959 then map (maybeAddExtension ".sty") fs
962960 else map (maybeAddExtension ".tex") fs
963− mconcat <$> mapM insertIncludedFile fs'
961+ dirs <- (splitBy (==':') . fromMaybe ".") <$> lookupEnv "TEXINPUTS"
962+ mconcat <$> mapM (insertIncludedFile dirs) fs'
964963
965−insertIncludedFile :: PandocMonad m => FilePath -> LP m Blocks
966−insertIncludedFile f = do
964+insertIncludedFile :: PandocMonad m => [FilePath] -> FilePath -> LP m Blocks
965+insertIncludedFile dirs f = do
967966 oldPos <- getPosition
968967 oldInput <- getInput
969968 containers <- stateContainers <$> getState
970969 when (f `elem` containers) $
971970 throwError $ PandocParseError $ "Include file loop at " ++ show oldPos
972971 updateState $ \s -> s{ stateContainers = f : stateContainers s }
973− contents <- lift $ readTeXFile f
972+ contents <- readFileFromDirs dirs f
974973 setPosition $ newPos f 1 1
975974 setInput contents
976975 bs <- blocks
@@ -979,25 +978,6 @@ insertIncludedFile f = do
979978 updateState $ \s -> s{ stateContainers = tail $ stateContainers s }
980979 return bs
981980
982−readTeXFile :: PandocMonad m => FilePath -> m String
983−readTeXFile f = do
984− texinputs <- fromMaybe "." <$> lookupEnv "TEXINPUTS"
985− readFileFromDirs (splitBy (==':') texinputs) f
986−
987−readFileFromDirs :: PandocMonad m => [FilePath] -> FilePath -> m String
988−readFileFromDirs [] f = do
989− warning $ "Could not load include file " ++ f ++ ", skipping."
990− return ""
991−readFileFromDirs (d:ds) f = do
992− res <- readFileLazy' (d </> f)
993− case res of
994− Right s -> return s
995− Left _ -> readFileFromDirs ds f
996−
997−readFileLazy' :: PandocMonad m => FilePath -> m (Either PandocError String)
998−readFileLazy' f = catchError ((Right . UTF8.toStringLazy) <$> readFileLazy f) $
999− \(e :: PandocError) -> return (Left e)
1000−
1001981----
1002982
1003983keyval :: PandocMonad m => LP m (String, String)