From e6e4311ddd3f964122a309af926dc95f6ef970d9 Mon Sep 17 00:00:00 2001
From: John MacFarlane <fiddlosopher@gmail.com>
Date: Sat, 21 Jan 2012 14:18:36 -0800
Subject: [PATCH] pandoc: Better error checking.

---
 src/Text/Pandoc/PDF.hs | 10 +++++-----
 src/pandoc.hs          | 10 ++++++++++
 2 files changed, 15 insertions(+), 5 deletions(-)

diff --git a/src/Text/Pandoc/PDF.hs b/src/Text/Pandoc/PDF.hs
index b3d0fcbb8..85689fa9b 100644
--- a/src/Text/Pandoc/PDF.hs
+++ b/src/Text/Pandoc/PDF.hs
@@ -72,9 +72,9 @@ extractMsg log' = do
   let msg'  = dropWhile (not . ("!" `BC.isPrefixOf`)) $ BC.lines log'
   let (msg'',rest) = break ("l." `BC.isPrefixOf`) msg'
   let lineno = take 1 rest
-  if not (null msg')
-     then BC.unlines (msg'' ++ lineno)
-     else "Unknown errorR"
+  if null msg'
+     then log'
+     else BC.unlines (msg'' ++ lineno)
 
 parseLine :: ByteString -> Bool
 parseLine ln =
@@ -101,7 +101,7 @@ runTeXProgram program runsLeft tmpDir source = do
     hClose h
     let programArgs = ["-halt-on-error", "-interaction", "nonstopmode",
          "-output-directory", tmpDir, file]
-    (exit, out, _err) <- readCommand program programArgs
+    (exit, out, err) <- readCommand program programArgs
     removeFile file
     let pdfFile = replaceDirectory (replaceExtension file ".pdf") tmpDir
     pdfExists <- doesFileExist pdfFile
@@ -110,7 +110,7 @@ runTeXProgram program runsLeft tmpDir source = do
               else return Nothing
     if hasUndefinedRefs out && runsLeft > 0
        then runTeXProgram program (runsLeft - 1) tmpDir source
-       else return (exit, out, pdf)
+       else return (exit, out <> err, pdf)
 
 -- utility functions
 
diff --git a/src/pandoc.hs b/src/pandoc.hs
index 6eac02ee2..bb190aeba 100644
--- a/src/pandoc.hs
+++ b/src/pandoc.hs
@@ -549,6 +549,16 @@ options =
                   "FILENAME")
                  "" -- "Path of epub metadata file"
 
+    , Option "" ["latex-program"]
+                 (ReqArg
+                  (\arg opt -> do
+                     let b = takeBaseName arg
+                     if (b == "pdflatex" || b == "lualatex" || b == "xelatex")
+                        then return opt { optLaTeXProgram = arg }
+                        else err 45 "latex-program must be pdflatex, lualatex, or xelatex.")
+                  "PROGRAM")
+                 "" -- "Name of latex program to use in generating PDF"
+
     , Option "D" ["print-default-template"]
                  (ReqArg
                   (\arg _ -> do