@@ -56,6 +56,8 @@ module Text.Pandoc.Class ( PandocMonad(..)
56 , getMediaBag
56 , getMediaBag
57 , setMediaBag
57 , setMediaBag
58 , insertMedia
58 , insertMedia
59 , fetchItem
61 , fetchItem
60 , getInputFiles
62 , getInputFiles
61 , getOutputFile
63 , getOutputFile
@@ -266,6 +268,8 @@ readFileFromDirs (d:ds) f = catchError
266-- functions like 'setVerbosity' and 'withMediaBag' should be used.
268-- functions like 'setVerbosity' and 'withMediaBag' should be used.
267data CommonState = CommonState { stLog :: [LogMessage]
269data CommonState = CommonState { stLog :: [LogMessage]
268 -- ^ A list of log messages in reverse order
270 -- ^ A list of log messages in reverse order
271+ , stUserDataDir :: Maybe FilePath
272+ -- ^ Directory to search for data files
269 , stMediaBag :: MediaBag
273 , stMediaBag :: MediaBag
270 -- ^ Media parsed from binary containers
274 -- ^ Media parsed from binary containers
271 , stInputFiles :: Maybe [FilePath]
275 , stInputFiles :: Maybe [FilePath]
@@ -284,6 +288,7 @@ data CommonState = CommonState { stLog :: [LogMessage]
285instance Default CommonState where
289instance Default CommonState where
286 def = CommonState { stLog = []
290 def = CommonState { stLog = []
291+ , stUserDataDir = Nothing
287 , stMediaBag = mempty
292 , stMediaBag = mempty
288 , stInputFiles = Nothing
293 , stInputFiles = Nothing
289 , stOutputFile = Nothing
294 , stOutputFile = Nothing
@@ -359,6 +364,17 @@ parseURIReference' s =
359 | null (uriScheme u) -> Just u -- protocol-relative
364 | null (uriScheme u) -> Just u -- protocol-relative
360 _ -> Nothing
365 _ -> Nothing
367+-- | Set the user data directory in common state.
368+setUserDataDir :: PandocMonad m
371+setUserDataDir mbfp = modifyCommonState $ \st -> st{ stUserDataDir = mbfp }
373+-- | Get the user data directory from common state.
374+getUserDataDir :: PandocMonad m
375+ => m (Maybe FilePath)
376+getUserDataDir = getsCommonState stUserDataDir
362-- | Fetch an image or other item from the local filesystem or the net.
378-- | Fetch an image or other item from the local filesystem or the net.
363-- Returns raw content and maybe mime type.
379-- Returns raw content and maybe mime type.
364fetchItem :: PandocMonad m
380fetchItem :: PandocMonad m
@@ -497,8 +513,8 @@ data PureState = PureState { stStdGen :: StdGen
497 , stReferenceDocx :: Archive
513 , stReferenceDocx :: Archive
498 , stReferenceODT :: Archive
514 , stReferenceODT :: Archive
499 , stFiles :: FileTree
515 , stFiles :: FileTree
500− , stUserDataDir :: FileTree
516+ , stUserDataFiles :: FileTree
501− , stCabalDataDir :: FileTree
517+ , stCabalDataFiles :: FileTree
504instance Default PureState where
520instance Default PureState where
@@ -511,8 +527,8 @@ instance Default PureState where
511 , stReferenceDocx = emptyArchive
527 , stReferenceDocx = emptyArchive
512 , stReferenceODT = emptyArchive
528 , stReferenceODT = emptyArchive
513 , stFiles = mempty
529 , stFiles = mempty
514− , stUserDataDir = mempty
530+ , stUserDataFiles = mempty
515− , stCabalDataDir = mempty
531+ , stCabalDataFiles = mempty
@@ -614,7 +630,7 @@ instance PandocMonad PandocPure where
614 let fname' = if fname == "MANUAL.txt" then fname else "data" </> fname
630 let fname' = if fname == "MANUAL.txt" then fname else "data" </> fname
615 readFileStrict fname'
631 readFileStrict fname'
616 readDataFile (Just userDir) fname = do
632 readDataFile (Just userDir) fname = do
617− userDirFiles <- getsPureState stUserDataDir
633+ userDirFiles <- getsPureState stUserDataFiles
618 case infoFileContents <$> getFileInfo (userDir </> fname) userDirFiles of
634 case infoFileContents <$> getFileInfo (userDir </> fname) userDirFiles of
619 Just bs -> return bs
635 Just bs -> return bs
620 Nothing -> readDataFile Nothing fname
636 Nothing -> readDataFile Nothing fname