wl-pprint-terminfo 0.1.1 → 0.2.0
raw patch · 2 files changed
+55/−44 lines, 2 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
- System.Console.Terminfo.PrettyPrint: data PushCommand
- System.Console.Terminfo.PrettyPrint: instance Eq Command
- System.Console.Terminfo.PrettyPrint: instance Eq PushCommand
+ System.Console.Terminfo.PrettyPrint: Pop :: Effect
+ System.Console.Terminfo.PrettyPrint: Push :: ScopedEffect -> Effect
+ System.Console.Terminfo.PrettyPrint: Ring :: Bell -> Effect
+ System.Console.Terminfo.PrettyPrint: data Effect
+ System.Console.Terminfo.PrettyPrint: data ScopedEffect
+ System.Console.Terminfo.PrettyPrint: displayDoc' :: Terminal -> Float -> TermDoc -> IO ()
+ System.Console.Terminfo.PrettyPrint: displayDoc'' :: Terminal -> Float -> Int -> TermDoc -> IO ()
+ System.Console.Terminfo.PrettyPrint: instance Eq Effect
+ System.Console.Terminfo.PrettyPrint: instance Eq ScopedEffect
+ System.Console.Terminfo.PrettyPrint: type SimpleTermDoc = SimpleDoc Effect
+ System.Console.Terminfo.PrettyPrint: type TermDoc = Doc Effect
- System.Console.Terminfo.PrettyPrint: Background :: Colour -> PushCommand
+ System.Console.Terminfo.PrettyPrint: Background :: Colour -> ScopedEffect
- System.Console.Terminfo.PrettyPrint: Blink :: PushCommand
+ System.Console.Terminfo.PrettyPrint: Blink :: ScopedEffect
- System.Console.Terminfo.PrettyPrint: Bold :: PushCommand
+ System.Console.Terminfo.PrettyPrint: Bold :: ScopedEffect
- System.Console.Terminfo.PrettyPrint: Dim :: PushCommand
+ System.Console.Terminfo.PrettyPrint: Dim :: ScopedEffect
- System.Console.Terminfo.PrettyPrint: Else :: PushCommand -> PushCommand -> PushCommand
+ System.Console.Terminfo.PrettyPrint: Else :: ScopedEffect -> ScopedEffect -> ScopedEffect
- System.Console.Terminfo.PrettyPrint: Foreground :: Colour -> PushCommand
+ System.Console.Terminfo.PrettyPrint: Foreground :: Colour -> ScopedEffect
- System.Console.Terminfo.PrettyPrint: Invisible :: PushCommand
+ System.Console.Terminfo.PrettyPrint: Invisible :: ScopedEffect
- System.Console.Terminfo.PrettyPrint: Nop :: PushCommand
+ System.Console.Terminfo.PrettyPrint: Nop :: ScopedEffect
- System.Console.Terminfo.PrettyPrint: Protected :: PushCommand
+ System.Console.Terminfo.PrettyPrint: Protected :: ScopedEffect
- System.Console.Terminfo.PrettyPrint: Reverse :: PushCommand
+ System.Console.Terminfo.PrettyPrint: Reverse :: ScopedEffect
- System.Console.Terminfo.PrettyPrint: Standout :: PushCommand
+ System.Console.Terminfo.PrettyPrint: Standout :: ScopedEffect
- System.Console.Terminfo.PrettyPrint: Underline :: PushCommand
+ System.Console.Terminfo.PrettyPrint: Underline :: ScopedEffect
- System.Console.Terminfo.PrettyPrint: background :: Color -> Doc Command -> Doc Command
+ System.Console.Terminfo.PrettyPrint: background :: Color -> TermDoc -> TermDoc
- System.Console.Terminfo.PrettyPrint: black :: Doc Command -> Doc Command
+ System.Console.Terminfo.PrettyPrint: black :: TermDoc -> TermDoc
- System.Console.Terminfo.PrettyPrint: blink :: Doc Command -> Doc Command
+ System.Console.Terminfo.PrettyPrint: blink :: TermDoc -> TermDoc
- System.Console.Terminfo.PrettyPrint: blue :: Doc Command -> Doc Command
+ System.Console.Terminfo.PrettyPrint: blue :: TermDoc -> TermDoc
- System.Console.Terminfo.PrettyPrint: bold :: Doc Command -> Doc Command
+ System.Console.Terminfo.PrettyPrint: bold :: TermDoc -> TermDoc
- System.Console.Terminfo.PrettyPrint: cyan :: Doc Command -> Doc Command
+ System.Console.Terminfo.PrettyPrint: cyan :: TermDoc -> TermDoc
- System.Console.Terminfo.PrettyPrint: dim :: Doc Command -> Doc Command
+ System.Console.Terminfo.PrettyPrint: dim :: TermDoc -> TermDoc
- System.Console.Terminfo.PrettyPrint: displayCap :: SimpleDoc Command -> StateT TermState Capability TermOutput
+ System.Console.Terminfo.PrettyPrint: displayCap :: SimpleTermDoc -> StateT TermState Capability TermOutput
- System.Console.Terminfo.PrettyPrint: displayDoc :: Float -> Doc Command -> IO ()
+ System.Console.Terminfo.PrettyPrint: displayDoc :: Float -> TermDoc -> IO ()
- System.Console.Terminfo.PrettyPrint: foreground :: Color -> Doc Command -> Doc Command
+ System.Console.Terminfo.PrettyPrint: foreground :: Color -> TermDoc -> TermDoc
- System.Console.Terminfo.PrettyPrint: green :: Doc Command -> Doc Command
+ System.Console.Terminfo.PrettyPrint: green :: TermDoc -> TermDoc
- System.Console.Terminfo.PrettyPrint: invisible :: Doc Command -> Doc Command
+ System.Console.Terminfo.PrettyPrint: invisible :: TermDoc -> TermDoc
- System.Console.Terminfo.PrettyPrint: magenta :: Doc Command -> Doc Command
+ System.Console.Terminfo.PrettyPrint: magenta :: TermDoc -> TermDoc
- System.Console.Terminfo.PrettyPrint: protected :: Doc Command -> Doc Command
+ System.Console.Terminfo.PrettyPrint: protected :: TermDoc -> TermDoc
- System.Console.Terminfo.PrettyPrint: red :: Doc Command -> Doc Command
+ System.Console.Terminfo.PrettyPrint: red :: TermDoc -> TermDoc
- System.Console.Terminfo.PrettyPrint: reversed :: Doc Command -> Doc Command
+ System.Console.Terminfo.PrettyPrint: reversed :: TermDoc -> TermDoc
- System.Console.Terminfo.PrettyPrint: ring :: Bell -> Doc Command
+ System.Console.Terminfo.PrettyPrint: ring :: Bell -> TermDoc
- System.Console.Terminfo.PrettyPrint: soft :: PushCommand -> PushCommand
+ System.Console.Terminfo.PrettyPrint: soft :: ScopedEffect -> ScopedEffect
- System.Console.Terminfo.PrettyPrint: standout :: Doc Command -> Doc Command
+ System.Console.Terminfo.PrettyPrint: standout :: TermDoc -> TermDoc
- System.Console.Terminfo.PrettyPrint: underline :: Doc Command -> Doc Command
+ System.Console.Terminfo.PrettyPrint: underline :: TermDoc -> TermDoc
- System.Console.Terminfo.PrettyPrint: white :: Doc Command -> Doc Command
+ System.Console.Terminfo.PrettyPrint: white :: TermDoc -> TermDoc
- System.Console.Terminfo.PrettyPrint: with :: PushCommand -> Doc Command -> Doc Command
+ System.Console.Terminfo.PrettyPrint: with :: ScopedEffect -> TermDoc -> TermDoc
- System.Console.Terminfo.PrettyPrint: yellow :: Doc Command -> Doc Command
+ System.Console.Terminfo.PrettyPrint: yellow :: TermDoc -> TermDoc
Files
System/Console/Terminfo/PrettyPrint.hs view
@@ -1,14 +1,21 @@ module System.Console.Terminfo.PrettyPrint- ( PushCommand(..)+ ( + -- * Raw Effect (requires the effect be present)+ ScopedEffect(..) , with- , blink- , bold- , underline- , standout- , reversed- , protected- , invisible- , dim+ , Effect(..) -- unpaired effects+ -- ** graceful feature degradation+ , soft+ -- ** Effects (built with soft)+ , blink -- with (soft Blink)+ , bold -- with (soft Bold)+ , underline -- with (soft Underline)+ , standout -- with (soft Standout)+ , reversed -- with (soft Reversed)+ , protected -- with (soft Protected)+ , invisible -- with (soft Invisible)+ , dim -- with (soft Dim)+ -- ** Colors (built with soft) , red , black , green@@ -17,14 +24,18 @@ , magenta , cyan , white- -- * Color Pretty Printer- , displayDoc- - , soft , foreground , background+ -- ** Ringing bells , Bell(..) , ring+ -- * A Color Pretty Printer+ , TermDoc+ , displayDoc+ , displayDoc'+ , displayDoc''+ -- * + , SimpleTermDoc , evalTermState , displayCap ) where@@ -40,7 +51,7 @@ import Control.Monad.Trans.State import UI.HSCurses.Curses (initScr, scrSize, endWin) import Control.Monad.Trans.Class-import Control.Exception (finally, throwIO, AssertionFailed(..))+import Control.Exception (finally) import System.IO (stdout) newtype Colour = Colour { color :: Color }@@ -58,7 +69,7 @@ _ == _ = False -data PushCommand+data ScopedEffect = Bold | Standout | Underline@@ -69,7 +80,7 @@ | Protected | Foreground Colour | Background Colour- | Else PushCommand PushCommand+ | Else ScopedEffect ScopedEffect | Nop deriving (Eq) @@ -80,18 +91,18 @@ | AudibleBellPreferred deriving (Eq,Ord,Show,Enum) -data Command - = Push PushCommand+data Effect + = Push ScopedEffect | Pop | Ring Bell -- visual bell ok, audible bell ok, deriving (Eq) -type TermState = [PushCommand]+type TermState = [ScopedEffect] -ring :: Bell -> Doc Command+ring :: Bell -> TermDoc ring b = pure (Ring b) -eval :: Command -> StateT TermState Capability TermOutput+eval :: Effect -> StateT TermState Capability TermOutput eval (Push Blink) = modify (Blink:) *> lift blinkOn eval (Push Reverse) = modify (Reverse:) *> lift reverseOn eval (Push Protected) = modify (Protected:) *> lift protectedOn@@ -132,21 +143,24 @@ put s return $ l <#> r +type TermDoc = Doc Effect+type SimpleTermDoc = SimpleDoc Effect+ tryTerm :: MonadPlus m => m TermOutput -> m TermOutput tryTerm m = m `mplus` return mempty -with :: PushCommand -> Doc Command -> Doc Command+with :: ScopedEffect -> TermDoc -> TermDoc with cmd = pure (Push cmd) `enclose` pure Pop -soft :: PushCommand -> PushCommand+soft :: ScopedEffect -> ScopedEffect soft l = Else l Nop -foreground, background :: Color -> Doc Command -> Doc Command+foreground, background :: Color -> TermDoc -> TermDoc foreground n = with (soft (Foreground (Colour n))) background n = with (soft (Background (Colour n))) -red, black, green, yellow, blue, cyan, white, blink, bold, underline, - standout, reversed, protected, invisible, dim :: Doc Command -> Doc Command+red, black, green, yellow, blue, magenta, cyan, white, blink, bold, underline, + standout, reversed, protected, invisible, dim :: TermDoc -> TermDoc blink = with (soft Blink) bold = with (soft Bold)@@ -166,7 +180,7 @@ cyan = foreground Cyan white = foreground White -displayCap :: SimpleDoc Command -> StateT TermState Capability TermOutput+displayCap :: SimpleTermDoc -> StateT TermState Capability TermOutput displayCap = go where go SEmpty = return mempty go (SChar c x) = (termText [c] <#>) <$> go x@@ -187,23 +201,20 @@ snd <$> scrSize `finally` endWin -displayDoc :: Float -> Doc Command -> IO ()+displayDoc :: Float -> TermDoc -> IO () displayDoc ribbon doc = do- term <- setupTermFromEnv- displayDoc' term ribbon doc+ term <- setupTermFromEnv+ displayDoc' term ribbon doc -displayDoc' :: Terminal -> Float -> Doc Command -> IO ()+displayDoc' :: Terminal -> Float -> TermDoc -> IO () displayDoc' term ribbon doc = do- cols <- kludgeWindowSize `mplus` - return (maybe 80 id (getCapability term termColumns))- displayDoc'' term ribbon cols doc+ cols <- kludgeWindowSize `mplus` + return (maybe 80 id (getCapability term termColumns))+ displayDoc'' term ribbon cols doc -displayDoc'' :: Terminal -> Float -> Int -> Doc Command -> IO ()-displayDoc'' term ribbon cols doc = colored term sdoc - `mplus` displayIO stdout sdoc- where - sdoc = renderPretty ribbon cols doc- colored term sdoc = case getCapability term $ evalTermState $ displayCap sdoc of- Just output -> runTermOutput term output- Nothing -> throwIO $ AssertionFailed "missing capability" -- TODO: downgrade- +displayDoc'' :: Terminal -> Float -> Int -> TermDoc -> IO ()+displayDoc'' term ribbon cols doc = + case getCapability term $ evalTermState $ displayCap sdoc of+ Just output -> runTermOutput term output+ Nothing -> displayIO stdout sdoc+ where sdoc = renderPretty ribbon cols doc
wl-pprint-terminfo.cabal view
@@ -1,6 +1,6 @@ name: wl-pprint-terminfo category: Control, Monads, Text-version: 0.1.1+version: 0.2.0 cabal-version: >= 1.6 license: BSD3 license-file: LICENSE