git.iko.soy/typeable/pandoc
on master help sign in
Improve searching for CSL files...

...and CSL abbreviation files. Use resource path to search in both USERDATADIR/csl and USERDATADIR/csl/dependent. Also, add .csl or .json extension as needed, so you can just do --csl zoology.

commit89e4f1bf9ad48e3fdefeb5c921e9af62ebc24601 authorJohn MacFarlane <jgm@berkeley.edu> dateMon 5 Oct 2020, 17:23 (6 years ago) parent4dac62e
1 file changed+15−6
src/Text/Pandoc/Citeproc.hs+15−6
src/Text/Pandoc/Citeproc.hs+15−6
@@ -19,6 +19,7 @@ import Text.Pandoc.Citeproc.CslJson (cslJsonToReferences)
1919import Text.Pandoc.Citeproc.BibTeX (readBibtexString, Variant(..))
2020import Text.Pandoc.Citeproc.MetaValue (metaValueToReference, metaValueToText)
2121import Text.Pandoc.Readers.Markdown (yamlToMeta)
22+import Text.Pandoc.Class (setResourcePath, getResourcePath, getUserDataDir)
2223import Data.ByteString (ByteString)
2324import qualified Data.ByteString.Lazy as L
2425import Text.Pandoc.Definition as Pandoc
@@ -53,21 +54,29 @@ processCitations (Pandoc meta bs) = do
5354 let cslfile = (lookupMeta "csl" meta <|> lookupMeta "citation-style" meta)
5455 >>= metaValueToText
5556
56− let getFile fp = catchError (fst <$> fetchItem fp)
57− (\e -> catchError (readDataFile
58− (T.unpack $ "csl/" <> fp))
59− (\_ -> throwError e))
57+ let getFile defaultExtension fp = do
58+ oldRp <- getResourcePath
59+ mbUdd <- getUserDataDir
60+ setResourcePath $ oldRp ++ maybe []
61+ (\u -> [u <> "/csl",
62+ u <> "/csl/dependent"]) mbUdd
63+ let fp' = if T.any (=='.') fp
64+ then fp
65+ else fp <> defaultExtension
66+ (result, _) <- fetchItem fp'
67+ setResourcePath oldRp
68+ return result
6069
6170 let getCslDefault = readDataFile "default.csl"
6271
63− cslContents <- UTF8.toText <$> maybe getCslDefault getFile cslfile
72+ cslContents <- UTF8.toText <$> maybe getCslDefault (getFile ".csl") cslfile
6473
6574 let abbrevFile = lookupMeta "citation-abbreviations" meta >>= metaValueToText
6675
6776 mbAbbrevs <- case abbrevFile of
6877 Nothing -> return Nothing
6978 Just fp -> do
70− rawAbbr <- getFile fp
79+ rawAbbr <- getFile ".json" fp
7180 case eitherDecode (L.fromStrict rawAbbr) of
7281 Left err -> throwError $ PandocCiteprocError $
7382 CiteprocParseError $