| Safe Haskell | Safe-Inferred |
|---|---|
| Language | Haskell2010 |
Prettyprinter.Render.Terminal
Description
Render SimpleDocStream in a terminal.
Synopsis
- data AnsiStyle
- data Color
- color :: Color -> AnsiStyle
- colorDull :: Color -> AnsiStyle
- bgColor :: Color -> AnsiStyle
- bgColorDull :: Color -> AnsiStyle
- bold :: AnsiStyle
- italicized :: AnsiStyle
- underlined :: AnsiStyle
- data Intensity
- data Bold = Bold
- data Underlined = Underlined
- data Italicized = Italicized
- renderLazy :: SimpleDocStream AnsiStyle -> Text
- renderStrict :: SimpleDocStream AnsiStyle -> Text
- renderIO :: Handle -> SimpleDocStream AnsiStyle -> IO ()
- putDoc :: Doc AnsiStyle -> IO ()
- hPutDoc :: Handle -> Doc AnsiStyle -> IO ()
Styling
Render the annotated document in a certain style. Styles not set in the annotation will use the style of the surrounding document, or the terminal’s default if none has been set yet.
style =colorGreen<>boldstyledDoc =annotatestyle "hello world"
Instances
| Eq AnsiStyle Source # | |
| Ord AnsiStyle Source # | |
Defined in Prettyprinter.Render.Terminal.Internal | |
| Show AnsiStyle Source # | |
| Semigroup AnsiStyle Source # | Keep the first decision for each of foreground color, background color, boldness, italication, and underlining. If a certain style is not set, the terminal’s default will be used. Example:
is red because the first color wins, and not bold because (or if) that’s the terminal’s default. |
| Monoid AnsiStyle Source # |
|
Font color
Background color
bgColorDull :: Color -> AnsiStyle Source #
Style the background with a dull color.
Font style
italicized :: AnsiStyle Source #
Render in italics.
underlined :: AnsiStyle Source #
Render underlined.
Internal markers
These should only be used for writing adaptors to other libraries; for
the average use case, use bold, bgColorDull, etc.
Dull or vivid coloring, as supported by ANSI terminals.
Instances
| Eq Intensity Source # | |
| Ord Intensity Source # | |
Defined in Prettyprinter.Render.Terminal.Internal | |
| Show Intensity Source # | |
data Underlined Source #
Constructors
| Underlined |
Instances
| Eq Underlined Source # | |
Defined in Prettyprinter.Render.Terminal.Internal | |
| Ord Underlined Source # | |
Defined in Prettyprinter.Render.Terminal.Internal Methods compare :: Underlined -> Underlined -> Ordering # (<) :: Underlined -> Underlined -> Bool # (<=) :: Underlined -> Underlined -> Bool # (>) :: Underlined -> Underlined -> Bool # (>=) :: Underlined -> Underlined -> Bool # max :: Underlined -> Underlined -> Underlined # min :: Underlined -> Underlined -> Underlined # | |
| Show Underlined Source # | |
Defined in Prettyprinter.Render.Terminal.Internal Methods showsPrec :: Int -> Underlined -> ShowS # show :: Underlined -> String # showList :: [Underlined] -> ShowS # | |
data Italicized Source #
Constructors
| Italicized |
Instances
| Eq Italicized Source # | |
Defined in Prettyprinter.Render.Terminal.Internal | |
| Ord Italicized Source # | |
Defined in Prettyprinter.Render.Terminal.Internal Methods compare :: Italicized -> Italicized -> Ordering # (<) :: Italicized -> Italicized -> Bool # (<=) :: Italicized -> Italicized -> Bool # (>) :: Italicized -> Italicized -> Bool # (>=) :: Italicized -> Italicized -> Bool # max :: Italicized -> Italicized -> Italicized # min :: Italicized -> Italicized -> Italicized # | |
| Show Italicized Source # | |
Defined in Prettyprinter.Render.Terminal.Internal Methods showsPrec :: Int -> Italicized -> ShowS # show :: Italicized -> String # showList :: [Italicized] -> ShowS # | |
Conversion to ANSI-infused Text
renderLazy :: SimpleDocStream AnsiStyle -> Text Source #
( takes the output renderLazy doc)doc from a rendering function
and transforms it to lazy text, including ANSI styling directives for things
like colorization.
ANSI color information will be discarded by this function unless you are running on a Unix-like operating system. This is due to a technical limitation in Windows ANSI support.
With a bit of trickery to make the ANSI codes printable, here is an example that would render colored in an ANSI terminal:
>>>let render = TL.putStrLn . TL.replace "\ESC" "\\e" . renderLazy . layoutPretty defaultLayoutOptions>>>let doc = annotate (color Red) ("red" <+> align (vsep [annotate (color Blue <> underlined) ("blue+u" <+> annotate bold "bold" <+> "blue+u"), "red"]))>>>render (unAnnotate doc)red blue+u bold blue+u red>>>render doc\e[0;91mred \e[0;94;4mblue+u \e[0;94;1;4mbold\e[0;94;4m blue+u\e[0;91m red\e[0m
Run the above via echo -e in your terminal to see the coloring....
renderStrict :: SimpleDocStream AnsiStyle -> Text Source #
( takes the output renderStrict sdoc)sdoc from a rendering and
transforms it to strict text.
Render directly to stdout
renderIO :: Handle -> SimpleDocStream AnsiStyle -> IO () Source #
( writes renderIO h sdoc)sdoc to the handle h.
>>>let render = renderIO System.IO.stdout . layoutPretty defaultLayoutOptions>>>let doc = annotate (color Red) ("red" <+> align (vsep [annotate (color Blue <> underlined) ("blue+u" <+> annotate bold "bold" <+> "blue+u"), "red"]))
We render the unAnnotated version here, since the ANSI codes don’t display
well in Haddock,
>>>render (unAnnotate doc)red blue+u bold blue+u red
This function behaves just like
renderIOh sdoc =hPutStrh (renderLazysdoc)
but will not generate any intermediate text, rendering directly to the handle.
Convenience functions
putDoc :: Doc AnsiStyle -> IO () Source #
( prettyprints document putDoc doc)doc to standard output using
defaultLayoutOptions.
>>>putDoc ("hello" <+> "world")hello world
putDoc=hPutDocstdout
hPutDoc :: Handle -> Doc AnsiStyle -> IO () Source #
Like putDoc, but instead of using stdout, print to a user-provided
handle, e.g. a file or a socket using defaultLayoutOptions.
main = withFile "someFile.txt" (\h -> hPutDoc h (vcat ["vertical", "text"]))
hPutDoch doc =renderIOh (layoutPrettydefaultLayoutOptionsdoc)