summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJohn MacFarlane <fiddlosopher@gmail.com>2013-08-11 17:13:46 -0700
committerJohn MacFarlane <fiddlosopher@gmail.com>2013-08-11 17:13:46 -0700
commiteb0c0b86ed518982eb5d3336e73ff5cb1d59d87c (patch)
treedf5e76252cf7633b308e486c44cf94663a44e457 /src
parent7b975c2bcc32e5ddd96338afdb32a1ceacdc0980 (diff)
ODT/OpenDocument writer: Minor changes for ODF 1.2 conformance.
See #939. We leave the nonconforming contextual-spacing attribute, which is provided by LibreOffice itself and seems to be supported.
Diffstat (limited to 'src')
-rw-r--r--src/Text/Pandoc/Writers/ODT.hs20
-rw-r--r--src/Text/Pandoc/Writers/OpenDocument.hs3
2 files changed, 16 insertions, 7 deletions
diff --git a/src/Text/Pandoc/Writers/ODT.hs b/src/Text/Pandoc/Writers/ODT.hs
index 751a323f5..cc0a06243 100644
--- a/src/Text/Pandoc/Writers/ODT.hs
+++ b/src/Text/Pandoc/Writers/ODT.hs
@@ -65,26 +65,30 @@ writeODT opts doc@(Pandoc meta _) = do
doc' <- walkM (transformPic opts picEntriesRef) doc
let newContents = writeOpenDocument opts{writerWrapText = False} doc'
epochtime <- floor `fmap` getPOSIXTime
- let contentEntry = toEntry "content.xml" epochtime $ fromStringLazy newContents
+ let contentEntry = toEntry "content.xml" epochtime
+ $ fromStringLazy newContents
picEntries <- readIORef picEntriesRef
- let archive = foldr addEntryToArchive refArchive $ contentEntry : picEntries
+ let archive = foldr addEntryToArchive refArchive
+ $ contentEntry : picEntries
-- construct META-INF/manifest.xml based on archive
let toFileEntry fp = case getMimeType fp of
Nothing -> empty
Just m -> selfClosingTag "manifest:file-entry"
[("manifest:media-type", m)
,("manifest:full-path", fp)
+ ,("manifest:version", "1.2")
]
- let files = [ ent | ent <- filesInArchive archive, not ("META-INF" `isPrefixOf` ent) ]
+ let files = [ ent | ent <- filesInArchive archive,
+ not ("META-INF" `isPrefixOf` ent) ]
let manifestEntry = toEntry "META-INF/manifest.xml" epochtime
$ fromStringLazy $ render Nothing
$ text "<?xml version=\"1.0\" encoding=\"utf-8\"?>"
$$
( inTags True "manifest:manifest"
- [("xmlns:manifest","urn:oasis:names:tc:opendocument:xmlns:manifest:1.0")]
+ [("xmlns:manifest","urn:oasis:names:tc:opendocument:xmlns:manifest:1.0")
+ ,("manifest:version","1.2")]
$ ( selfClosingTag "manifest:file-entry"
[("manifest:media-type","application/vnd.oasis.opendocument.text")
- ,("manifest:version","1.2")
,("manifest:full-path","/")]
$$ vcat ( map toFileEntry $ files )
)
@@ -107,7 +111,11 @@ writeODT opts doc@(Pandoc meta _) = do
)
)
)
- let archive'' = addEntryToArchive metaEntry archive'
+ -- make sure mimetype is first
+ let mimetypeEntry = toEntry "mimetype" epochtime
+ $ fromStringLazy "application/vnd.oasis.opendocument.text"
+ let archive'' = addEntryToArchive mimetypeEntry
+ $ addEntryToArchive metaEntry archive'
return $ fromArchive archive''
transformPic :: WriterOptions -> IORef [Entry] -> Inline -> IO Inline
diff --git a/src/Text/Pandoc/Writers/OpenDocument.hs b/src/Text/Pandoc/Writers/OpenDocument.hs
index 05c576c20..3ec5c2073 100644
--- a/src/Text/Pandoc/Writers/OpenDocument.hs
+++ b/src/Text/Pandoc/Writers/OpenDocument.hs
@@ -461,7 +461,8 @@ tableStyle :: Int -> [(Char,Double)] -> Doc
tableStyle num wcs =
let tableId = "Table" ++ show (num + 1)
table = inTags True "style:style"
- [("style:name", tableId)] $
+ [("style:name", tableId)
+ ,("style:family", "table")] $
selfClosingTag "style:table-properties"
[("table:align" , "center")]
colStyle (c,0) = selfClosingTag "style:style"