pretty-simple-3.2.3.0: pretty printer for data types with a 'Show' instance.

Copyright(c) Dennis Gosnell 2016
LicenseBSD-style (see LICENSE file)
Maintainercdep.illabout@gmail.com
Stabilityexperimental
PortabilityPOSIX
Safe HaskellNone
LanguageHaskell2010

Text.Pretty.Simple.Internal.OutputPrinter

Description

 
Synopsis

Documentation

data CheckColorTty Source #

Determines whether pretty-simple should check if the output Handle is a TTY device. Normally, users only want to print in color if the output Handle is a TTY device.

Constructors

CheckColorTty

Check if the output Handle is a TTY device. If the output Handle is a TTY device, determine whether to print in color based on outputOptionsColorOptions. If not, then set outputOptionsColorOptions to Nothing so the output does not get colorized.

NoCheckColorTty

Don't check if the output Handle is a TTY device. Determine whether to colorize the output based solely on the value of outputOptionsColorOptions.

Instances
Eq CheckColorTty Source # 
Instance details

Defined in Text.Pretty.Simple.Internal.OutputPrinter

Show CheckColorTty Source # 
Instance details

Defined in Text.Pretty.Simple.Internal.OutputPrinter

Generic CheckColorTty Source # 
Instance details

Defined in Text.Pretty.Simple.Internal.OutputPrinter

Associated Types

type Rep CheckColorTty :: Type -> Type #

type Rep CheckColorTty Source # 
Instance details

Defined in Text.Pretty.Simple.Internal.OutputPrinter

type Rep CheckColorTty = D1 (MetaData "CheckColorTty" "Text.Pretty.Simple.Internal.OutputPrinter" "pretty-simple-3.2.3.0-G6ynjumpgVKAXGuk0T5zK1" False) (C1 (MetaCons "CheckColorTty" PrefixI False) (U1 :: Type -> Type) :+: C1 (MetaCons "NoCheckColorTty" PrefixI False) (U1 :: Type -> Type))

data OutputOptions Source #

Data-type wrapping up all the options available when rendering the list of Outputs.

Constructors

OutputOptions 

Fields

Instances
Eq OutputOptions Source # 
Instance details

Defined in Text.Pretty.Simple.Internal.OutputPrinter

Show OutputOptions Source # 
Instance details

Defined in Text.Pretty.Simple.Internal.OutputPrinter

Generic OutputOptions Source # 
Instance details

Defined in Text.Pretty.Simple.Internal.OutputPrinter

Associated Types

type Rep OutputOptions :: Type -> Type #

type Rep OutputOptions Source # 
Instance details

Defined in Text.Pretty.Simple.Internal.OutputPrinter

type Rep OutputOptions = D1 (MetaData "OutputOptions" "Text.Pretty.Simple.Internal.OutputPrinter" "pretty-simple-3.2.3.0-G6ynjumpgVKAXGuk0T5zK1" False) (C1 (MetaCons "OutputOptions" PrefixI True) (S1 (MetaSel (Just "outputOptionsIndentAmount") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 Int) :*: (S1 (MetaSel (Just "outputOptionsColorOptions") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 (Maybe ColorOptions)) :*: S1 (MetaSel (Just "outputOptionsEscapeNonPrintable") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 Bool))))

defaultOutputOptionsDarkBg :: OutputOptions Source #

Default values for OutputOptions when printing to a console with a dark background. outputOptionsIndentAmount is 4, and outputOptionsColorOptions is defaultColorOptionsDarkBg.

defaultOutputOptionsLightBg :: OutputOptions Source #

Default values for OutputOptions when printing to a console with a light background. outputOptionsIndentAmount is 4, and outputOptionsColorOptions is defaultColorOptionsLightBg.

defaultOutputOptionsNoColor :: OutputOptions Source #

Default values for OutputOptions when printing using using ANSI escape sequences for color. outputOptionsIndentAmount is 4, and outputOptionsColorOptions is Nothing.

hCheckTTY :: MonadIO m => Handle -> OutputOptions -> m OutputOptions Source #

Given OutputOptions, disable colorful output if the given handle is not connected to a TTY.

render :: OutputOptions -> [Output] -> Text Source #

Given OutputOptions and a list of Output, turn the Output into a lazy Text.

renderOutput :: MonadReader OutputOptions m => Output -> m Builder Source #

Render a single Output as a Builder, using the options specified in the OutputOptions.

escapeNonPrintable :: String -> String Source #

Replace non-printable characters with hex escape sequences.

>>> escapeNonPrintable "\x1\x2"
"\\x1\\x2"

Newlines will not be escaped.

>>> escapeNonPrintable "hello\nworld"
"hello\nworld"

Printable characters will not be escaped.

>>> escapeNonPrintable "h\101llo"
"hello"

indentSubsequentLinesWith :: String -> String -> String Source #

>>> indentSubsequentLinesWith "  " "aaa"
"aaa"
>>> indentSubsequentLinesWith "  " "aaa\nbbb\nccc"
"aaa\n  bbb\n  ccc"
>>> indentSubsequentLinesWith "  " ""
""

useColorQuote :: forall m. MonadReader OutputOptions m => m Builder Source #

Produce a Builder corresponding to the ANSI escape sequence for the color for the ", based on whether or not outputOptionsColorOptions is Just or Nothing, and the value of colorQuote.

useColorString :: forall m. MonadReader OutputOptions m => m Builder Source #

Produce a Builder corresponding to the ANSI escape sequence for the color for the characters of a string, based on whether or not outputOptionsColorOptions is Just or Nothing, and the value of colorString.

useColorReset :: forall m. MonadReader OutputOptions m => m Builder Source #

Produce a Builder corresponding to the ANSI escape sequence for resetting the console color back to the default. Produces an empty Builder if outputOptionsColorOptions is Nothing.

renderRainbowParenFor :: MonadReader OutputOptions m => NestLevel -> Builder -> m Builder Source #

Produce a Builder representing the ANSI escape sequence for the color of the rainbow parenthesis, given an input NestLevel and Builder to use as the input character.

If outputOptionsColorOptions is Nothing, then just return the input character. If it is Just, then return the input character colorized.

sequenceFold :: (Monad f, Monoid a, Traversable t) => t (f a) -> f a Source #

This is simply fmap fold . sequence.

modificationsOutputList :: [Output] -> [Output] Source #

A function that performs optimizations and modifications to a list of input Outputs.

An sample of an optimization is removeStartingNewLine which just removes a newline if it is the first item in an Output list.

removeStartingNewLine :: [Output] -> [Output] Source #

Remove a OutputNewLine if it is the first item in the Output list.

>>> removeStartingNewLine [Output 3 OutputNewLine, Output 3 OutputComma]
[Output {outputNestLevel = NestLevel {unNestLevel = 3}, outputOutputType = OutputComma}]

removeTrailingSpacesInOtherBeforeNewLine :: [Output] -> [Output] Source #

Remove trailing spaces from the end of a OutputOther token if it is followed by a OutputNewLine, or if it is the final Output in the list. This function assumes that there is a single OutputOther before any OutputNewLine (and before the end of the list), so it must be run after running compressOthers.

>>> removeTrailingSpacesInOtherBeforeNewLine [Output 2 (OutputOther "foo  "), Output 4 OutputNewLine]
[Output {outputNestLevel = NestLevel {unNestLevel = 2}, outputOutputType = OutputOther "foo"},Output {outputNestLevel = NestLevel {unNestLevel = 4}, outputOutputType = OutputNewLine}]

compressOthers :: [Output] -> [Output] Source #

If there are two subsequent OutputOther tokens, combine them into just one OutputOther.

>>> compressOthers [Output 0 (OutputOther "foo"), Output 0 (OutputOther "bar")]
[Output {outputNestLevel = NestLevel {unNestLevel = 0}, outputOutputType = OutputOther "foobar"}]

shrinkWhitespaceInOthers :: [Output] -> [Output] Source #

In each OutputOther token, compress multiple whitespaces to just one whitespace.

>>> shrinkWhitespaceInOthers [Output 0 (OutputOther "  hello  ")]
[Output {outputNestLevel = NestLevel {unNestLevel = 0}, outputOutputType = OutputOther " hello "}]