mirror of
https://github.com/simplex-chat/simplex-chat.git
synced 2026-03-31 09:46:03 +00:00
* add terminal package * basic terminal mode with utf8 support in windows * fix terminal input in basic mode on mac * test code * send StyledString to ChatTerminal * clean up * support StyledString with System.Terminal * minor style change * clean up * minor style change
30 lines
969 B
Haskell
30 lines
969 B
Haskell
module Styled (StyledString (..), plain, bPlain, styledToANSITerm, styledToPlain) where
|
|
|
|
import Data.ByteString.Char8 (ByteString)
|
|
import qualified Data.ByteString.Char8 as B
|
|
import Data.String
|
|
import System.Console.ANSI (SGR (..), setSGRCode)
|
|
|
|
data StyledString = Styled [SGR] String | StyledString :<>: StyledString
|
|
|
|
instance Semigroup StyledString where (<>) = (:<>:)
|
|
|
|
instance Monoid StyledString where mempty = plain ""
|
|
|
|
instance IsString StyledString where fromString = plain
|
|
|
|
plain :: String -> StyledString
|
|
plain = Styled []
|
|
|
|
bPlain :: ByteString -> StyledString
|
|
bPlain = Styled [] . B.unpack
|
|
|
|
styledToANSITerm :: StyledString -> String
|
|
styledToANSITerm (Styled [] s) = s
|
|
styledToANSITerm (Styled sgr s) = setSGRCode sgr <> s <> setSGRCode [Reset]
|
|
styledToANSITerm (s1 :<>: s2) = styledToANSITerm s1 <> styledToANSITerm s2
|
|
|
|
styledToPlain :: StyledString -> String
|
|
styledToPlain (Styled _ s) = s
|
|
styledToPlain (s1 :<>: s2) = styledToPlain s1 <> styledToPlain s2
|