Add Zoned time to class.

This commit is contained in:
Jesse Rosenthal 2016-11-30 09:46:08 -05:00 committed by John MacFarlane
parent fe0b71a2f1
commit 9d9f615593

View file

@ -35,6 +35,7 @@ module Text.Pandoc.Class ( PandocMonad(..)
, PureState(..) , PureState(..)
, PureEnv(..) , PureEnv(..)
, getPOSIXTime , getPOSIXTime
, getZonedTime
, addWarningWithPos , addWarningWithPos
, PandocIO(..) , PandocIO(..)
, PandocPure(..) , PandocPure(..)
@ -64,6 +65,8 @@ import qualified Text.Pandoc.Compat.Time as IO (getCurrentTime)
import Data.Time.Clock.POSIX ( utcTimeToPOSIXSeconds import Data.Time.Clock.POSIX ( utcTimeToPOSIXSeconds
, posixSecondsToUTCTime , posixSecondsToUTCTime
, POSIXTime ) , POSIXTime )
import Data.Time.LocalTime (TimeZone, ZonedTime, utcToZonedTime, utc)
import qualified Data.Time.LocalTime as IO (getCurrentTimeZone)
import Text.Pandoc.MIME (MimeType, getMimeType) import Text.Pandoc.MIME (MimeType, getMimeType)
import Text.Pandoc.MediaBag (MediaBag) import Text.Pandoc.MediaBag (MediaBag)
import qualified Text.Pandoc.MediaBag as MB import qualified Text.Pandoc.MediaBag as MB
@ -82,12 +85,12 @@ import Data.Word (Word8)
import Data.Typeable import Data.Typeable
import Data.Default import Data.Default
import System.IO.Error import System.IO.Error
import Data.Map (Map)
import qualified Data.Map as M import qualified Data.Map as M
class (Functor m, Applicative m, Monad m, MonadError PandocExecutionError m) => PandocMonad m where class (Functor m, Applicative m, Monad m, MonadError PandocExecutionError m) => PandocMonad m where
lookupEnv :: String -> m (Maybe String) lookupEnv :: String -> m (Maybe String)
getCurrentTime :: m UTCTime getCurrentTime :: m UTCTime
getCurrentTimeZone :: m TimeZone
getDefaultReferenceDocx :: Maybe FilePath -> m Archive getDefaultReferenceDocx :: Maybe FilePath -> m Archive
getDefaultReferenceODT :: Maybe FilePath -> m Archive getDefaultReferenceODT :: Maybe FilePath -> m Archive
newStdGen :: m StdGen newStdGen :: m StdGen
@ -117,6 +120,12 @@ class (Functor m, Applicative m, Monad m, MonadError PandocExecutionError m) =>
getPOSIXTime :: (PandocMonad m) => m POSIXTime getPOSIXTime :: (PandocMonad m) => m POSIXTime
getPOSIXTime = utcTimeToPOSIXSeconds <$> getCurrentTime getPOSIXTime = utcTimeToPOSIXSeconds <$> getCurrentTime
getZonedTime :: (PandocMonad m) => m ZonedTime
getZonedTime = do
t <- getCurrentTime
tz <- getCurrentTimeZone
return $ utcToZonedTime tz t
addWarningWithPos :: PandocMonad m addWarningWithPos :: PandocMonad m
=> Maybe SourcePos => Maybe SourcePos
-> String -> String
@ -169,6 +178,7 @@ newtype PandocIO a = PandocIO {
instance PandocMonad PandocIO where instance PandocMonad PandocIO where
lookupEnv = liftIO . IO.lookupEnv lookupEnv = liftIO . IO.lookupEnv
getCurrentTime = liftIO IO.getCurrentTime getCurrentTime = liftIO IO.getCurrentTime
getCurrentTimeZone = liftIO IO.getCurrentTimeZone
getDefaultReferenceDocx = liftIO . IO.getDefaultReferenceDocx getDefaultReferenceDocx = liftIO . IO.getDefaultReferenceDocx
getDefaultReferenceODT = liftIO . IO.getDefaultReferenceODT getDefaultReferenceODT = liftIO . IO.getDefaultReferenceODT
newStdGen = liftIO IO.newStdGen newStdGen = liftIO IO.newStdGen
@ -236,6 +246,7 @@ getFileInfo fp tree = M.lookup fp $ unFileTree tree
data PureEnv = PureEnv { envEnv :: [(String, String)] data PureEnv = PureEnv { envEnv :: [(String, String)]
, envTime :: UTCTime , envTime :: UTCTime
, envTimeZone :: TimeZone
, envReferenceDocx :: Archive , envReferenceDocx :: Archive
, envReferenceODT :: Archive , envReferenceODT :: Archive
, envFiles :: FileTree , envFiles :: FileTree
@ -249,6 +260,7 @@ data PureEnv = PureEnv { envEnv :: [(String, String)]
instance Default PureEnv where instance Default PureEnv where
def = PureEnv { envEnv = [("USER", "pandoc-user")] def = PureEnv { envEnv = [("USER", "pandoc-user")]
, envTime = posixSecondsToUTCTime 0 , envTime = posixSecondsToUTCTime 0
, envTimeZone = utc
, envReferenceDocx = emptyArchive , envReferenceDocx = emptyArchive
, envReferenceODT = emptyArchive , envReferenceODT = emptyArchive
, envFiles = mempty , envFiles = mempty
@ -280,6 +292,8 @@ instance PandocMonad PandocPure where
getCurrentTime = asks envTime getCurrentTime = asks envTime
getCurrentTimeZone = asks envTimeZone
getDefaultReferenceDocx _ = asks envReferenceDocx getDefaultReferenceDocx _ = asks envReferenceDocx
getDefaultReferenceODT _ = asks envReferenceODT getDefaultReferenceODT _ = asks envReferenceODT