summaryrefslogtreecommitdiff
path: root/src/Text/Pandoc/Readers/LaTeX.hs
diff options
context:
space:
mode:
authorJohn MacFarlane <fiddlosopher@gmail.com>2012-02-04 13:10:48 -0800
committerJohn MacFarlane <fiddlosopher@gmail.com>2012-02-04 13:10:48 -0800
commit1f90c6d7e0800621367ff72601a4f66159688ca9 (patch)
tree80cedfca1526d534237c2361017ebec221e9a512 /src/Text/Pandoc/Readers/LaTeX.hs
parent253a9e32aadea1064e429b4f561bf043c98d255f (diff)
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/Readers/LaTeX.hs')
-rw-r--r--src/Text/Pandoc/Readers/LaTeX.hs12
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