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:
John MacFarlane 2017-04-10 22:21:11 +02:00
parent 9ac9e8d278
commit d4e5fe02b0

View file

@ -231,10 +231,11 @@ writeDocx opts doc@(Pandoc meta _) = do
username <- P.lookupEnv "USERNAME"
utctime <- P.getCurrentTime
distArchive <- (toArchive . BL.fromStrict) <$>
P.readDataFile datadir "reference.docx"
P.readDataFile Nothing "reference.docx"
refArchive <- case writerReferenceDoc opts of
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"
let wname f qn = qPrefix qn == Just "w" && f (qName qn)