@@ -37,9 +37,11 @@ module Text.Pandoc.MediaBag (
37 extractMediaBag
37 extractMediaBag
39import System.FilePath
39import System.FilePath
40+import qualified System.FilePath.Posix as Posix
40import System.Directory (createDirectoryIfMissing)
41import System.Directory (createDirectoryIfMissing)
41import qualified Data.Map as M
42import qualified Data.Map as M
42import qualified Data.ByteString.Lazy as BL
43import qualified Data.ByteString.Lazy as BL
44+import Data.List (intercalate)
43import Data.Monoid (Monoid)
45import Data.Monoid (Monoid)
44import Control.Monad (when)
46import Control.Monad (when)
45import Text.Pandoc.MIME (MimeType, getMimeTypeDef)
47import Text.Pandoc.MIME (MimeType, getMimeTypeDef)
@@ -67,7 +69,7 @@ insertMedia :: FilePath -- ^ relative path and canonical name of resource
67 -> MediaBag
69 -> MediaBag
68 -> MediaBag
70 -> MediaBag
69insertMedia fp mbMime contents (MediaBag mediamap) =
71insertMedia fp mbMime contents (MediaBag mediamap) =
70− MediaBag (M.insert (splitPath fp) (mime, contents) mediamap)
72+ MediaBag (M.insert (splitDirectories fp) (mime, contents) mediamap)
71 where mime = fromMaybe fallback mbMime
73 where mime = fromMaybe fallback mbMime
72 fallback = case takeExtension fp of
74 fallback = case takeExtension fp of
73 ".gz" -> getMimeTypeDef $ dropExtension fp
75 ".gz" -> getMimeTypeDef $ dropExtension fp
@@ -77,14 +79,14 @@ insertMedia fp mbMime contents (MediaBag mediamap) =
77lookupMedia :: FilePath
79lookupMedia :: FilePath
78 -> MediaBag
80 -> MediaBag
79 -> Maybe (MimeType, BL.ByteString)
81 -> Maybe (MimeType, BL.ByteString)
80−lookupMedia fp (MediaBag mediamap) = M.lookup (splitPath fp) mediamap
82+lookupMedia fp (MediaBag mediamap) = M.lookup (splitDirectories fp) mediamap
82-- | Get a list of the file paths stored in a 'MediaBag', with
84-- | Get a list of the file paths stored in a 'MediaBag', with
83-- their corresponding mime types and the lengths in bytes of the contents.
85-- their corresponding mime types and the lengths in bytes of the contents.
84mediaDirectory :: MediaBag -> [(String, MimeType, Int)]
86mediaDirectory :: MediaBag -> [(String, MimeType, Int)]
85mediaDirectory (MediaBag mediamap) =
87mediaDirectory (MediaBag mediamap) =
86 M.foldWithKey (\fp (mime,contents) ->
88 M.foldWithKey (\fp (mime,contents) ->
87− (((joinPath fp), mime, fromIntegral $ BL.length contents):)) [] mediamap
89+ (((Posix.joinPath fp), mime, fromIntegral $ BL.length contents):)) [] mediamap
89-- | Extract contents of MediaBag to a given directory. Print informational
91-- | Extract contents of MediaBag to a given directory. Print informational
90-- messages if 'verbose' is true.
92-- messages if 'verbose' is true.
@@ -95,7 +97,7 @@ extractMediaBag :: Bool
95extractMediaBag verbose dir (MediaBag mediamap) = do
97extractMediaBag verbose dir (MediaBag mediamap) = do
96 sequence_ $ M.foldWithKey
98 sequence_ $ M.foldWithKey
97 (\fp (_ ,contents) ->
99 (\fp (_ ,contents) ->
98− ((writeMedia verbose dir (joinPath fp, contents)):)) [] mediamap
100+ ((writeMedia verbose dir (Posix.joinPath fp, contents)):)) [] mediamap
100writeMedia :: Bool -> FilePath -> (FilePath, BL.ByteString) -> IO ()
102writeMedia :: Bool -> FilePath -> (FilePath, BL.ByteString) -> IO ()
101writeMedia verbose dir (subpath, bs) = do
103writeMedia verbose dir (subpath, bs) = do