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:
John MacFarlane
2010-11-20 08:11:30 -08:00
parent 46121aa2e1
commit 3eef887dfa
3 changed files with 12 additions and 36 deletions
+3 -2
View File
@@ -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'
-12
View File
@@ -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
View File
@@ -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