@@ -40,22 +40,20 @@ import Text.Pandoc.Shared
40import Text.Pandoc.Options
40import Text.Pandoc.Options
41import Text.Pandoc.Parsing hiding ((<|>), many, optional, space,
41import Text.Pandoc.Parsing hiding ((<|>), many, optional, space,
42 mathDisplay, mathInline)
42 mathDisplay, mathInline)
43−import qualified Text.Pandoc.UTF8 as UTF8
44import Data.Char ( chr, ord, isLetter, isAlphaNum )
43import Data.Char ( chr, ord, isLetter, isAlphaNum )
45−import Control.Monad.Trans (lift)
46import Control.Monad
44import Control.Monad
47import Text.Pandoc.Builder
45import Text.Pandoc.Builder
48import Control.Applicative ((<|>), many, optional)
46import Control.Applicative ((<|>), many, optional)
49import Data.Maybe (fromMaybe, maybeToList)
47import Data.Maybe (fromMaybe, maybeToList)
50−import System.FilePath (replaceExtension, (</>), takeExtension, addExtension)
48+import System.FilePath (replaceExtension, takeExtension, addExtension)
51import Data.List (intercalate)
49import Data.List (intercalate)
52import qualified Data.Map as M
50import qualified Data.Map as M
53import Text.Pandoc.Highlighting (fromListingsLanguage)
51import Text.Pandoc.Highlighting (fromListingsLanguage)
54import Text.Pandoc.ImageSize (numUnit, showFl)
52import Text.Pandoc.ImageSize (numUnit, showFl)
55import Text.Pandoc.Error
53import Text.Pandoc.Error
56−import Control.Monad.Except (throwError, catchError)
54+import Control.Monad.Except (throwError)
57−import Text.Pandoc.Class (PandocMonad, PandocPure, lookupEnv, readFileLazy,
55+import Text.Pandoc.Class (PandocMonad, PandocPure, lookupEnv,
58− warning, warningWithPos)
56+ warningWithPos, readFileFromDirs)
60-- | Parse LaTeX from string and return 'Pandoc' document.
58-- | Parse LaTeX from string and return 'Pandoc' document.
61readLaTeX :: PandocMonad m
59readLaTeX :: PandocMonad m
@@ -960,17 +958,18 @@ include = do
960 return $ if name == "usepackage"
958 return $ if name == "usepackage"
961 then map (maybeAddExtension ".sty") fs
959 then map (maybeAddExtension ".sty") fs
962 else map (maybeAddExtension ".tex") fs
960 else map (maybeAddExtension ".tex") fs
961+ dirs <- (splitBy (==':') . fromMaybe ".") <$> lookupEnv "TEXINPUTS"
963− mconcat <$> mapM insertIncludedFile fs'
962+ mconcat <$> mapM (insertIncludedFile dirs) fs'
965−insertIncludedFile :: PandocMonad m => FilePath -> LP m Blocks
964+insertIncludedFile :: PandocMonad m => [FilePath] -> FilePath -> LP m Blocks
966−insertIncludedFile f = do
965+insertIncludedFile dirs f = do
967 oldPos <- getPosition
966 oldPos <- getPosition
968 oldInput <- getInput
967 oldInput <- getInput
969 containers <- stateContainers <$> getState
968 containers <- stateContainers <$> getState
970 when (f `elem` containers) $
969 when (f `elem` containers) $
971 throwError $ PandocParseError $ "Include file loop at " ++ show oldPos
970 throwError $ PandocParseError $ "Include file loop at " ++ show oldPos
972 updateState $ \s -> s{ stateContainers = f : stateContainers s }
971 updateState $ \s -> s{ stateContainers = f : stateContainers s }
973− contents <- lift $ readTeXFile f
972+ contents <- readFileFromDirs dirs f
974 setPosition $ newPos f 1 1
973 setPosition $ newPos f 1 1
975 setInput contents
974 setInput contents
976 bs <- blocks
975 bs <- blocks
@@ -979,25 +978,6 @@ insertIncludedFile f = do
979 updateState $ \s -> s{ stateContainers = tail $ stateContainers s }
978 updateState $ \s -> s{ stateContainers = tail $ stateContainers s }
980 return bs
979 return bs
982−readTeXFile :: PandocMonad m => FilePath -> m String
984− texinputs <- fromMaybe "." <$> lookupEnv "TEXINPUTS"
985− readFileFromDirs (splitBy (==':') texinputs) f
987−readFileFromDirs :: PandocMonad m => [FilePath] -> FilePath -> m String
988−readFileFromDirs [] f = do
989− warning $ "Could not load include file " ++ f ++ ", skipping."
991−readFileFromDirs (d:ds) f = do
992− res <- readFileLazy' (d </> f)
995− Left _ -> readFileFromDirs ds f
997−readFileLazy' :: PandocMonad m => FilePath -> m (Either PandocError String)
998−readFileLazy' f = catchError ((Right . UTF8.toStringLazy) <$> readFileLazy f) $
999− \(e :: PandocError) -> return (Left e)
1003keyval :: PandocMonad m => LP m (String, String)
983keyval :: PandocMonad m => LP m (String, String)