@@ -44,6 +44,7 @@ import System.Console.GetOpt
4444import Data.Maybe ( fromMaybe )
4545import Data.Char ( toLower )
4646import Data.List ( intercalate, isSuffixOf )
47+import System.Directory ( getAppUserDataDirectory )
4748import System.IO ( stdout, stderr )
4849-- Note: ghc >= 6.12 (base >=4.2) supports unicode through iconv
4950-- So we use System.IO.UTF8 only if we have an earlier version
@@ -162,6 +163,7 @@ data Opt = Opt
162163 , optEmailObfuscation :: ObfuscationMethod
163164 , optIdentifierPrefix :: String
164165 , optIndentedCodeClasses :: [String] -- ^ Default classes for indented code blocks
166+ , optDataDir :: Maybe FilePath
165167#ifdef _CITEPROC
166168 , optBiblioFile :: String
167169 , optBiblioFormat :: String
@@ -200,6 +202,7 @@ defaultOpts = Opt
200202 , optEmailObfuscation = JavascriptObfuscation
201203 , optIdentifierPrefix = ""
202204 , optIndentedCodeClasses = []
205+ , optDataDir = Nothing
203206#ifdef _CITEPROC
204207 , optBiblioFile = []
205208 , optBiblioFormat = []
@@ -438,7 +441,7 @@ options =
438441 , Option "D" ["print-default-template"]
439442 (ReqArg
440443 (\arg _ -> do
441− templ <- getDefaultTemplate arg
444+ templ <- getTemplate Nothing arg
442445 case templ of
443446 Right t -> hPutStr stdout t
444447 Left e -> error $ show e
@@ -462,6 +465,12 @@ options =
462465 "FILENAME")
463466 ""
464467#endif
468+ , Option "" ["data-dir"]
469+ (ReqArg
470+ (\arg opt -> return opt { optDataDir = Just arg })
471+ "DIRECTORY") -- "Directory containing pandoc data files."
472+ ""
473+
465474 , Option "" ["dump-args"]
466475 (NoArg
467476 (\opt -> return opt { optDumpArgs = True }))
@@ -598,6 +607,7 @@ main = do
598607 , optEmailObfuscation = obfuscationMethod
599608 , optIdentifierPrefix = idPrefix
600609 , optIndentedCodeClasses = codeBlockClasses
610+ , optDataDir = mbDataDir
601611#ifdef _CITEPROC
602612 , optBiblioFile = biblioFile
603613 , optBiblioFormat = biblioFormat
@@ -619,6 +629,10 @@ main = do
619629
620630 let sources = if ignoreArgs then [] else args
621631
632+ datadir <- case mbDataDir of
633+ Just d -> return d
634+ Nothing -> getAppUserDataDirectory "pandoc"
635+
622636 -- assign reader and writer based on options and filenames
623637 let readerName' = if null readerName
624638 then defaultReaderName sources
@@ -636,7 +650,7 @@ main = do
636650 Just r -> return r
637651 Nothing -> error ("Unknown writer: " ++ writerName')
638652
639− templ <- getDefaultTemplate writerName'
653+ templ <- getTemplate (Just datadir) writerName'
640654 let defaultTemplate = case templ of
641655 Right t -> t
642656 Left e -> error (show e)
@@ -654,13 +668,13 @@ main = do
654668
655669 variables' <- if writerName' == "s5" && standalone'
656670 then do
657− inc <- s5HeaderIncludes
671+ inc <- s5HeaderIncludes datadir
658672 return $ ("header-includes", inc) : variables
659673 else return variables
660674
661675 variables'' <- case mathMethod of
662676 LaTeXMathML Nothing -> do
663− s <- latexMathMLScript
677+ s <- latexMathMLScript datadir
664678 return $ ("latexmathml-script", s) : variables'
665679 _ -> return variables'
666680
@@ -731,9 +745,9 @@ main = do
731745#endif
732746
733747 let writerOutput = writer writerOptions doc' ++ "\n"
734−
748+
735749 case writerName' of
736− "odt" -> saveOpenDocumentAsODT outputFile sourceDirRelative referenceODT writerOutput
750+ "odt" -> saveOpenDocumentAsODT datadir outputFile sourceDirRelative referenceODT writerOutput
737751 _ -> if outputFile == "-"
738752 then putStr writerOutput
739753 else writeFile outputFile writerOutput