git.iko.soy/typeable/pandoc
on master help sign in
Class: add setUserDataDir and getUserDataDir.

* Add stUserDataDir to CommonState. * Rename stUserDataDir/stCabalDataDir in PureState to stUserDataFiles/stCabalDataFiles.

commit13abd97ac0dad1162a6779775207a3db06418ce9 authorJohn MacFarlane <jgm@berkeley.edu> dateThu 10 Aug 2017, 23:16 (9 years ago) parent6aaf8f4
1 file changed+21−5
src/Text/Pandoc/Class.hs+21−5
src/Text/Pandoc/Class.hs+21−5
@@ -56,6 +56,8 @@ module Text.Pandoc.Class ( PandocMonad(..)
5656 , getMediaBag
5757 , setMediaBag
5858 , insertMedia
59+ , setUserDataDir
60+ , getUserDataDir
5961 , fetchItem
6062 , getInputFiles
6163 , getOutputFile
@@ -266,6 +268,8 @@ readFileFromDirs (d:ds) f = catchError
266268-- functions like 'setVerbosity' and 'withMediaBag' should be used.
267269data CommonState = CommonState { stLog :: [LogMessage]
268270 -- ^ A list of log messages in reverse order
271+ , stUserDataDir :: Maybe FilePath
272+ -- ^ Directory to search for data files
269273 , stMediaBag :: MediaBag
270274 -- ^ Media parsed from binary containers
271275 , stInputFiles :: Maybe [FilePath]
@@ -284,6 +288,7 @@ data CommonState = CommonState { stLog :: [LogMessage]
284288
285289instance Default CommonState where
286290 def = CommonState { stLog = []
291+ , stUserDataDir = Nothing
287292 , stMediaBag = mempty
288293 , stInputFiles = Nothing
289294 , stOutputFile = Nothing
@@ -359,6 +364,17 @@ parseURIReference' s =
359364 | null (uriScheme u) -> Just u -- protocol-relative
360365 _ -> Nothing
361366
367+-- | Set the user data directory in common state.
368+setUserDataDir :: PandocMonad m
369+ => Maybe FilePath
370+ -> m ()
371+setUserDataDir mbfp = modifyCommonState $ \st -> st{ stUserDataDir = mbfp }
372+
373+-- | Get the user data directory from common state.
374+getUserDataDir :: PandocMonad m
375+ => m (Maybe FilePath)
376+getUserDataDir = getsCommonState stUserDataDir
377+
362378-- | Fetch an image or other item from the local filesystem or the net.
363379-- Returns raw content and maybe mime type.
364380fetchItem :: PandocMonad m
@@ -497,8 +513,8 @@ data PureState = PureState { stStdGen :: StdGen
497513 , stReferenceDocx :: Archive
498514 , stReferenceODT :: Archive
499515 , stFiles :: FileTree
500− , stUserDataDir :: FileTree
501− , stCabalDataDir :: FileTree
516+ , stUserDataFiles :: FileTree
517+ , stCabalDataFiles :: FileTree
502518 }
503519
504520instance Default PureState where
@@ -511,8 +527,8 @@ instance Default PureState where
511527 , stReferenceDocx = emptyArchive
512528 , stReferenceODT = emptyArchive
513529 , stFiles = mempty
514− , stUserDataDir = mempty
515− , stCabalDataDir = mempty
530+ , stUserDataFiles = mempty
531+ , stCabalDataFiles = mempty
516532 }
517533
518534
@@ -614,7 +630,7 @@ instance PandocMonad PandocPure where
614630 let fname' = if fname == "MANUAL.txt" then fname else "data" </> fname
615631 readFileStrict fname'
616632 readDataFile (Just userDir) fname = do
617− userDirFiles <- getsPureState stUserDataDir
633+ userDirFiles <- getsPureState stUserDataFiles
618634 case infoFileContents <$> getFileInfo (userDir </> fname) userDirFiles of
619635 Just bs -> return bs
620636 Nothing -> readDataFile Nothing fname