@@ -65,26 +65,30 @@ writeODT opts doc@(Pandoc meta _) = do
6565 doc' <- walkM (transformPic opts picEntriesRef) doc
6666 let newContents = writeOpenDocument opts{writerWrapText = False} doc'
6767 epochtime <- floor `fmap` getPOSIXTime
68− let contentEntry = toEntry "content.xml" epochtime $ fromStringLazy newContents
68+ let contentEntry = toEntry "content.xml" epochtime
69+ $ fromStringLazy newContents
6970 picEntries <- readIORef picEntriesRef
70− let archive = foldr addEntryToArchive refArchive $ contentEntry : picEntries
71+ let archive = foldr addEntryToArchive refArchive
72+ $ contentEntry : picEntries
7173 -- construct META-INF/manifest.xml based on archive
7274 let toFileEntry fp = case getMimeType fp of
7375 Nothing -> empty
7476 Just m -> selfClosingTag "manifest:file-entry"
7577 [("manifest:media-type", m)
7678 ,("manifest:full-path", fp)
79+ ,("manifest:version", "1.2")
7780 ]
78− let files = [ ent | ent <- filesInArchive archive, not ("META-INF" `isPrefixOf` ent) ]
81+ let files = [ ent | ent <- filesInArchive archive,
82+ not ("META-INF" `isPrefixOf` ent) ]
7983 let manifestEntry = toEntry "META-INF/manifest.xml" epochtime
8084 $ fromStringLazy $ render Nothing
8185 $ text "<?xml version=\"1.0\" encoding=\"utf-8\"?>"
8286 $$
8387 ( inTags True "manifest:manifest"
84− [("xmlns:manifest","urn:oasis:names:tc:opendocument:xmlns:manifest:1.0")]
88+ [("xmlns:manifest","urn:oasis:names:tc:opendocument:xmlns:manifest:1.0")
89+ ,("manifest:version","1.2")]
8590 $ ( selfClosingTag "manifest:file-entry"
8691 [("manifest:media-type","application/vnd.oasis.opendocument.text")
87− ,("manifest:version","1.2")
8892 ,("manifest:full-path","/")]
8993 $$ vcat ( map toFileEntry $ files )
9094 )
@@ -107,7 +111,11 @@ writeODT opts doc@(Pandoc meta _) = do
107111 )
108112 )
109113 )
110− let archive'' = addEntryToArchive metaEntry archive'
114+ -- make sure mimetype is first
115+ let mimetypeEntry = toEntry "mimetype" epochtime
116+ $ fromStringLazy "application/vnd.oasis.opendocument.text"
117+ let archive'' = addEntryToArchive mimetypeEntry
118+ $ addEntryToArchive metaEntry archive'
111119 return $ fromArchive archive''
112120
113121transformPic :: WriterOptions -> IORef [Entry] -> Inline -> IO Inline