diff options
author | John MacFarlane <jgm@berkeley.edu> | 2019-11-03 11:44:00 -0800 |
---|---|---|
committer | John MacFarlane <jgm@berkeley.edu> | 2019-11-03 11:44:00 -0800 |
commit | e906e5ac23177c4377591c73c8e796e764096a32 (patch) | |
tree | b8b868ea48514338f68f35648cf880a4d2a40035 /src/Text/Pandoc/App | |
parent | c4ff0b5564aab0fdf8f6fe0fcecb332615933f4b (diff) | |
download | pandoc-e906e5ac23177c4377591c73c8e796e764096a32.tar.gz |
Allow pdf output to stdout.
PDF output will not be output to the terminal, but can be
sent to stdout using either `-o -` or a pipe.
The intermediate format will be determined based on
the setting of `--pdf-engine`.
Closes #5751.
Diffstat (limited to 'src/Text/Pandoc/App')
-rw-r--r-- | src/Text/Pandoc/App/OutputSettings.hs | 27 |
1 files changed, 15 insertions, 12 deletions
diff --git a/src/Text/Pandoc/App/OutputSettings.hs b/src/Text/Pandoc/App/OutputSettings.hs index 3edeea1a1..1d2f66dd6 100644 --- a/src/Text/Pandoc/App/OutputSettings.hs +++ b/src/Text/Pandoc/App/OutputSettings.hs @@ -65,21 +65,26 @@ optToOutputSettings opts = do Nothing -> return Nothing Just fp -> Just <$> readUtf8File fp - let pdfOutput = map toLower (takeExtension outputFile) == ".pdf" + let pdfOutput = map toLower (takeExtension outputFile) == ".pdf" || + optTo opts == Just "pdf" (writerName, maybePdfProg) <- if pdfOutput - then liftIO $ pdfWriterAndProg (optTo opts) (optPdfEngine opts) + then liftIO $ pdfWriterAndProg + (case optTo opts of + Just "pdf" -> Nothing + x -> x) + (optPdfEngine opts) else case optTo opts of + Just f -> return (f, Nothing) Nothing - | outputFile == "-" -> return ("html", Nothing) - | otherwise -> - case formatFromFilePaths [outputFile] of + | outputFile == "-" -> return ("html", Nothing) + | otherwise -> + case formatFromFilePaths [outputFile] of Nothing -> do report $ CouldNotDeduceFormat [takeExtension outputFile] "html" return ("html", Nothing) Just f -> return (f, Nothing) - Just f -> return (f, Nothing) let format = if ".lua" `isSuffixOf` writerName then writerName @@ -244,13 +249,10 @@ baseWriterName = takeWhile (\c -> c /= '+' && c /= '-') pdfWriterAndProg :: Maybe String -- ^ user-specified writer name -> Maybe String -- ^ user-specified pdf-engine -> IO (String, Maybe String) -- ^ IO (writerName, maybePdfEngineProg) -pdfWriterAndProg mWriter mEngine = do - let panErr msg = liftIO $ E.throwIO $ PandocAppError msg +pdfWriterAndProg mWriter mEngine = case go mWriter mEngine of Right (writ, prog) -> return (writ, Just prog) - Left "pdf writer" -> liftIO $ E.throwIO $ - PandocUnknownWriterError "pdf" - Left err -> panErr err + Left err -> liftIO $ E.throwIO $ PandocAppError err where go Nothing Nothing = Right ("latex", "pdflatex") go (Just writer) Nothing = (writer,) <$> engineForWriter writer @@ -273,4 +275,5 @@ pdfWriterAndProg mWriter mEngine = do "cannot produce pdf output from " ++ w isTextFormat :: String -> Bool -isTextFormat s = s `notElem` ["odt","docx","epub2","epub3","epub","pptx"] +isTextFormat s = + s `notElem` ["odt","docx","epub2","epub3","epub","pptx","pdf"] |