module BearLibTerminal.Terminal.Print
( textColor
, textBkColor
, terminalPrint
, terminalPrint_
, terminalPrintExt
, terminalPrintExt_
) where
import BearLibTerminal.Raw
import Control.Monad.IO.Class
import Data.Text (Text)
import BearLibTerminal.Terminal.CString
import Data.String (IsString)
import Control.Monad (void)
textColor ::
IsString a
=> Semigroup a
=> a
-> a
-> a
textColor :: forall a. (IsString a, Semigroup a) => a -> a -> a
textColor a
col = a -> a -> a -> a
forall a. Semigroup a => a -> a -> a -> a
surround (a
"[color="a -> a -> a
forall a. Semigroup a => a -> a -> a
<>a
cola -> a -> a
forall a. Semigroup a => a -> a -> a
<>a
"]") a
"[/color]"
textBkColor ::
IsString a
=> Semigroup a
=> a
-> a
-> a
textBkColor :: forall a. (IsString a, Semigroup a) => a -> a -> a
textBkColor a
col = a -> a -> a -> a
forall a. Semigroup a => a -> a -> a -> a
surround (a
"[bkcolor="a -> a -> a
forall a. Semigroup a => a -> a -> a
<>a
cola -> a -> a
forall a. Semigroup a => a -> a -> a
<>a
"]") a
"[/bkcolor]"
terminalPrint ::
MonadIO m
=> Int
-> Int
-> Text
-> m Dimensions
terminalPrint :: forall (m :: * -> *).
MonadIO m =>
Int -> Int -> Text -> m Dimensions
terminalPrint Int
x Int
y = (CString -> IO Dimensions) -> Text -> m Dimensions
forall (m :: * -> *) a.
MonadIO m =>
(CString -> IO a) -> Text -> m a
textToCString (Int -> Int -> CString -> IO Dimensions
forall (m :: * -> *).
MonadIO m =>
Int -> Int -> CString -> m Dimensions
terminalPrintCString Int
x Int
y)
terminalPrintExt ::
MonadIO m
=> Int
-> Int
-> Int
-> Int
-> Maybe PrintAlignment
-> Text
-> m Dimensions
terminalPrintExt :: forall (m :: * -> *).
MonadIO m =>
Int
-> Int
-> Int
-> Int
-> Maybe PrintAlignment
-> Text
-> m Dimensions
terminalPrintExt Int
x Int
y Int
w Int
h Maybe PrintAlignment
align = (CString -> IO Dimensions) -> Text -> m Dimensions
forall (m :: * -> *) a.
MonadIO m =>
(CString -> IO a) -> Text -> m a
textToCString (Int
-> Int
-> Int
-> Int
-> Maybe PrintAlignment
-> CString
-> IO Dimensions
forall (m :: * -> *).
MonadIO m =>
Int
-> Int
-> Int
-> Int
-> Maybe PrintAlignment
-> CString
-> m Dimensions
terminalPrintExtCString Int
x Int
y Int
w Int
h Maybe PrintAlignment
align)
terminalPrint_ ::
MonadIO m
=> Int
-> Int
-> Text
-> m ()
terminalPrint_ :: forall (m :: * -> *). MonadIO m => Int -> Int -> Text -> m ()
terminalPrint_ Int
x Int
y Text
t = m Dimensions -> m ()
forall (f :: * -> *) a. Functor f => f a -> f ()
void (m Dimensions -> m ()) -> m Dimensions -> m ()
forall a b. (a -> b) -> a -> b
$ Int -> Int -> Text -> m Dimensions
forall (m :: * -> *).
MonadIO m =>
Int -> Int -> Text -> m Dimensions
terminalPrint Int
x Int
y Text
t
terminalPrintExt_ ::
MonadIO m
=> Int
-> Int
-> Int
-> Int
-> Maybe PrintAlignment
-> Text
-> m ()
terminalPrintExt_ :: forall (m :: * -> *).
MonadIO m =>
Int -> Int -> Int -> Int -> Maybe PrintAlignment -> Text -> m ()
terminalPrintExt_ Int
x Int
y Int
w Int
h Maybe PrintAlignment
align Text
t = m Dimensions -> m ()
forall (f :: * -> *) a. Functor f => f a -> f ()
void (m Dimensions -> m ()) -> m Dimensions -> m ()
forall a b. (a -> b) -> a -> b
$ Int
-> Int
-> Int
-> Int
-> Maybe PrintAlignment
-> Text
-> m Dimensions
forall (m :: * -> *).
MonadIO m =>
Int
-> Int
-> Int
-> Int
-> Maybe PrintAlignment
-> Text
-> m Dimensions
terminalPrintExt Int
x Int
y Int
w Int
h Maybe PrintAlignment
align Text
t