diff options
author | John MacFarlane <fiddlosopher@gmail.com> | 2012-02-04 13:10:48 -0800 |
---|---|---|
committer | John MacFarlane <fiddlosopher@gmail.com> | 2012-02-04 13:10:48 -0800 |
commit | 1f90c6d7e0800621367ff72601a4f66159688ca9 (patch) | |
tree | 80cedfca1526d534237c2361017ebec221e9a512 /src/Text/Pandoc | |
parent | 253a9e32aadea1064e429b4f561bf043c98d255f (diff) | |
download | pandoc-1f90c6d7e0800621367ff72601a4f66159688ca9.tar.gz |
LaTeX reader: Use kpsewhich to find paths for handleIncludes.
Fall back without an error if kpsewhich is not available.
Diffstat (limited to 'src/Text/Pandoc')
-rw-r--r-- | src/Text/Pandoc/Readers/LaTeX.hs | 12 |
1 files changed, 11 insertions, 1 deletions
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 |