chatty 0.5.1.1 → 0.5.3.1
raw patch · 9 files changed
+54/−5 lines, 9 files
Files
- Text/Chatty/Channel/Broadcast.hs +1/−1
- Text/Chatty/Channel/Printer.hs +2/−0
- Text/Chatty/Extended/ANSI.hs +8/−0
- Text/Chatty/Extended/HTML.hs +6/−0
- Text/Chatty/Extended/Printer.hs +30/−1
- Text/Chatty/Interactor.hs +2/−2
- Text/Chatty/Interactor/Templates.hs +1/−0
- Text/Chatty/Printer.hs +3/−0
- chatty.cabal +1/−1
Text/Chatty/Channel/Broadcast.hs view
@@ -32,7 +32,7 @@ -- | Typeclass for all channel printers that may broadcast to all channels that fulfill a condition. class ChannelPrinter c m => Broadcaster c m where- -- | Print the string to all channels that fulfill the current condition.+ -- | Print the string to all channels that fulfill the current condition. bprint :: (c -> m Bool) -> String -> m () -- | Typeclass for all broadcaster that may embrace sections
Text/Chatty/Channel/Printer.hs view
@@ -116,6 +116,7 @@ instance (Eq c,MonadPrinter m) => MonadPrinter (FilterT c m) where mprint str = Filter $ \(c,c1:cx) -> if c == c1 then mprint str >> return ((),c1:cx) else return ((),c1:cx)+ mnomask str = Filter $ \(c,c1:cx) -> if c == c1 then mnomask str >> return ((),c1:cx) else return ((),c1:cx) instance (Eq c,MonadPrinter m) => ChannelPrinter c (FilterT c m) where cbracket c m = Filter $ \(cf,cx) -> do@@ -148,6 +149,7 @@ instance MonadPrinter m => MonadPrinter (JoinerT m) where mprint = lift . mprint+ mnomask = lift . mnomask instance (Eq c,MonadPrinter m) => ChannelPrinter c (JoinerT m) where cstart _ = return ()
Text/Chatty/Extended/ANSI.hs view
@@ -23,10 +23,12 @@ module Text.Chatty.Extended.ANSI where import qualified System.Console.ANSI as A+import Control.Monad import Control.Monad.Trans.Class import Control.Monad.IO.Class import Text.Chatty.Printer import Text.Chatty.Extended.Printer+import Text.Chatty.Expansion -- | An ExtendedPrinter that uses ANSI colour codes. newtype AnsiPrinterT m a = AnsiPrinter { runAnsiPrinterT :: [Colour] -> m (a,[Colour]) }@@ -48,6 +50,7 @@ mprint = lift . mprint mnoecho = lift . mnoecho mflush = lift mflush+ mnomask = lift . mnomask instance MonadPrinter m => ExtendedPrinter (AnsiPrinterT m) where estart c = AnsiPrinter $ \c1 -> do@@ -61,6 +64,11 @@ _ -> do mprint $ A.setSGRCode [A.Reset] return ((),[])++instance (Functor m,MonadExpand m) => MonadExpand (AnsiPrinterT m) where+ expand s = AnsiPrinter $ \cx -> do+ s1 <- (expand =<<) $ liftM (replay.snd) $ runRecorderT $ liftM fst $ flip runAnsiPrinterT cx $ expandClr s+ return (s1, cx) -- | Convert Chatty's colour intensity to ansi-terminal's one mkColourInt (Dull _) = A.Dull
Text/Chatty/Extended/HTML.hs view
@@ -23,7 +23,9 @@ module Text.Chatty.Extended.HTML where import Text.Chatty.Printer+import Text.Chatty.Expansion import Text.Chatty.Extended.Printer+import Control.Monad import Control.Monad.Trans.Class import Control.Monad.IO.Class @@ -47,10 +49,14 @@ mprint = lift . mprint . concatMap maskHtml mnoecho = lift . mnoecho . concatMap maskHtml mflush = lift mflush+ mnomask = lift . mnomask instance MonadPrinter m => ExtendedPrinter (HtmlPrinterT m) where estart c = lift $ mprint $ concat ["<span style=\"color: #", hexColour c, ";\">"] efin = lift $ mprint "</span>"++instance (Functor m,MonadExpand m) => MonadExpand (HtmlPrinterT m) where+ expand = lift . expand <=< liftM (replay.snd) . runRecorderT . runHtmlPrinterT . expandClr -- | Convert the given character to its HTML representation. maskHtml :: Char -> String
Text/Chatty/Extended/Printer.hs view
@@ -20,7 +20,7 @@ -} -- | Provides an extended printer class that supports colours.-module Text.Chatty.Extended.Printer where+module Text.Chatty.Extended.Printer (ExtendedPrinter(..),Tone(..),Colour(..),expandClr) where import Text.Chatty.Printer @@ -45,3 +45,32 @@ -- | Reset colour. efin :: m () ++takeBrace 0 ('}':ss) = ""+takeBrace n ('}':ss) = '}' : takeBrace (n-1) ss+takeBrace n ('{':ss) = '{' : takeBrace (n+1) ss+takeBrace n (s:ss) = s : takeBrace n ss++splitBrace ss = let nm = takeBrace 0 ss in (nm, drop (length nm + 1) ss)++procClr c ss = let (nm,rm) = splitBrace ss in ebracket c (expandClr nm) >> expandClr rm++expandClr :: ExtendedPrinter m => String -> m ()+expandClr ('%':'{':'V':'0':';':ss) = procClr (Vivid Black) ss+expandClr ('%':'{':'V':'1':';':ss) = procClr (Vivid Red) ss+expandClr ('%':'{':'V':'2':';':ss) = procClr (Vivid Green) ss+expandClr ('%':'{':'V':'3':';':ss) = procClr (Vivid Yellow) ss+expandClr ('%':'{':'V':'4':';':ss) = procClr (Vivid Blue) ss+expandClr ('%':'{':'V':'5':';':ss) = procClr (Vivid Magenta) ss+expandClr ('%':'{':'V':'6':';':ss) = procClr (Vivid Cyan) ss+expandClr ('%':'{':'V':'7':';':ss) = procClr (Vivid White) ss+expandClr ('%':'{':'D':'0':';':ss) = procClr (Dull Black) ss+expandClr ('%':'{':'D':'1':';':ss) = procClr (Dull Red) ss+expandClr ('%':'{':'D':'2':';':ss) = procClr (Dull Green) ss+expandClr ('%':'{':'D':'3':';':ss) = procClr (Dull Yellow) ss+expandClr ('%':'{':'D':'4':';':ss) = procClr (Dull Blue) ss+expandClr ('%':'{':'D':'5':';':ss) = procClr (Dull Magenta) ss+expandClr ('%':'{':'D':'6':';':ss) = procClr (Dull Cyan) ss+expandClr ('%':'{':'D':'7':';':ss) = procClr (Dull White) ss+expandClr (s:ss) = mprint [s] >> expandClr ss+expandClr [] = return ()
Text/Chatty/Interactor.hs view
@@ -51,8 +51,8 @@ mkInteractor ''QuietT mkPrinter mkExtendedPrinter mkExpander mkExpanderEnv mkHistoryEnv mkSpawn mkRandom mkClock mkDefCP mkInteractor ''InRedirT mkPrinter mkExtendedPrinter mkExpander mkExpanderEnv mkHistoryEnv mkSpawn mkRandom mkClock mkDefCP mkInteractor ''SpawnOverlayT mkPrinter mkExtendedPrinter mkScanner mkExpander mkExpanderEnv mkHistoryEnv mkFinalizer mkRandom mkClock mkDefCP-mkInteractor ''HtmlPrinterT mkScanner mkExpander mkExpanderEnv mkHistoryEnv mkFinalizer mkSpawn mkRandom mkClock mkDefCP-mkInteractor ''AnsiPrinterT mkScanner mkExpander mkExpanderEnv mkHistoryEnv mkFinalizer mkSpawn mkRandom mkClock mkDefCP+mkInteractor ''HtmlPrinterT mkScanner mkExpanderEnv mkHistoryEnv mkFinalizer mkSpawn mkRandom mkClock mkDefCP+mkInteractor ''AnsiPrinterT mkScanner mkExpanderEnv mkHistoryEnv mkFinalizer mkSpawn mkRandom mkClock mkDefCP mkInteractor ''NullExpanderT mkScanner mkPrinter mkExtendedPrinter mkFinalizer mkSpawn mkRandom mkClock mkDefCP mkInteractor ''HistoryT mkScanner mkPrinter mkExtendedPrinter mkFinalizer mkSpawn mkRandom mkClock mkExpanderEnv mkDefCP mkInteractor ''IntArchiverT mkArchiver
Text/Chatty/Interactor/Templates.hs view
@@ -60,6 +60,7 @@ mprint = lift . mprint mnoecho = lift . mnoecho mflush = lift mflush+ mnomask = lift . mnomask |] where sx = strToType s
Text/Chatty/Printer.hs view
@@ -40,6 +40,9 @@ -- | Flush the buffer. mflush :: m () mflush = return ()+ -- | Alternative to mprint that does not mask any characters (depends on the carrier).+ mnomask :: String -> m ()+ mnomask = mprint instance MonadPrinter IO where mprint = putStr
chatty.cabal view
@@ -10,7 +10,7 @@ -- PVP summary: +-+------- breaking API changes -- | | +----- non-breaking API additions -- | | | +--- code changes with no API change-version: 0.5.1.1+version: 0.5.3.1 -- A short (one-line) description of the package. synopsis: Some monad transformers and typeclasses to simplify I/O on a transformer stack.