git.iko.soy/typeable/pandoc
on master help sign in
Do not override existing "fileN" medias when writing to EPUB format (fix #4206)
commit45b74609599af3065f572b032a25bd4819e7ff7a authorblmage <bl.mage.fr@gmail.com> dateSun 16 Jun 2019, 09:44 (7 years ago) parente67f4c5
1 file changed+16−7
src/Text/Pandoc/Writers/EPUB.hs+16−7
src/Text/Pandoc/Writers/EPUB.hs+16−7
@@ -67,6 +67,7 @@ data Chapter = Chapter (Maybe [Int]) [Block]
6767
6868data EPUBState = EPUBState {
6969 stMediaPaths :: [(FilePath, (FilePath, Maybe Entry))]
70+ , stMediaNextId :: Int
7071 , stEpubSubdir :: String
7172 }
7273
@@ -390,7 +391,7 @@ writeEPUB epubVersion opts doc = do
390391 -- sanity check on epubSubdir
391392 unless (all (\c -> isAscii c && isAlphaNum c) epubSubdir) $
392393 throwError $ PandocEpubSubdirectoryError epubSubdir
393− let initState = EPUBState { stMediaPaths = [], stEpubSubdir = epubSubdir }
394+ let initState = EPUBState { stMediaPaths = [], stMediaNextId = 0, stEpubSubdir = epubSubdir }
394395 evalStateT (pandocToEPUB epubVersion opts doc) initState
395396
396397pandocToEPUB :: PandocMonad m
@@ -994,17 +995,25 @@ modifyMediaRef oldsrc = do
994995 Just (n,_) -> return n
995996 Nothing -> catchError
996997 (do (img, mbMime) <- P.fetchItem oldsrc
997− let new = "media/file" ++ show (length media) ++
998− fromMaybe (takeExtension (takeWhile (/='?') oldsrc))
999− (('.':) <$> (mbMime >>= extensionFromMimeType))
1000− entry <- mkEntry new (B.fromChunks . (:[]) $ img)
998+ let ext = fromMaybe (takeExtension (takeWhile (/='?') oldsrc))
999+ (('.':) <$> (mbMime >>= extensionFromMimeType))
1000+ newName <- getMediaNextNewName ext
1001+ let newPath = "media/" ++ newName
1002+ entry <- mkEntry newPath (B.fromChunks . (:[]) $ img)
10011003 modify $ \st -> st{ stMediaPaths =
1002− (oldsrc, (new, Just entry)):media}
1003− return new)
1004+ (oldsrc, (newPath, Just entry)):media}
1005+ return newPath)
10041006 (\e -> do
10051007 report $ CouldNotFetchResource oldsrc (show e)
10061008 return oldsrc)
10071009
1010+getMediaNextNewName :: PandocMonad m => String -> E m String
1011+getMediaNextNewName ext = do
1012+ nextId <- gets stMediaNextId
1013+ modify $ \st -> st { stMediaNextId = nextId + 1 }
1014+ let nextName = "file" ++ show nextId ++ ext
1015+ (P.fetchItem nextName >> getMediaNextNewName ext) `catchError` const (return nextName)
1016+
10081017transformBlock :: PandocMonad m
10091018 => Block
10101019 -> E m Block