aboutsummaryrefslogtreecommitdiff
path: root/src/Text/Pandoc
diff options
context:
space:
mode:
Diffstat (limited to 'src/Text/Pandoc')
-rw-r--r--src/Text/Pandoc/Shared.hs2
-rw-r--r--src/Text/Pandoc/Writers/EPUB.hs6
-rw-r--r--src/Text/Pandoc/Writers/ODT.hs12
3 files changed, 11 insertions, 9 deletions
diff --git a/src/Text/Pandoc/Shared.hs b/src/Text/Pandoc/Shared.hs
index 102e28deb..63285969a 100644
--- a/src/Text/Pandoc/Shared.hs
+++ b/src/Text/Pandoc/Shared.hs
@@ -477,6 +477,7 @@ data WriterOptions = WriterOptions
, writerLiterateHaskell :: Bool -- ^ Write as literate haskell
, writerEmailObfuscation :: ObfuscationMethod -- ^ How to obfuscate emails
, writerIdentifierPrefix :: String -- ^ Prefix for section & note ids in HTML
+ , writerSourceDirectory :: FilePath -- ^ Directory path of 1st source file
} deriving Show
-- | Default writer options.
@@ -500,6 +501,7 @@ defaultWriterOptions =
, writerLiterateHaskell = False
, writerEmailObfuscation = JavascriptObfuscation
, writerIdentifierPrefix = ""
+ , writerSourceDirectory = "."
}
--
diff --git a/src/Text/Pandoc/Writers/EPUB.hs b/src/Text/Pandoc/Writers/EPUB.hs
index a96f0bda3..998a5aa3a 100644
--- a/src/Text/Pandoc/Writers/EPUB.hs
+++ b/src/Text/Pandoc/Writers/EPUB.hs
@@ -47,16 +47,16 @@ import Text.Pandoc.Writers.Markdown ( writePlain )
import Data.Char ( toLower )
-- | Produce an EPUB file from a Pandoc document.
-writeEPUB :: FilePath -- ^ Relative directory of source file
- -> String -- ^ EPUB stylesheet
+writeEPUB :: String -- ^ EPUB stylesheet
-> WriterOptions -- ^ Writer options
-> Pandoc -- ^ Document to convert
-> IO B.ByteString
-writeEPUB sourceDir stylesheet opts doc = do
+writeEPUB stylesheet opts doc = do
(TOD epochtime _) <- getClockTime
let opts' = opts{ writerEmailObfuscation = NoObfuscation
, writerStandalone = True
, writerWrapText = False }
+ let sourceDir = writerSourceDirectory opts'
-- mimetype
let mimetypeEntry = toEntry "mimetype" epochtime $ fromString "application/epub+zip"
-- container.xml
diff --git a/src/Text/Pandoc/Writers/ODT.hs b/src/Text/Pandoc/Writers/ODT.hs
index 667e55c4d..f7acf8e08 100644
--- a/src/Text/Pandoc/Writers/ODT.hs
+++ b/src/Text/Pandoc/Writers/ODT.hs
@@ -35,7 +35,7 @@ import Data.ByteString.Lazy.UTF8 ( fromString )
import Codec.Archive.Zip
import System.Time
import Paths_pandoc ( getDataFileName )
-import Text.Pandoc.Shared ( WriterOptions )
+import Text.Pandoc.Shared ( WriterOptions(..) )
import Text.Pandoc.Definition
import Text.Pandoc.Writers.OpenDocument ( writeOpenDocument )
import System.Directory
@@ -43,12 +43,11 @@ import Control.Monad (liftM)
-- | Produce an ODT file from a Pandoc document.
writeODT :: Maybe FilePath -- ^ Path of user data directory
- -> FilePath -- ^ Relative directory of source file
-> Maybe FilePath -- ^ Path specified by --reference-odt
-> WriterOptions -- ^ Writer options
-> Pandoc -- ^ Document to convert
-> IO B.ByteString
-writeODT datadir sourceDirRelative mbRefOdt opts doc = do
+writeODT datadir mbRefOdt opts doc = do
refArchive <- liftM toArchive $
case mbRefOdt of
Just f -> B.readFile f
@@ -63,7 +62,8 @@ writeODT datadir sourceDirRelative mbRefOdt opts doc = do
else defaultODT
-- handle pictures
picEntriesRef <- newIORef ([] :: [Entry])
- doc' <- processWithM (transformPic sourceDirRelative picEntriesRef) doc
+ let sourceDir = writerSourceDirectory opts
+ doc' <- processWithM (transformPic sourceDir picEntriesRef) doc
let newContents = writeOpenDocument opts doc'
(TOD epochtime _) <- getClockTime
let contentEntry = toEntry "content.xml" epochtime $ fromString newContents
@@ -72,10 +72,10 @@ writeODT datadir sourceDirRelative mbRefOdt opts doc = do
return $ fromArchive archive
transformPic :: FilePath -> IORef [Entry] -> Inline -> IO Inline
-transformPic sourceDirRelative entriesRef (Image lab (src,tit)) = do
+transformPic sourceDir entriesRef (Image lab (src,tit)) = do
entries <- readIORef entriesRef
let newsrc = "Pictures/" ++ show (length entries) ++ takeExtension src
- catch (readEntry [] (sourceDirRelative </> src) >>= \entry ->
+ catch (readEntry [] (sourceDir </> src) >>= \entry ->
modifyIORef entriesRef (entry{ eRelativePath = newsrc } :) >>
return (Image lab (newsrc, tit)))
(\_ -> return (Emph lab))