git.iko.soy/typeable/pandoc
on master help sign in
If --csl not specified, read from data files or default.

Thus --csl behaves like --reference-odt, --template, etc.

commitbbb60a2586f29785fd9ba592770bc2f7842deba4 authorJohn MacFarlane <jgm@berkeley.edu> dateThu 18 Nov 2010, 14:15 (16 years ago) parent482b4b8
2 files changed+25−11
src/Text/Pandoc/Biblio.hs+2−5 src/pandoc.hs+23−6
src/Text/Pandoc/Biblio.hs+2−5
@@ -29,7 +29,6 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
2929
3030module Text.Pandoc.Biblio ( processBiblio ) where
3131
32−import Control.Monad ( when )
3332import Data.List
3433import Data.Unique
3534import qualified Data.Map as M
@@ -39,12 +38,10 @@ import Text.Pandoc.Definition
3938
4039-- | Process a 'Pandoc' document by adding citations formatted
4140-- according to a CSL style, using 'citeproc' from citeproc-hs.
42−processBiblio :: String -> [Reference] -> Pandoc -> IO Pandoc
43−processBiblio cf r p
41+processBiblio :: Style -> [Reference] -> Pandoc -> IO Pandoc
42+processBiblio csl r p
4443 = if null r then return p
4544 else do
46− when (null cf) $ error "Missing the needed citation style file"
47− csl <- readCSLFile cf
4845 p' <- processWithM setHash p
4946 let (nts,grps) = if styleClass csl /= "note"
5047 then (,) [] $ queryWith getCitation p'
src/pandoc.hs+23−6
@@ -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