From 1aed9208f883c3bf67f81582b149912de832273a Mon Sep 17 00:00:00 2001 From: Tim Lin Date: Mon, 10 Mar 2014 16:23:57 -0700 Subject: [PATCH] PDF: Use / as path separators in latex input only Fixes compile error on Windows for 5040f3e Reverted back to canonical file separators in all places except for arguments to the LaTeX builder and in TEXINPUTS See #1151. Note: Temporary directories still fail to be removed in Windows due to call of ByteString.Lazy.readFile creating process ownership of the compiled pdf file. --- src/Text/Pandoc/PDF.hs | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/src/Text/Pandoc/PDF.hs b/src/Text/Pandoc/PDF.hs index 4dfa1d827..a5f1597bd 100644 --- a/src/Text/Pandoc/PDF.hs +++ b/src/Text/Pandoc/PDF.hs @@ -56,11 +56,11 @@ import Data.List (intercalate) #endif withTempDir :: String -> (FilePath -> IO a) -> IO a -withTempDir f = +withTempDir = #ifdef _WINDOWS - withTempDirectory "." (f . changePathSeparators) + withTempDirectory "." #else - withSystemTempDirectory f + withSystemTempDirectory #endif #ifdef _WINDOWS @@ -99,8 +99,7 @@ handleImage' baseURL tmpdir (Image ils (src,tit)) = do let ext = fromMaybe (takeExtension src) $ extensionFromMimeType mime let basename = UTF8.toString $ B64.encode $ UTF8.fromString src - -- note: we want / even on Windows, for TexLive: - let fname = tmpdir ++ "/" ++ basename <.> ext + let fname = tmpdir basename <.> ext BS.writeFile fname contents return $ Image ils (fname,tit) _ -> do @@ -152,18 +151,22 @@ extractMsg log' = do runTeXProgram :: String -> Int -> FilePath -> String -> IO (ExitCode, ByteString, Maybe ByteString) runTeXProgram program runsLeft tmpDir source = do - let file = tmpDir ++ "/input.tex" + let file = tmpDir "input.tex" exists <- doesFileExist file unless exists $ UTF8.writeFile file source - let programArgs = ["-halt-on-error", "-interaction", "nonstopmode", - "-output-directory", tmpDir, file] - env' <- getEnvironment #ifdef _WINDOWS - let sep = ";" + -- note: we want / even on Windows, for TexLive + let tmpDir' = changePathSeparators tmpDir + let file' = changePathSeparators file #else - let sep = ":" + let tmpDir' = tmpDir + let file' = file #endif - let texinputs = maybe (tmpDir ++ sep) ((tmpDir ++ sep) ++) + let programArgs = ["-halt-on-error", "-interaction", "nonstopmode", + "-output-directory", tmpDir', file'] + env' <- getEnvironment + let sep = searchPathSeparator:[] + let texinputs = maybe (tmpDir' ++ sep) ((tmpDir' ++ sep) ++) $ lookup "TEXINPUTS" env' let env'' = ("TEXINPUTS", texinputs) : [(k,v) | (k,v) <- env', k /= "TEXINPUTS"]