packages feed

wl-pprint-ansiterm 0.1.0.1 → 0.2.0.0

raw patch · 2 files changed

+61/−44 lines, 2 filesPVP ok

version bump matches the API change (PVP)

API changes (from Hackage documentation)

- System.Console.ANSI.PrettyPrint: displayCap :: SimpleTermDoc -> State TermState String
+ System.Console.ANSI.PrettyPrint: displayDoc :: (MonadIO m, PrettyTerm t) => Float -> t -> m ()
+ System.Console.ANSI.PrettyPrint: displayDoc' :: (MonadIO m, PrettyTerm t) => Handle -> Float -> t -> m ()
+ System.Console.ANSI.PrettyPrint: displayDoc'' :: (MonadIO m, PrettyTerm t) => Handle -> Float -> Int -> t -> m ()
+ System.Console.ANSI.PrettyPrint: displayLn :: (MonadIO m, PrettyTerm t) => t -> m ()
+ System.Console.ANSI.PrettyPrint: displaySimpleTermDoc :: MonadIO m => SimpleTermDoc -> m ()
+ System.Console.ANSI.PrettyPrint: hDisplaySimpleTermDoc :: MonadIO m => Handle -> SimpleTermDoc -> m ()
- System.Console.ANSI.PrettyPrint: display :: (MonadIO m, PrettyTerm t) => Float -> Int -> t -> m ()
+ System.Console.ANSI.PrettyPrint: display :: (MonadIO m, PrettyTerm t) => t -> m ()

Files

src/System/Console/ANSI/PrettyPrint.hs view
@@ -36,25 +36,28 @@   -- * A Color Pretty Printer   , TermDoc   , display---  , displayLn+  , displayLn   -- ** Progressively less magical formatting---  , displayDoc---  , displayDoc'---  , displayDoc''+  , displayDoc+  , displayDoc'+  , displayDoc''+  , displaySimpleTermDoc+  , hDisplaySimpleTermDoc   -- ** A Classy Interface   , PrettyTerm(..)   -- ** Evaluation   , SimpleTermDoc --  , evalTermState-  , displayCap+--  , displayCap   ) where  import Control.Applicative-import Control.Monad.State-import Data.Traversable+import Control.Monad.IO.Class import Data.Foldable (toList) import Text.PrettyPrint.Free import qualified System.Console.ANSI as ANSI+import System.IO+ import qualified Data.ByteString as B import qualified Data.ByteString.Lazy as BL import qualified Data.Text as T@@ -95,31 +98,10 @@   | Ring Bell -- visual bell ok, audible bell ok,   deriving (Eq) -type TermState = [ScopedEffect]  --ring :: Bell -> TermDoc --ring b = pure (Ring b) -eval :: Effect -> State TermState String-eval (Push Blink)          = modify (Blink:) *> pure (ANSI.setSGRCode [ANSI.SetBlinkSpeed ANSI.SlowBlink])-eval (Push Reverse)        = modify (Reverse:) *> pure (ANSI.setSGRCode [ANSI.SetSwapForegroundBackground True])-eval (Push Protected)      = modify (Protected:) *> pure ""-eval (Push Bold)           = modify (Bold:) *> pure (ANSI.setSGRCode [ANSI.SetConsoleIntensity ANSI.BoldIntensity])-eval (Push (Foreground n)) = modify (Foreground n:) *> pure (ANSI.setSGRCode [ANSI.SetColor ANSI.Foreground ANSI.Dull n])-eval (Push (Background n)) = modify (Background n:) *> pure (ANSI.setSGRCode [ANSI.SetColor ANSI.Background ANSI.Dull n])-eval (Push Invisible)      = modify (Invisible:) *> pure (ANSI.setSGRCode [ANSI.SetVisible False])-eval (Push Dim)            = modify (Dim:) *> pure ""-eval (Push Underline)      = modify (Underline:) *> pure (ANSI.setSGRCode [ANSI.SetUnderlining ANSI.SingleUnderline])-eval (Push Standout)       = modify (Standout:) *> pure ""-eval (Push Nop)            = modify (Nop:) *> pure ""-eval (Push (Else l r))     = do { x <- eval (Push l); if null x then eval (Push r) else pure x }-eval (Ring _)              = pure ""-eval Pop = do-  ts <- get-  let ts' = drop 1 ts-  r <- concat <$> traverse  (eval . Push) (reverse ts')-  put ts'-  pure $ ANSI.setSGRCode [ANSI.Reset] ++ r   type TermDoc = Doc Effect@@ -156,26 +138,61 @@ cyan = foreground ANSI.Cyan white = foreground ANSI.White -displayCap :: SimpleTermDoc -> State TermState String-displayCap = go where-  go (SChar c x)   = ([c] ++) <$> go x-  go (SText _ s x) = (s ++) <$> go x-  go (SLine i x)   = (('\n': spaces i) ++) <$> go x-  go (SEffect e t) = (++) <$> eval e <*> go t-  go _            = return "" -spaces :: Int -> String-spaces n | n <= 0    = ""-         | otherwise = replicate n ' '-- -- kludgeWindowSize :: IO Int -- kludgeWindowSize = fail "missing ncurses" +displayLn :: (MonadIO m, PrettyTerm t) => t -> m ()+displayLn t = displayDoc 0.6 (prettyTerm t <> linebreak) -display :: (MonadIO m, PrettyTerm t) => Float -> Int -> t -> m ()-display ribbon cols doc = liftIO $ putStr $ fst $ flip runState [] $ displayCap sdoc-  where sdoc = renderPretty ribbon cols (prettyTerm doc)+display :: (MonadIO m, PrettyTerm t) => t -> m ()+display = displayDoc 0.6++displayDoc :: (MonadIO m, PrettyTerm t) => Float -> t -> m ()+displayDoc = displayDoc' stdout++displayDoc' :: (MonadIO m, PrettyTerm t) => Handle -> Float -> t -> m ()+displayDoc' h ribbon doc = displayDoc'' h ribbon 80 doc++displayDoc'' :: (MonadIO m, PrettyTerm t) => Handle -> Float -> Int -> t -> m ()+displayDoc'' h ribbon cols doc = hDisplaySimpleTermDoc h $ renderPretty ribbon cols (prettyTerm doc)++displaySimpleTermDoc :: MonadIO m => SimpleTermDoc -> m ()+displaySimpleTermDoc = hDisplaySimpleTermDoc stdout++hDisplaySimpleTermDoc :: MonadIO m => Handle -> SimpleTermDoc -> m ()+hDisplaySimpleTermDoc h = liftIO . go [] where+  spaces :: Int -> String+  spaces n | n <= 0    = ""+          | otherwise = replicate n ' '++  go :: [ANSI.SGR] -> SimpleTermDoc -> IO ()+  go st (SChar c x) = hPutChar h c >> go st x+  go st (SText _ s x) = hPutStr h s >> go st x+  go st (SLine i x) = hPutStr h ('\n':spaces i) >> go st x+  go st (SEffect Pop x) = do+    let st' = drop 1 st+    ANSI.hSetSGR h $ [ANSI.Reset] ++ reverse st'+    go st' x+  go st (SEffect (Ring _) x) = go st x+  go st (SEffect (Push e) x) = maybe (go st x) (\sgr -> ANSI.hSetSGR h [sgr] >> go (sgr:st) x) $ effToSGR e+  go _ _ = pure ()++  effToSGR :: ScopedEffect -> Maybe ANSI.SGR+  effToSGR e =+    case e of+     Blink -> Just $ ANSI.SetBlinkSpeed ANSI.SlowBlink+     Reverse -> Just $ ANSI.SetSwapForegroundBackground True+     Protected -> Nothing+     Bold -> Just $ ANSI.SetConsoleIntensity ANSI.BoldIntensity+     Foreground n -> Just $ ANSI.SetColor ANSI.Foreground ANSI.Dull n+     Background n -> Just $ ANSI.SetColor ANSI.Background ANSI.Dull n+     Invisible -> Just $ ANSI.SetVisible False+     Dim -> Nothing+     Underline -> Just $ ANSI.SetUnderlining ANSI.SingleUnderline+     Standout -> Nothing+     Nop -> Nothing+     Else l r -> effToSGR l <|> effToSGR r   
wl-pprint-ansiterm.cabal view
@@ -1,5 +1,5 @@ name:                wl-pprint-ansiterm-version:             0.1.0.1+version:             0.2.0.0 synopsis:            ANSI Terminal support with wl-pprint-extras description:         ANSI Terminal support with wl-pprint-extras license:             BSD3