git.iko.soy/typeable/pandoc
on master help sign in
Use default biblio.{xml,json,bib} in pandoc data dir if none specified.
46121aaJohn MacFarlane
src/pandoc.hs+23−21
@@ -32,7 +32,7 @@ module Main where
32import Text.Pandoc
32import Text.Pandoc
33import Text.Pandoc.S5 (s5HeaderIncludes)
33import Text.Pandoc.S5 (s5HeaderIncludes)
34import Text.Pandoc.Shared ( tabFilter, ObfuscationMethod (..), readDataFile,
34import Text.Pandoc.Shared ( tabFilter, ObfuscationMethod (..), readDataFile,
35− headerShift )
35+ headerShift, findDataFile, findFirstFile )
36#ifdef _HIGHLIGHTING
36#ifdef _HIGHLIGHTING
37import Text.Pandoc.Highlighting ( languages )
37import Text.Pandoc.Highlighting ( languages )
38#endif
38#endif
@@ -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, doesFileExist )
45+import System.Directory ( getAppUserDataDirectory )
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,7 +55,6 @@ 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)
59
58
60copyrightMessage :: String
59copyrightMessage :: String
61copyrightMessage = "\nCopyright (C) 2006-2010 John MacFarlane\n" ++
60copyrightMessage = "\nCopyright (C) 2006-2010 John MacFarlane\n" ++
@@ -768,6 +767,25 @@ main = do
768 return $ ("mathml-script", s) : variables'
767 return $ ("mathml-script", s) : variables'
769 _ -> return variables'
768 _ -> return variables'
770
769
770+#ifdef _CITEPROC
771+ cslfile' <- if null cslfile
772+ then findDataFile datadir "default.csl"
773+ else return cslfile
774+ csl <- readCSLFile cslfile'
775+ refs' <- if null refs
776+ then do
777+ f <- findFirstFile datadir
778+ ["biblio.xml","biblio.json","biblio.bib"]
779+ case f of
780+ Just x -> catch (readBiblioFile x) $ \e -> do
781+ UTF8.hPutStrLn stderr $
782+ "Error reading bibliography `" ++ x ++ "'"
783+ UTF8.hPutStrLn stderr $ show e
784+ exitWith (ExitFailure 23) >> return []
785+ Nothing -> return []
786+ else return refs
787+#endif
788+
771 let sourceDir = if null sources
789 let sourceDir = if null sources
772 then "."
790 then "."
773 else takeDirectory (head sources)
791 else takeDirectory (head sources)
@@ -785,7 +803,7 @@ main = do
785 lhsExtension sources,
803 lhsExtension sources,
786 stateStandalone = standalone',
804 stateStandalone = standalone',
787#ifdef _CITEPROC
805#ifdef _CITEPROC
788− stateCitations = map refId refs,
806+ stateCitations = map refId refs',
789#endif
807#endif
790 stateSmart = smart || writerName' `elem`
808 stateSmart = smart || writerName' `elem`
791 ["latex", "context", "latex+lhs", "man"],
809 ["latex", "context", "latex+lhs", "man"],
@@ -839,29 +857,13 @@ main = do
839
857
840 let convertTabs = tabFilter (if preserveTabs then 0 else tabStop)
858 let convertTabs = tabFilter (if preserveTabs then 0 else tabStop)
841
859
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−
858 doc <- fmap (reader startParserState . convertTabs . intercalate "\n") (readSources sources)
860 doc <- fmap (reader startParserState . convertTabs . intercalate "\n") (readSources sources)
859
861
860 let doc' = foldr ($) doc transforms
862 let doc' = foldr ($) doc transforms
861
863
862 doc'' <- do
864 doc'' <- do
863#ifdef _CITEPROC
865#ifdef _CITEPROC
864− processBiblio csl refs doc'
866+ processBiblio csl refs' doc'
865#else
867#else
866 return doc'
868 return doc'
867#endif
869#endif