summaryrefslogtreecommitdiff
path: root/src/Text/Pandoc/Writers/RTF.hs
diff options
context:
space:
mode:
authorJohn MacFarlane <jgm@berkeley.edu>2016-12-03 17:10:50 +0100
committerJohn MacFarlane <jgm@berkeley.edu>2017-01-25 17:07:40 +0100
commit2710fc426130738715fdf1ac6dd0c111a5ac8340 (patch)
tree4ed0e0002848c83432dd9b4c791734f622448519 /src/Text/Pandoc/Writers/RTF.hs
parent5ab8909661242d992726411d6adc6490eacaafe3 (diff)
Class: Renamed 'warn' to 'addWarning' and consolidated RTF writer.
* Renaming Text.Pandoc.Class.warn to addWarning avoids conflict with Text.Pandoc.Shared.warn. * Removed writeRTFWithEmbeddedImages from Text.Pandoc.Writers.RTF. This is no longer needed; we automatically handle embedded images using the PandocM functions. [API change]
Diffstat (limited to 'src/Text/Pandoc/Writers/RTF.hs')
-rw-r--r--src/Text/Pandoc/Writers/RTF.hs34
1 files changed, 19 insertions, 15 deletions
diff --git a/src/Text/Pandoc/Writers/RTF.hs b/src/Text/Pandoc/Writers/RTF.hs
index f71c97334..32f70cb31 100644
--- a/src/Text/Pandoc/Writers/RTF.hs
+++ b/src/Text/Pandoc/Writers/RTF.hs
@@ -28,7 +28,6 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Conversion of 'Pandoc' documents to RTF (rich text format).
-}
module Text.Pandoc.Writers.RTF ( writeRTF
- , writeRTFWithEmbeddedImages
) where
import Text.Pandoc.Definition
import Text.Pandoc.Options
@@ -37,6 +36,7 @@ import Text.Pandoc.Writers.Shared
import Text.Pandoc.Writers.Math
import Text.Pandoc.Templates (renderTemplate')
import Text.Pandoc.Walk
+import Text.Pandoc.Class (addWarning)
import Data.List ( isSuffixOf, intercalate )
import Data.Char ( ord, chr, isDigit )
import qualified Data.ByteString as B
@@ -64,7 +64,7 @@ rtfEmbedImage opts x@(Image attr _ (src,_)) = do
_ -> throwError $ PandocSomeError "Unknown file type"
sizeSpec <- case imageSize imgdata of
Left msg -> do
- P.warn $ "Could not determine image size in `" ++
+ addWarning $ "Could not determine image size in `" ++
src ++ "': " ++ msg
return ""
Right sz -> return $ "\\picw" ++ show xpx ++
@@ -76,23 +76,27 @@ rtfEmbedImage opts x@(Image attr _ (src,_)) = do
(xpt, ypt) = desiredSizeInPoints opts attr sz
let raw = "{\\pict" ++ filetype ++ sizeSpec ++ "\\bin " ++
concat bytes ++ "}"
- return $ if B.null imgdata
- then x
- else RawInline (Format "rtf") raw
- _ -> return x
+ if B.null imgdata
+ then do
+ addWarning $ "Image " ++ src ++ " contained no data, skipping."
+ return x
+ else return $ RawInline (Format "rtf") raw
+ | otherwise -> do
+ addWarning $ "Image " ++ src ++ " is not a jpeg or png, skipping."
+ return x
+ Right (_, Nothing) -> do
+ addWarning $ "Could not determine image type for " ++ src ++ ", skipping."
+ return x
+ Left e -> do
+ addWarning $ "Could not fetch image " ++ src ++ "\n" ++ show e
+ return x
rtfEmbedImage _ x = return x
--- | Convert Pandoc to a string in rich text format, with
--- images embedded as encoded binary data. TODO get rid of this,
--- we don't need it now that we have writeRTF in PandocMonad.
-writeRTFWithEmbeddedImages :: PandocMonad m
- => WriterOptions -> Pandoc -> m String
-writeRTFWithEmbeddedImages options doc =
- writeRTF options =<< walkM (rtfEmbedImage options) doc
-
-- | Convert Pandoc to a string in rich text format.
writeRTF :: PandocMonad m => WriterOptions -> Pandoc -> m String
-writeRTF options (Pandoc meta@(Meta metamap) blocks) = do
+writeRTF options doc = do
+ -- handle images
+ Pandoc meta@(Meta metamap) blocks <- walkM (rtfEmbedImage options) doc
let spacer = not $ all null $ docTitle meta : docDate meta : docAuthors meta
let toPlain (MetaBlocks [Para ils]) = MetaInlines ils
toPlain x = x