Docx writer: don't take "distArchive" from datadir.
The docx writer takes components from the distribution's version of reference.docx when it can't find them in a user's custom reference.docx. (This sometimes happens because Word will sometimes omit components needed for larger documents when saving a simple one.) Previously, we allowed a reference.docx in the data directory (e.g. `~/.pandoc`) to be used as the distribution's reference.docx. This led to a bizarre situation where pandoc would produce a good docx using `--template ~/.pandoc/ref.docx`, but if `ref.docx` were moved to `~/.pandoc/reference.docx`, it would then produce a corrupted docx. Closes #3322 (I think).
This commit is contained in:
parent
9ac9e8d278
commit
d4e5fe02b0
1 changed files with 3 additions and 2 deletions
|
@ -231,10 +231,11 @@ writeDocx opts doc@(Pandoc meta _) = do
|
||||||
username <- P.lookupEnv "USERNAME"
|
username <- P.lookupEnv "USERNAME"
|
||||||
utctime <- P.getCurrentTime
|
utctime <- P.getCurrentTime
|
||||||
distArchive <- (toArchive . BL.fromStrict) <$>
|
distArchive <- (toArchive . BL.fromStrict) <$>
|
||||||
P.readDataFile datadir "reference.docx"
|
P.readDataFile Nothing "reference.docx"
|
||||||
refArchive <- case writerReferenceDoc opts of
|
refArchive <- case writerReferenceDoc opts of
|
||||||
Just f -> toArchive <$> P.readFileLazy f
|
Just f -> toArchive <$> P.readFileLazy f
|
||||||
Nothing -> return distArchive
|
Nothing -> (toArchive . BL.fromStrict) <$>
|
||||||
|
P.readDataFile datadir "reference.docx"
|
||||||
|
|
||||||
parsedDoc <- parseXml refArchive distArchive "word/document.xml"
|
parsedDoc <- parseXml refArchive distArchive "word/document.xml"
|
||||||
let wname f qn = qPrefix qn == Just "w" && f (qName qn)
|
let wname f qn = qPrefix qn == Just "w" && f (qName qn)
|
||||||
|
|
Loading…
Add table
Reference in a new issue