@@ -42,7 +42,7 @@ import System.FilePath
4242import System.Console.GetOpt
4343import Data.Char ( toLower, isDigit )
4444import Data.List ( intercalate, isSuffixOf )
45−import System.Directory ( getAppUserDataDirectory )
45+import System.Directory ( getAppUserDataDirectory, doesFileExist )
4646import System.IO ( stdout, stderr )
4747import qualified Text.Pandoc.UTF8 as UTF8
4848#ifdef _CITEPROC
@@ -55,6 +55,7 @@ import Network.URI (parseURI, isURI, URI(..))
5555import qualified Data.ByteString.Lazy as B
5656import Data.ByteString.Lazy.UTF8 (toString, fromString)
5757import Codec.Binary.UTF8.String (decodeString, encodeString)
58+import Paths_pandoc (getDataFileName)
5859
5960copyrightMessage :: String
6061copyrightMessage = "\nCopyright (C) 2006-2010 John MacFarlane\n" ++
@@ -164,7 +165,7 @@ data Opt = Opt
164165 , optDataDir :: Maybe FilePath
165166#ifdef _CITEPROC
166167 , optBibliography :: [Reference]
167− , optCslFile :: String
168+ , optCslFile :: FilePath
168169#endif
169170 }
170171
@@ -205,7 +206,7 @@ defaultOpts = Opt
205206 , optDataDir = Nothing
206207#ifdef _CITEPROC
207208 , optBibliography = []
208− , optCslFile = []
209+ , optCslFile = ""
209210#endif
210211 }
211212
@@ -532,7 +533,7 @@ options =
532533 ""
533534 , Option "" ["csl"]
534535 (ReqArg
535− (\arg opt -> return opt { optCslFile = arg} )
536+ (\arg opt -> return opt { optCslFile = arg })
536537 "FILENAME")
537538 ""
538539#endif
@@ -685,7 +686,7 @@ main = do
685686 , optDataDir = mbDataDir
686687#ifdef _CITEPROC
687688 , optBibliography = refs
688− , optCslFile = cslFile
689+ , optCslFile = cslfile
689690#endif
690691 } = opts
691692
@@ -838,13 +839,29 @@ main = do
838839
839840 let convertTabs = tabFilter (if preserveTabs then 0 else tabStop)
840841
842+#ifdef _CITEPROC
843+ cslfile' <- if null cslfile
844+ then do
845+ let defaultcsl = "default.csl"
846+ csldatafile <- getDataFileName defaultcsl
847+ case datadir of
848+ Nothing -> return csldatafile
849+ Just u -> do
850+ ex <- doesFileExist $ u </> defaultcsl
851+ if ex
852+ then return $ u </> defaultcsl
853+ else return csldatafile
854+ else return cslfile
855+ csl <- readCSLFile cslfile'
856+#endif
857+
841858 doc <- fmap (reader startParserState . convertTabs . intercalate "\n") (readSources sources)
842859
843860 let doc' = foldr ($) doc transforms
844861
845862 doc'' <- do
846863#ifdef _CITEPROC
847− processBiblio cslFile refs doc'
864+ processBiblio csl refs doc'
848865#else
849866 return doc'
850867#endif