aboutsummaryrefslogtreecommitdiff
path: root/src/Text/Pandoc/Writers/ODT.hs
diff options
context:
space:
mode:
Diffstat (limited to 'src/Text/Pandoc/Writers/ODT.hs')
-rw-r--r--src/Text/Pandoc/Writers/ODT.hs36
1 files changed, 27 insertions, 9 deletions
diff --git a/src/Text/Pandoc/Writers/ODT.hs b/src/Text/Pandoc/Writers/ODT.hs
index a03575134..481e88da2 100644
--- a/src/Text/Pandoc/Writers/ODT.hs
+++ b/src/Text/Pandoc/Writers/ODT.hs
@@ -40,6 +40,7 @@ import Data.List (isPrefixOf, intercalate)
import Data.Maybe (fromMaybe)
import qualified Data.Map as Map
import qualified Data.Text.Lazy as TL
+import Data.Time
import System.FilePath (takeDirectory, takeExtension, (<.>))
import Text.Pandoc.BCP47 (Lang (..), getLang, renderLang)
import Text.Pandoc.Class (PandocMonad, report, toLang)
@@ -50,8 +51,9 @@ import Text.Pandoc.Logging
import Text.Pandoc.MIME (extensionFromMimeType, getMimeType)
import Text.Pandoc.Options (WrapOption (..), WriterOptions (..))
import Text.Pandoc.Pretty
-import Text.Pandoc.Shared (stringify, normalizeDate)
-import Text.Pandoc.Writers.Shared (lookupMetaString, fixDisplayMath)
+import Text.Pandoc.Shared (stringify, pandocVersion)
+import Text.Pandoc.Writers.Shared (lookupMetaString, lookupMetaBlocks,
+ fixDisplayMath)
import Text.Pandoc.UTF8 (fromStringLazy, fromTextLazy, toStringLazy)
import Text.Pandoc.Walk
import Text.Pandoc.Writers.OpenDocument (writeOpenDocument)
@@ -83,6 +85,7 @@ pandocToODT :: PandocMonad m
pandocToODT opts doc@(Pandoc meta _) = do
let title = docTitle meta
let authors = docAuthors meta
+ utctime <- P.getCurrentTime
lang <- toLang (getLang opts meta)
refArchive <-
case writerReferenceDoc opts of
@@ -125,9 +128,14 @@ pandocToODT opts doc@(Pandoc meta _) = do
)
)
let archive' = addEntryToArchive manifestEntry archive
+ -- create meta.xml
let userDefinedMetaFields = [k | k <- Map.keys (unMeta meta)
- , k `notElem` ["title", "lang", "author", "date"]]
+ , k `notElem` ["title", "lang", "author"
+ , "description", "subject", "keywords"]]
let escapedText = text . escapeStringForXML
+ let keywords = case lookupMeta "keywords" meta of
+ Just (MetaList xs) -> map stringify xs
+ _ -> []
let userDefinedMeta =
map (\k -> inTags False "meta:user-defined"
[ ("meta:name", escapeStringForXML k)
@@ -146,19 +154,29 @@ pandocToODT opts doc@(Pandoc meta _) = do
,("xmlns:ooo","http://openoffice.org/2004/office")
,("xmlns:grddl","http://www.w3.org/2003/g/data-view#")
,("office:version","1.2")] ( inTags True "office:meta" [] $
- ( metaTag "dc:title" (stringify title)
+ ( metaTag "meta:generator" ("Pandoc/" ++ pandocVersion)
+ $$
+ metaTag "dc:title" (stringify title)
+ $$
+ metaTag "dc:description"
+ (intercalate "\n" (map stringify $
+ lookupMetaBlocks "description" meta))
+ $$
+ metaTag "dc:subject" (lookupMetaString "subject" meta)
+ $$
+ metaTag "meta:keyword" (intercalate ", " keywords)
$$
case lang of
Just l -> metaTag "dc:language" (renderLang l)
Nothing -> empty
$$
- metaTag "dc:creator"
+ (\d a -> metaTag "meta:initial-creator" a
+ $$ metaTag "dc:creator" a
+ $$ metaTag "meta:creation-date" d
+ $$ metaTag "dc:date" d
+ ) (formatTime defaultTimeLocale "%FT%XZ" utctime)
(intercalate "; " (map stringify authors))
$$
- maybe mempty
- (metaTag "dc:date")
- (normalizeDate (lookupMetaString "date" meta))
- $$
vcat userDefinedMeta
)
)