git.iko.soy/typeable/pandoc
on master help sign in
Docx writer: Create overrides per-image for media/ in ref docx.
cbfde5cJohn MacFarlane
src/Text/Pandoc/Writers/Docx.hs+8−13
@@ -170,6 +170,9 @@ writeDocx opts doc@(Pandoc meta _) = do
170 let mkImageOverride (_, imgpath, mbMimeType, _, _) =
170 let mkImageOverride (_, imgpath, mbMimeType, _, _) =
171 mkOverrideNode ("/word/" ++ imgpath,
171 mkOverrideNode ("/word/" ++ imgpath,
172 fromMaybe "application/octet-stream" mbMimeType)
172 fromMaybe "application/octet-stream" mbMimeType)
173+ let mkMediaOverride imgpath = mkOverrideNode ('/':imgpath,
174+ fromMaybe "application/octet-stream"
175+ $ getMimeType imgpath)
173 let overrides = map mkOverrideNode (
176 let overrides = map mkOverrideNode (
174 [("/word/webSettings.xml",
177 [("/word/webSettings.xml",
175 "application/vnd.openxmlformats-officedocument.wordprocessingml.webSettings+xml")
178 "application/vnd.openxmlformats-officedocument.wordprocessingml.webSettings+xml")
@@ -196,22 +199,14 @@ writeDocx opts doc@(Pandoc meta _) = do
196 "application/vnd.openxmlformats-officedocument.wordprocessingml.header+xml")) headers ++
199 "application/vnd.openxmlformats-officedocument.wordprocessingml.header+xml")) headers ++
197 map (\x -> (maybe "" ("/word/" ++) $ extractTarget x,
200 map (\x -> (maybe "" ("/word/" ++) $ extractTarget x,
198 "application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml")) footers) ++
201 "application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml")) footers) ++
199− map mkImageOverride imgs
202+ map mkImageOverride imgs ++
200− let imageDefaults = map (\(x,y) -> mknode "Default"
203+ map mkMediaOverride [ eRelativePath e | e <- zEntries refArchive
201− [("Extension",x),("ContentType",y)] ())
204+ , "word/media/" `isPrefixOf` eRelativePath e ]
202− [("jpg","image/jpeg")
205+
203− ,("jpeg","image/jpeg")
204− ,("png","image/png")
205− ,("svg","image/svg+xml")
206− ,("tif","image/tiff")
207− ,("tiff","image/tiff")
208− ,("bmp","image/x-ms-bmp")
209− ,("gif","image/gif")
210− ]
211 let defaultnodes = [mknode "Default"
206 let defaultnodes = [mknode "Default"
212 [("Extension","xml"),("ContentType","application/xml")] (),
207 [("Extension","xml"),("ContentType","application/xml")] (),
213 mknode "Default"
208 mknode "Default"
214− [("Extension","rels"),("ContentType","application/vnd.openxmlformats-package.relationships+xml")] ()] ++ imageDefaults
209+ [("Extension","rels"),("ContentType","application/vnd.openxmlformats-package.relationships+xml")] ()]
215 let contentTypesDoc = mknode "Types" [("xmlns","http://schemas.openxmlformats.org/package/2006/content-types")] $ defaultnodes ++ overrides
210 let contentTypesDoc = mknode "Types" [("xmlns","http://schemas.openxmlformats.org/package/2006/content-types")] $ defaultnodes ++ overrides
216 let contentTypesEntry = toEntry "[Content_Types].xml" epochtime
211 let contentTypesEntry = toEntry "[Content_Types].xml" epochtime
217 $ renderXml contentTypesDoc
212 $ renderXml contentTypesDoc