@@ -35,6 +35,7 @@ module Text.Pandoc.Class ( PandocMonad(..)
3535 , PureState(..)
3636 , PureEnv(..)
3737 , getPOSIXTime
38+ , getZonedTime
3839 , addWarningWithPos
3940 , PandocIO(..)
4041 , PandocPure(..)
@@ -64,6 +65,8 @@ import qualified Text.Pandoc.Compat.Time as IO (getCurrentTime)
6465import Data.Time.Clock.POSIX ( utcTimeToPOSIXSeconds
6566 , posixSecondsToUTCTime
6667 , POSIXTime )
68+import Data.Time.LocalTime (TimeZone, ZonedTime, utcToZonedTime, utc)
69+import qualified Data.Time.LocalTime as IO (getCurrentTimeZone)
6770import Text.Pandoc.MIME (MimeType, getMimeType)
6871import Text.Pandoc.MediaBag (MediaBag)
6972import qualified Text.Pandoc.MediaBag as MB
@@ -82,12 +85,12 @@ import Data.Word (Word8)
8285import Data.Typeable
8386import Data.Default
8487import System.IO.Error
85−import Data.Map (Map)
8688import qualified Data.Map as M
8789
8890class (Functor m, Applicative m, Monad m, MonadError PandocExecutionError m) => PandocMonad m where
8991 lookupEnv :: String -> m (Maybe String)
9092 getCurrentTime :: m UTCTime
93+ getCurrentTimeZone :: m TimeZone
9194 getDefaultReferenceDocx :: Maybe FilePath -> m Archive
9295 getDefaultReferenceODT :: Maybe FilePath -> m Archive
9396 newStdGen :: m StdGen
@@ -117,6 +120,12 @@ class (Functor m, Applicative m, Monad m, MonadError PandocExecutionError m) =>
117120getPOSIXTime :: (PandocMonad m) => m POSIXTime
118121getPOSIXTime = utcTimeToPOSIXSeconds <$> getCurrentTime
119122
123+getZonedTime :: (PandocMonad m) => m ZonedTime
124+getZonedTime = do
125+ t <- getCurrentTime
126+ tz <- getCurrentTimeZone
127+ return $ utcToZonedTime tz t
128+
120129addWarningWithPos :: PandocMonad m
121130 => Maybe SourcePos
122131 -> String
@@ -169,6 +178,7 @@ newtype PandocIO a = PandocIO {
169178instance PandocMonad PandocIO where
170179 lookupEnv = liftIO . IO.lookupEnv
171180 getCurrentTime = liftIO IO.getCurrentTime
181+ getCurrentTimeZone = liftIO IO.getCurrentTimeZone
172182 getDefaultReferenceDocx = liftIO . IO.getDefaultReferenceDocx
173183 getDefaultReferenceODT = liftIO . IO.getDefaultReferenceODT
174184 newStdGen = liftIO IO.newStdGen
@@ -236,6 +246,7 @@ getFileInfo fp tree = M.lookup fp $ unFileTree tree
236246
237247data PureEnv = PureEnv { envEnv :: [(String, String)]
238248 , envTime :: UTCTime
249+ , envTimeZone :: TimeZone
239250 , envReferenceDocx :: Archive
240251 , envReferenceODT :: Archive
241252 , envFiles :: FileTree
@@ -249,6 +260,7 @@ data PureEnv = PureEnv { envEnv :: [(String, String)]
249260instance Default PureEnv where
250261 def = PureEnv { envEnv = [("USER", "pandoc-user")]
251262 , envTime = posixSecondsToUTCTime 0
263+ , envTimeZone = utc
252264 , envReferenceDocx = emptyArchive
253265 , envReferenceODT = emptyArchive
254266 , envFiles = mempty
@@ -280,6 +292,8 @@ instance PandocMonad PandocPure where
280292
281293 getCurrentTime = asks envTime
282294
295+ getCurrentTimeZone = asks envTimeZone
296+
283297 getDefaultReferenceDocx _ = asks envReferenceDocx
284298
285299 getDefaultReferenceODT _ = asks envReferenceODT