summaryrefslogtreecommitdiff
path: root/src/Text
diff options
context:
space:
mode:
authorJohn MacFarlane <jgm@berkeley.edu>2023-12-08 13:16:59 -0800
committerJohn MacFarlane <jgm@berkeley.edu>2023-12-08 13:16:59 -0800
commit901359bf460246861418ae1b96aa912920c86d35 (patch)
tree832a14b6386cbf8cb0b0419cf0ffa6240b103dee /src/Text
parente46c3e68d2be9c6407476985e3f20e74fc6c79d2 (diff)
Docx writer: allow embedded fonts to be used in reference.docx.
Closes #6728.
Diffstat (limited to 'src/Text')
-rw-r--r--src/Text/Pandoc/Writers/Docx.hs20
1 files changed, 15 insertions, 5 deletions
diff --git a/src/Text/Pandoc/Writers/Docx.hs b/src/Text/Pandoc/Writers/Docx.hs
index f2e26322b..0178cec17 100644
--- a/src/Text/Pandoc/Writers/Docx.hs
+++ b/src/Text/Pandoc/Writers/Docx.hs
@@ -307,10 +307,13 @@ writeDocx opts doc = do
| e <- zEntries refArchive
, "word/media/" `isPrefixOf` eRelativePath e ]
- let defaultnodes = [mknode "Default"
- [("Extension","xml"),("ContentType","application/xml")] (),
- mknode "Default"
- [("Extension","rels"),("ContentType","application/vnd.openxmlformats-package.relationships+xml")] ()]
+ let mkDefaultNode (ext, mt) =
+ mknode "Default" [("Extension",ext),("ContentType",mt)] ()
+ let defaultnodes = map mkDefaultNode
+ [("xml", "application/xml"),
+ ("rels", "application/vnd.openxmlformats-package.relationships+xml"),
+ ("odttf",
+ "application/vnd.openxmlformats-officedocument.obfuscatedFont")]
let contentTypesDoc = mknode "Types" [("xmlns","http://schemas.openxmlformats.org/package/2006/content-types")] $ defaultnodes ++ overrides
let contentTypesEntry = toEntry "[Content_Types].xml" epochtime
$ renderXml contentTypesDoc
@@ -538,6 +541,11 @@ writeDocx opts doc = do
docPropsAppEntry <- entryFromArchive refArchive "docProps/app.xml"
themeEntry <- entryFromArchive refArchive "word/theme/theme1.xml"
fontTableEntry <- entryFromArchive refArchive "word/fontTable.xml"
+ let fontTableRelsEntries = maybeToList $
+ findEntryByPath "word/_rels/fontTable.xml.rels" refArchive
+ let fontEntries = [entry | entry <- zEntries refArchive
+ , "word/fonts/" `isPrefixOf` (eRelativePath entry)]
+ -- or parse fontTable.xml.rels?
webSettingsEntry <- entryFromArchive refArchive "word/webSettings.xml"
headerFooterEntries <- mapM (entryFromArchive refArchive . ("word/" ++)) $
mapMaybe (fmap T.unpack . extractTarget)
@@ -557,7 +565,9 @@ writeDocx opts doc = do
commentsEntry :
docPropsEntry : docPropsAppEntry : customPropsEntry :
themeEntry :
- fontTableEntry : settingsEntry : webSettingsEntry :
+ settingsEntry : webSettingsEntry :
+ fontTableEntry :
+ fontTableRelsEntries ++ fontEntries ++
imageEntries ++ headerFooterEntries ++
miscRelEntries ++ otherMediaEntries
return $ fromArchive archive