Better fix for #2187.
* Reverted kludgy change to make-windows-installer.bat. * Removed make-reference-fiels.hs. * Moved the individual ingredients of reference.docx and reference.odt to the data directory. * Removed reference.docx and reference.odt from data directory. * We now build the reference archives from their ingredient pieces in the docx and odt writers, instead of having a reference.docx or reference.odt intermediary. This should fix #2187. It also simplifies the bulid procedure. The one thing users may notice is different is that you can no longer get the reference.docx or reference.odt using `--print-default-data-file`. Instead, simply generate a docx or odt using pandoc with a blank or minimal input, and use that (or a customized version) with `--reference-docx` or `--reference-odt`.
This commit is contained in:
parent
c1f6d5e31f
commit
b241472a90
5 changed files with 78 additions and 65 deletions
15
Setup.hs
15
Setup.hs
|
@ -38,12 +38,11 @@ main = defaultMainWithHooks $ simpleUserHooks {
|
|||
, instHook = \pkgdescr ->
|
||||
instHook simpleUserHooks pkgdescr{ executables =
|
||||
[x | x <- executables pkgdescr, exeName x `notElem` noInstall] }
|
||||
, postBuild = \args bf pkgdescr lbi -> do
|
||||
, postBuild = \args bf pkgdescr lbi ->
|
||||
makeManPages args bf pkgdescr lbi
|
||||
makeReferenceFiles args bf pkgdescr lbi
|
||||
}
|
||||
where
|
||||
noInstall = ["make-pandoc-man-pages","make-reference-files"]
|
||||
noInstall = ["make-pandoc-man-pages"]
|
||||
|
||||
ppBlobSuffixHandler :: PPSuffixHandler
|
||||
ppBlobSuffixHandler = ("hsb", \_ _ ->
|
||||
|
@ -64,13 +63,3 @@ makeManPages _ bf _ LocalBuildInfo{buildDir=buildDir}
|
|||
where
|
||||
verbosity = fromFlagOrDefault normal $ buildVerbosity bf
|
||||
progPath = buildDir </> "make-pandoc-man-pages" </> "make-pandoc-man-pages"
|
||||
|
||||
makeReferenceFiles :: Args -> BuildFlags -> PackageDescription -> LocalBuildInfo -> IO ()
|
||||
makeReferenceFiles _ bf _ LocalBuildInfo{buildDir=buildDir}
|
||||
= mapM_
|
||||
(rawSystemExit verbosity progPath . return)
|
||||
referenceFormats
|
||||
where
|
||||
verbosity = fromFlagOrDefault normal $ buildVerbosity bf
|
||||
progPath = buildDir </> "make-reference-files" </> "make-reference-files"
|
||||
referenceFormats = ["docx", "odt"]
|
||||
|
|
52
pandoc.cabal
52
pandoc.cabal
|
@ -69,28 +69,6 @@ Data-Files:
|
|||
data/templates/default.org
|
||||
data/templates/default.epub
|
||||
data/templates/default.epub3
|
||||
-- data for ODT writer
|
||||
data/reference.odt
|
||||
-- data for docx writer
|
||||
data/reference.docx
|
||||
-- stylesheet for EPUB writer
|
||||
data/epub.css
|
||||
-- data for LaTeXMathML writer
|
||||
data/LaTeXMathML.js
|
||||
data/MathMLinHTML.js
|
||||
-- data for dzslides writer
|
||||
data/dzslides/template.html
|
||||
-- sample lua custom writer
|
||||
data/sample.lua
|
||||
-- documentation
|
||||
README, COPYRIGHT
|
||||
Extra-Source-Files:
|
||||
-- documentation
|
||||
INSTALL, BUGS, CONTRIBUTING.md, changelog
|
||||
-- code to create pandoc.1 man page
|
||||
Makefile
|
||||
man/man1/pandoc.1.template
|
||||
man/man5/pandoc_markdown.5.template
|
||||
-- source files for reference.docx
|
||||
data/docx/[Content_Types].xml
|
||||
data/docx/_rels/.rels
|
||||
|
@ -116,7 +94,25 @@ Extra-Source-Files:
|
|||
data/odt/Configurations2/accelerator/current.xml
|
||||
data/odt/Thumbnails/thumbnail.png
|
||||
data/odt/META-INF/manifest.xml
|
||||
-- trypandoc
|
||||
-- stylesheet for EPUB writer
|
||||
data/epub.css
|
||||
-- data for LaTeXMathML writer
|
||||
data/LaTeXMathML.js
|
||||
data/MathMLinHTML.js
|
||||
-- data for dzslides writer
|
||||
data/dzslides/template.html
|
||||
-- sample lua custom writer
|
||||
data/sample.lua
|
||||
-- documentation
|
||||
README, COPYRIGHT
|
||||
Extra-Source-Files:
|
||||
-- documentation
|
||||
INSTALL, BUGS, CONTRIBUTING.md, changelog
|
||||
-- code to create pandoc.1 man page
|
||||
Makefile
|
||||
man/man1/pandoc.1.template
|
||||
man/man5/pandoc_markdown.5.template
|
||||
-- trypandoc
|
||||
trypandoc/Makefile
|
||||
trypandoc/index.html
|
||||
-- tests
|
||||
|
@ -439,16 +435,6 @@ Executable make-pandoc-man-pages
|
|||
Default-Language: Haskell98
|
||||
Buildable: True
|
||||
|
||||
Executable make-reference-files
|
||||
Main-Is: make-reference-files.hs
|
||||
Hs-Source-Dirs: data
|
||||
Build-Depends: zip-archive >= 0.2.3.4 && < 0.3,
|
||||
base >= 4.2 && < 5,
|
||||
filepath >= 1.1 && < 1.5,
|
||||
directory >= 1 && < 1.3,
|
||||
bytestring >= 0.9 && < 0.11
|
||||
Default-Language: Haskell2010
|
||||
|
||||
Test-Suite test-pandoc
|
||||
Type: exitcode-stdio-1.0
|
||||
Main-Is: test-pandoc.hs
|
||||
|
|
|
@ -211,11 +211,10 @@ writeDocx opts doc@(Pandoc meta _) = do
|
|||
let doc' = stripInvalidChars . walk fixDisplayMath $ doc
|
||||
username <- lookup "USERNAME" <$> getEnvironment
|
||||
utctime <- getCurrentTime
|
||||
refArchive <- liftM (toArchive . toLazy) $
|
||||
case writerReferenceDocx opts of
|
||||
Just f -> B.readFile f
|
||||
Nothing -> readDataFile datadir "reference.docx"
|
||||
distArchive <- liftM (toArchive . toLazy) $ readDataFile datadir "reference.docx"
|
||||
distArchive <- getDefaultReferenceDocx datadir
|
||||
refArchive <- case writerReferenceDocx opts of
|
||||
Just f -> liftM (toArchive . toLazy) $ B.readFile f
|
||||
Nothing -> return distArchive
|
||||
|
||||
parsedDoc <- parseXml refArchive distArchive "word/document.xml"
|
||||
let wname f qn = qPrefix qn == Just "w" && f (qName qn)
|
||||
|
@ -474,7 +473,7 @@ writeDocx opts doc@(Pandoc meta _) = do
|
|||
settingsEntry <- copyChildren refArchive distArchive settingsPath epochtime settingsList
|
||||
|
||||
let entryFromArchive arch path =
|
||||
maybe (fail $ path ++ " corrupt or missing in reference docx")
|
||||
maybe (fail $ path ++ " missing in reference docx")
|
||||
return
|
||||
(findEntryByPath path arch `mplus` findEntryByPath path distArchive)
|
||||
docPropsAppEntry <- entryFromArchive refArchive "docProps/app.xml"
|
||||
|
@ -1204,11 +1203,12 @@ defaultFootnotes = [ mknode "w:footnote"
|
|||
|
||||
parseXml :: Archive -> Archive -> String -> IO Element
|
||||
parseXml refArchive distArchive relpath =
|
||||
case ((findEntryByPath relpath refArchive `mplus`
|
||||
findEntryByPath relpath distArchive)
|
||||
>>= parseXMLDoc . UTF8.toStringLazy . fromEntry) of
|
||||
Just d -> return d
|
||||
Nothing -> fail $ relpath ++ " corrupt or missing in reference docx"
|
||||
case findEntryByPath relpath refArchive `mplus`
|
||||
findEntryByPath relpath distArchive of
|
||||
Nothing -> fail $ relpath ++ " missing in reference docx"
|
||||
Just e -> case parseXMLDoc . UTF8.toStringLazy . fromEntry $ e of
|
||||
Nothing -> fail $ relpath ++ " corrupt in reference docx"
|
||||
Just d -> return d
|
||||
|
||||
-- | Scales the image to fit the page
|
||||
-- sizes are passed in emu
|
||||
|
@ -1219,3 +1219,28 @@ fitToPage (x, y) pageWidth
|
|||
(pageWidth, round $
|
||||
((fromIntegral pageWidth) / ((fromIntegral :: Integer -> Double) x)) * (fromIntegral y))
|
||||
| otherwise = (x, y)
|
||||
|
||||
getDefaultReferenceDocx :: Maybe FilePath -> IO Archive
|
||||
getDefaultReferenceDocx datadir = do
|
||||
let paths = ["[Content_Types].xml",
|
||||
"_rels/.rels",
|
||||
"docProps/app.xml",
|
||||
"docProps/core.xml",
|
||||
"word/document.xml",
|
||||
"word/fontTable.xml",
|
||||
"word/footnotes.xml",
|
||||
"word/numbering.xml",
|
||||
"word/settings.xml",
|
||||
"word/webSettings.xml",
|
||||
"word/styles.xml",
|
||||
"word/_rels/document.xml.rels",
|
||||
"word/_rels/footnotes.xml.rels",
|
||||
"word/theme/theme1.xml"]
|
||||
let pathToEntry path = do epochtime <- (floor . utcTimeToPOSIXSeconds) <$>
|
||||
getCurrentTime
|
||||
contents <- toLazy <$> readDataFile datadir
|
||||
("docx/" ++ path)
|
||||
return $ toEntry path epochtime contents
|
||||
entries <- mapM pathToEntry paths
|
||||
let archive = foldr addEntryToArchive emptyArchive entries
|
||||
return archive
|
||||
|
|
|
@ -60,11 +60,10 @@ writeODT :: WriterOptions -- ^ Writer options
|
|||
writeODT opts doc@(Pandoc meta _) = do
|
||||
let datadir = writerUserDataDir opts
|
||||
let title = docTitle meta
|
||||
refArchive <- liftM toArchive $
|
||||
refArchive <-
|
||||
case writerReferenceODT opts of
|
||||
Just f -> B.readFile f
|
||||
Nothing -> (B.fromChunks . (:[])) `fmap`
|
||||
readDataFile datadir "reference.odt"
|
||||
Just f -> liftM toArchive $ B.readFile f
|
||||
Nothing -> getDefaultReferenceODT datadir
|
||||
-- handle formulas and pictures
|
||||
picEntriesRef <- newIORef ([] :: [Entry])
|
||||
doc' <- walkM (transformPicMath opts picEntriesRef) $ walk fixDisplayMath doc
|
||||
|
@ -178,3 +177,21 @@ transformPicMath _ entriesRef (Math t math) = do
|
|||
, ("xlink:actuate", "onLoad")]
|
||||
|
||||
transformPicMath _ _ x = return x
|
||||
|
||||
getDefaultReferenceODT :: Maybe FilePath -> IO Archive
|
||||
getDefaultReferenceODT datadir = do
|
||||
let paths = ["mimetype",
|
||||
"manifest.rdf",
|
||||
"styles.xml",
|
||||
"content.xml",
|
||||
"meta.xml",
|
||||
"settings.xml",
|
||||
"Configurations2/accelerator/current.xml",
|
||||
"Thumbnails/thumbnail.png",
|
||||
"META-INF/manifest.xml"]
|
||||
let pathToEntry path = do epochtime <- floor `fmap` getPOSIXTime
|
||||
contents <- (B.fromChunks . (:[])) `fmap`
|
||||
readDataFile datadir ("odt/" ++ path)
|
||||
return $ toEntry path epochtime contents
|
||||
entries <- mapM pathToEntry paths
|
||||
return $ foldr addEntryToArchive emptyArchive entries
|
||||
|
|
|
@ -5,10 +5,6 @@ cabal sandbox init
|
|||
cabal clean
|
||||
cabal install hsb2hs
|
||||
if %errorlevel% neq 0 exit /b %errorlevel%
|
||||
REM We do it once to regenrate data/reference.docx/odt
|
||||
cabal install -v1 --force --reinstall
|
||||
cabal clean
|
||||
REM then again for real, because otherwise it won't work with embed_data_files:
|
||||
cabal install -v1 --force --reinstall --flags="embed_data_files" . pandoc-citeproc
|
||||
if %errorlevel% neq 0 exit /b %errorlevel%
|
||||
strip .\.cabal-sandbox\bin\pandoc.exe
|
||||
|
|
Loading…
Reference in a new issue