@@ -35,6 +35,7 @@ module Text.Pandoc.Class ( PandocMonad(..)
35 , PureState(..)
35 , PureState(..)
36 , PureEnv(..)
36 , PureEnv(..)
37 , getPOSIXTime
37 , getPOSIXTime
38 , addWarningWithPos
39 , addWarningWithPos
39 , PandocIO(..)
40 , PandocIO(..)
40 , PandocPure(..)
41 , PandocPure(..)
@@ -64,6 +65,8 @@ import qualified Text.Pandoc.Compat.Time as IO (getCurrentTime)
64import Data.Time.Clock.POSIX ( utcTimeToPOSIXSeconds
65import Data.Time.Clock.POSIX ( utcTimeToPOSIXSeconds
65 , posixSecondsToUTCTime
66 , posixSecondsToUTCTime
66 , POSIXTime )
67 , POSIXTime )
68+import Data.Time.LocalTime (TimeZone, ZonedTime, utcToZonedTime, utc)
69+import qualified Data.Time.LocalTime as IO (getCurrentTimeZone)
67import Text.Pandoc.MIME (MimeType, getMimeType)
70import Text.Pandoc.MIME (MimeType, getMimeType)
68import Text.Pandoc.MediaBag (MediaBag)
71import Text.Pandoc.MediaBag (MediaBag)
69import qualified Text.Pandoc.MediaBag as MB
72import qualified Text.Pandoc.MediaBag as MB
@@ -82,12 +85,12 @@ import Data.Word (Word8)
82import Data.Typeable
85import Data.Typeable
83import Data.Default
86import Data.Default
84import System.IO.Error
87import System.IO.Error
86import qualified Data.Map as M
88import qualified Data.Map as M
88class (Functor m, Applicative m, Monad m, MonadError PandocExecutionError m) => PandocMonad m where
90class (Functor m, Applicative m, Monad m, MonadError PandocExecutionError m) => PandocMonad m where
89 lookupEnv :: String -> m (Maybe String)
91 lookupEnv :: String -> m (Maybe String)
90 getCurrentTime :: m UTCTime
92 getCurrentTime :: m UTCTime
93+ getCurrentTimeZone :: m TimeZone
91 getDefaultReferenceDocx :: Maybe FilePath -> m Archive
94 getDefaultReferenceDocx :: Maybe FilePath -> m Archive
92 getDefaultReferenceODT :: Maybe FilePath -> m Archive
95 getDefaultReferenceODT :: Maybe FilePath -> m Archive
93 newStdGen :: m StdGen
96 newStdGen :: m StdGen
@@ -117,6 +120,12 @@ class (Functor m, Applicative m, Monad m, MonadError PandocExecutionError m) =>
117getPOSIXTime :: (PandocMonad m) => m POSIXTime
120getPOSIXTime :: (PandocMonad m) => m POSIXTime
118getPOSIXTime = utcTimeToPOSIXSeconds <$> getCurrentTime
121getPOSIXTime = utcTimeToPOSIXSeconds <$> getCurrentTime
123+getZonedTime :: (PandocMonad m) => m ZonedTime
126+ tz <- getCurrentTimeZone
127+ return $ utcToZonedTime tz t
120addWarningWithPos :: PandocMonad m
129addWarningWithPos :: PandocMonad m
121 => Maybe SourcePos
130 => Maybe SourcePos
122 -> String
131 -> String
@@ -169,6 +178,7 @@ newtype PandocIO a = PandocIO {
169instance PandocMonad PandocIO where
178instance PandocMonad PandocIO where
170 lookupEnv = liftIO . IO.lookupEnv
179 lookupEnv = liftIO . IO.lookupEnv
171 getCurrentTime = liftIO IO.getCurrentTime
180 getCurrentTime = liftIO IO.getCurrentTime
181+ getCurrentTimeZone = liftIO IO.getCurrentTimeZone
172 getDefaultReferenceDocx = liftIO . IO.getDefaultReferenceDocx
182 getDefaultReferenceDocx = liftIO . IO.getDefaultReferenceDocx
173 getDefaultReferenceODT = liftIO . IO.getDefaultReferenceODT
183 getDefaultReferenceODT = liftIO . IO.getDefaultReferenceODT
174 newStdGen = liftIO IO.newStdGen
184 newStdGen = liftIO IO.newStdGen
@@ -236,6 +246,7 @@ getFileInfo fp tree = M.lookup fp $ unFileTree tree
237data PureEnv = PureEnv { envEnv :: [(String, String)]
247data PureEnv = PureEnv { envEnv :: [(String, String)]
238 , envTime :: UTCTime
248 , envTime :: UTCTime
249+ , envTimeZone :: TimeZone
239 , envReferenceDocx :: Archive
250 , envReferenceDocx :: Archive
240 , envReferenceODT :: Archive
251 , envReferenceODT :: Archive
241 , envFiles :: FileTree
252 , envFiles :: FileTree
@@ -249,6 +260,7 @@ data PureEnv = PureEnv { envEnv :: [(String, String)]
249instance Default PureEnv where
260instance Default PureEnv where
250 def = PureEnv { envEnv = [("USER", "pandoc-user")]
261 def = PureEnv { envEnv = [("USER", "pandoc-user")]
251 , envTime = posixSecondsToUTCTime 0
262 , envTime = posixSecondsToUTCTime 0
252 , envReferenceDocx = emptyArchive
264 , envReferenceDocx = emptyArchive
253 , envReferenceODT = emptyArchive
265 , envReferenceODT = emptyArchive
254 , envFiles = mempty
266 , envFiles = mempty
@@ -280,6 +292,8 @@ instance PandocMonad PandocPure where
281 getCurrentTime = asks envTime
293 getCurrentTime = asks envTime
295+ getCurrentTimeZone = asks envTimeZone
283 getDefaultReferenceDocx _ = asks envReferenceDocx
297 getDefaultReferenceDocx _ = asks envReferenceDocx
285 getDefaultReferenceODT _ = asks envReferenceODT
299 getDefaultReferenceODT _ = asks envReferenceODT