mirror of
https://github.com/jgm/pandoc.git
synced 2026-09-13 02:55:55 +00:00
Citation related changes.
* Don't look for bibliography in ~/.pandoc. Reason: doing this requires a read + parse of the bibliography even when the document doesn't use citations. This is a big performance drag on regular pandoc invocations. * Only look for default.csl if the document contains references. Reason: avoids the need to read and parse csl file when the document contains no references anyway. * Removed findFirstFile from Shared.
This commit is contained in:
@@ -38,10 +38,11 @@ import Text.Pandoc.Definition
|
||||
|
||||
-- | Process a 'Pandoc' document by adding citations formatted
|
||||
-- according to a CSL style, using 'citeproc' from citeproc-hs.
|
||||
processBiblio :: Style -> [Reference] -> Pandoc -> IO Pandoc
|
||||
processBiblio csl r p
|
||||
processBiblio :: FilePath -> [Reference] -> Pandoc -> IO Pandoc
|
||||
processBiblio cslfile r p
|
||||
= if null r then return p
|
||||
else do
|
||||
csl <- readCSLFile cslfile
|
||||
p' <- processWithM setHash p
|
||||
let (nts,grps) = if styleClass csl /= "note"
|
||||
then (,) [] $ queryWith getCitation p'
|
||||
|
||||
@@ -71,7 +71,6 @@ module Text.Pandoc.Shared (
|
||||
defaultWriterOptions,
|
||||
-- * File handling
|
||||
inDirectory,
|
||||
findFirstFile,
|
||||
findDataFile,
|
||||
readDataFile
|
||||
) where
|
||||
@@ -540,17 +539,6 @@ inDirectory path action = do
|
||||
setCurrentDirectory oldDir
|
||||
return result
|
||||
|
||||
-- | Get full file path for the first of a list of files found in the
|
||||
-- specified directory.
|
||||
findFirstFile :: (Maybe FilePath) -> [FilePath] -> IO (Maybe FilePath)
|
||||
findFirstFile Nothing _ = return Nothing
|
||||
findFirstFile (Just _) [] = return Nothing
|
||||
findFirstFile (Just dir) (f:fs) = do
|
||||
ex <- doesFileExist (dir </> f)
|
||||
if ex
|
||||
then return $ Just (dir </> f)
|
||||
else findFirstFile (Just dir) fs
|
||||
|
||||
-- | Get file path for data file, either from specified user data directory,
|
||||
-- or, if not found there, from Cabal data directory.
|
||||
findDataFile :: Maybe FilePath -> FilePath -> IO FilePath
|
||||
|
||||
+9
-22
@@ -32,7 +32,7 @@ module Main where
|
||||
import Text.Pandoc
|
||||
import Text.Pandoc.S5 (s5HeaderIncludes)
|
||||
import Text.Pandoc.Shared ( tabFilter, ObfuscationMethod (..), readDataFile,
|
||||
headerShift, findDataFile, findFirstFile )
|
||||
headerShift, findDataFile )
|
||||
#ifdef _HIGHLIGHTING
|
||||
import Text.Pandoc.Highlighting ( languages )
|
||||
#endif
|
||||
@@ -767,25 +767,6 @@ main = do
|
||||
return $ ("mathml-script", s) : variables'
|
||||
_ -> return variables'
|
||||
|
||||
#ifdef _CITEPROC
|
||||
cslfile' <- if null cslfile
|
||||
then findDataFile datadir "default.csl"
|
||||
else return cslfile
|
||||
csl <- readCSLFile cslfile'
|
||||
refs' <- if null refs
|
||||
then do
|
||||
f <- findFirstFile datadir
|
||||
["biblio.xml","biblio.json","biblio.bib"]
|
||||
case f of
|
||||
Just x -> catch (readBiblioFile x) $ \e -> do
|
||||
UTF8.hPutStrLn stderr $
|
||||
"Error reading bibliography `" ++ x ++ "'"
|
||||
UTF8.hPutStrLn stderr $ show e
|
||||
exitWith (ExitFailure 23) >> return []
|
||||
Nothing -> return []
|
||||
else return refs
|
||||
#endif
|
||||
|
||||
let sourceDir = if null sources
|
||||
then "."
|
||||
else takeDirectory (head sources)
|
||||
@@ -803,7 +784,7 @@ main = do
|
||||
lhsExtension sources,
|
||||
stateStandalone = standalone',
|
||||
#ifdef _CITEPROC
|
||||
stateCitations = map refId refs',
|
||||
stateCitations = map refId refs,
|
||||
#endif
|
||||
stateSmart = smart || writerName' `elem`
|
||||
["latex", "context", "latex+lhs", "man"],
|
||||
@@ -863,7 +844,13 @@ main = do
|
||||
|
||||
doc'' <- do
|
||||
#ifdef _CITEPROC
|
||||
processBiblio csl refs' doc'
|
||||
if null refs
|
||||
then return doc'
|
||||
else do
|
||||
cslfile' <- if null cslfile
|
||||
then findDataFile datadir "default.csl"
|
||||
else return cslfile
|
||||
processBiblio cslfile' refs doc'
|
||||
#else
|
||||
return doc'
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user