@@ -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 $