git.iko.soy/typeable/pandoc
on master help sign in
If --csl not specified, read from data files or default.
bbb60a2John MacFarlane
src/Text/Pandoc/Biblio.hs+2−5
@@ -29,7 +29,6 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
29
29
30module Text.Pandoc.Biblio ( processBiblio ) where
30module Text.Pandoc.Biblio ( processBiblio ) where
31
31
32−import Control.Monad ( when )
33import Data.List
32import Data.List
34import Data.Unique
33import Data.Unique
35import qualified Data.Map as M
34import qualified Data.Map as M
@@ -39,12 +38,10 @@ import Text.Pandoc.Definition
39
38
40-- | Process a 'Pandoc' document by adding citations formatted
39-- | Process a 'Pandoc' document by adding citations formatted
41-- according to a CSL style, using 'citeproc' from citeproc-hs.
40-- according to a CSL style, using 'citeproc' from citeproc-hs.
42−processBiblio :: String -> [Reference] -> Pandoc -> IO Pandoc
41+processBiblio :: Style -> [Reference] -> Pandoc -> IO Pandoc
43−processBiblio cf r p
42+processBiblio csl r p
44 = if null r then return p
43 = if null r then return p
45 else do
44 else do
46− when (null cf) $ error "Missing the needed citation style file"
47− csl <- readCSLFile cf
48 p' <- processWithM setHash p
45 p' <- processWithM setHash p
49 let (nts,grps) = if styleClass csl /= "note"
46 let (nts,grps) = if styleClass csl /= "note"
50 then (,) [] $ queryWith getCitation p'
47 then (,) [] $ queryWith getCitation p'
src/pandoc.hs+23−6
@@ -42,7 +42,7 @@ import System.FilePath
42import System.Console.GetOpt
42import System.Console.GetOpt
43import Data.Char ( toLower, isDigit )
43import Data.Char ( toLower, isDigit )
44import Data.List ( intercalate, isSuffixOf )
44import Data.List ( intercalate, isSuffixOf )
45−import System.Directory ( getAppUserDataDirectory )
45+import System.Directory ( getAppUserDataDirectory, doesFileExist )
46import System.IO ( stdout, stderr )
46import System.IO ( stdout, stderr )
47import qualified Text.Pandoc.UTF8 as UTF8
47import qualified Text.Pandoc.UTF8 as UTF8
48#ifdef _CITEPROC
48#ifdef _CITEPROC
@@ -55,6 +55,7 @@ import Network.URI (parseURI, isURI, URI(..))
55import qualified Data.ByteString.Lazy as B
55import qualified Data.ByteString.Lazy as B
56import Data.ByteString.Lazy.UTF8 (toString, fromString)
56import Data.ByteString.Lazy.UTF8 (toString, fromString)
57import Codec.Binary.UTF8.String (decodeString, encodeString)
57import Codec.Binary.UTF8.String (decodeString, encodeString)
58+import Paths_pandoc (getDataFileName)
58
59
59copyrightMessage :: String
60copyrightMessage :: String
60copyrightMessage = "\nCopyright (C) 2006-2010 John MacFarlane\n" ++
61copyrightMessage = "\nCopyright (C) 2006-2010 John MacFarlane\n" ++
@@ -164,7 +165,7 @@ data Opt = Opt
164 , optDataDir :: Maybe FilePath
165 , optDataDir :: Maybe FilePath
165#ifdef _CITEPROC
166#ifdef _CITEPROC
166 , optBibliography :: [Reference]
167 , optBibliography :: [Reference]
167− , optCslFile :: String
168+ , optCslFile :: FilePath
168#endif
169#endif
169 }
170 }
170
171
@@ -205,7 +206,7 @@ defaultOpts = Opt
205 , optDataDir = Nothing
206 , optDataDir = Nothing
206#ifdef _CITEPROC
207#ifdef _CITEPROC
207 , optBibliography = []
208 , optBibliography = []
208− , optCslFile = []
209+ , optCslFile = ""
209#endif
210#endif
210 }
211 }
211
212
@@ -532,7 +533,7 @@ options =
532 ""
533 ""
533 , Option "" ["csl"]
534 , Option "" ["csl"]
534 (ReqArg
535 (ReqArg
535− (\arg opt -> return opt { optCslFile = arg} )
536+ (\arg opt -> return opt { optCslFile = arg })
536 "FILENAME")
537 "FILENAME")
537 ""
538 ""
538#endif
539#endif
@@ -685,7 +686,7 @@ main = do
685 , optDataDir = mbDataDir
686 , optDataDir = mbDataDir
686#ifdef _CITEPROC
687#ifdef _CITEPROC
687 , optBibliography = refs
688 , optBibliography = refs
688− , optCslFile = cslFile
689+ , optCslFile = cslfile
689#endif
690#endif
690 } = opts
691 } = opts
691
692
@@ -838,13 +839,29 @@ main = do
838
839
839 let convertTabs = tabFilter (if preserveTabs then 0 else tabStop)
840 let convertTabs = tabFilter (if preserveTabs then 0 else tabStop)
840
841
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+
841 doc <- fmap (reader startParserState . convertTabs . intercalate "\n") (readSources sources)
858 doc <- fmap (reader startParserState . convertTabs . intercalate "\n") (readSources sources)
842
859
843 let doc' = foldr ($) doc transforms
860 let doc' = foldr ($) doc transforms
844
861
845 doc'' <- do
862 doc'' <- do
846#ifdef _CITEPROC
863#ifdef _CITEPROC
847− processBiblio cslFile refs doc'
864+ processBiblio csl refs doc'
848#else
865#else
849 return doc'
866 return doc'
850#endif
867#endif