From 1f90c6d7e0800621367ff72601a4f66159688ca9 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 4 Feb 2012 13:10:48 -0800 Subject: LaTeX reader: Use kpsewhich to find paths for handleIncludes. Fall back without an error if kpsewhich is not available. --- src/Text/Pandoc/Readers/LaTeX.hs | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) (limited to 'src/Text/Pandoc') diff --git a/src/Text/Pandoc/Readers/LaTeX.hs b/src/Text/Pandoc/Readers/LaTeX.hs index 41f9c40f7..990c1b7d5 100644 --- a/src/Text/Pandoc/Readers/LaTeX.hs +++ b/src/Text/Pandoc/Readers/LaTeX.hs @@ -44,6 +44,8 @@ import Data.Char (isLetter) import Control.Applicative import Data.Monoid import System.FilePath (replaceExtension) +import System.Exit (ExitCode(..)) +import System.Process (readProcessWithExitCode) import qualified Data.Map as M -- | Parse LaTeX from string and return 'Pandoc' document. @@ -536,7 +538,7 @@ handleIncludes :: String -> IO String handleIncludes [] = return [] handleIncludes ('\\':xs) = case runParser include defaultParserState "input" ('\\':xs) of - Right (f, rest) -> do ys <- catch (readFile f) + Right (f, rest) -> do ys <- catch (kpsewhich f >>= readFile) (\e -> warn ("could not open included file `" ++ f ++ "': " ++ show e) >> return "") @@ -568,6 +570,14 @@ verbatimEnv = do rest <- getInput return (r,rest) +kpsewhich :: FilePath -> IO FilePath +kpsewhich f = do + (ec, ou, _) <- catch (readProcessWithExitCode "kpsewhich" [f] "") + (\_ -> return (ExitFailure 1, f, "")) + if ec == ExitSuccess + then return $ trim ou + else return f + -- | Parse any LaTeX environment and return a string containing -- the whole literal environment as raw TeX. rawLaTeXBlock :: GenParser Char ParserState String -- cgit v1.2.3