@@ -37,9 +37,11 @@ module Text.Pandoc.MediaBag (
3737 extractMediaBag
3838 ) where
3939import System.FilePath
40+import qualified System.FilePath.Posix as Posix
4041import System.Directory (createDirectoryIfMissing)
4142import qualified Data.Map as M
4243import qualified Data.ByteString.Lazy as BL
44+import Data.List (intercalate)
4345import Data.Monoid (Monoid)
4446import Control.Monad (when)
4547import Text.Pandoc.MIME (MimeType, getMimeTypeDef)
@@ -67,7 +69,7 @@ insertMedia :: FilePath -- ^ relative path and canonical name of resource
6769 -> MediaBag
6870 -> MediaBag
6971insertMedia fp mbMime contents (MediaBag mediamap) =
70− MediaBag (M.insert (splitPath fp) (mime, contents) mediamap)
72+ MediaBag (M.insert (splitDirectories fp) (mime, contents) mediamap)
7173 where mime = fromMaybe fallback mbMime
7274 fallback = case takeExtension fp of
7375 ".gz" -> getMimeTypeDef $ dropExtension fp
@@ -77,14 +79,14 @@ insertMedia fp mbMime contents (MediaBag mediamap) =
7779lookupMedia :: FilePath
7880 -> MediaBag
7981 -> Maybe (MimeType, BL.ByteString)
80−lookupMedia fp (MediaBag mediamap) = M.lookup (splitPath fp) mediamap
82+lookupMedia fp (MediaBag mediamap) = M.lookup (splitDirectories fp) mediamap
8183
8284-- | Get a list of the file paths stored in a 'MediaBag', with
8385-- their corresponding mime types and the lengths in bytes of the contents.
8486mediaDirectory :: MediaBag -> [(String, MimeType, Int)]
8587mediaDirectory (MediaBag mediamap) =
8688 M.foldWithKey (\fp (mime,contents) ->
87− (((joinPath fp), mime, fromIntegral $ BL.length contents):)) [] mediamap
89+ (((Posix.joinPath fp), mime, fromIntegral $ BL.length contents):)) [] mediamap
8890
8991-- | Extract contents of MediaBag to a given directory. Print informational
9092-- messages if 'verbose' is true.
@@ -95,7 +97,7 @@ extractMediaBag :: Bool
9597extractMediaBag verbose dir (MediaBag mediamap) = do
9698 sequence_ $ M.foldWithKey
9799 (\fp (_ ,contents) ->
98− ((writeMedia verbose dir (joinPath fp, contents)):)) [] mediamap
100+ ((writeMedia verbose dir (Posix.joinPath fp, contents)):)) [] mediamap
99101
100102writeMedia :: Bool -> FilePath -> (FilePath, BL.ByteString) -> IO ()
101103writeMedia verbose dir (subpath, bs) = do