module Text.PrettyPrint.ANSI.Leijen (
Doc, putDoc, hPutDoc, empty, char, text, (<>), nest, line, linebreak, group,
softline, softbreak, hardline, flatAlt, renderSmart, align, hang, indent,
encloseSep, list, tupled, semiBraces, (<+>), (<$>), (</>), (<$$>), (<//>),
hsep, vsep, fillSep, sep, hcat, vcat, fillCat, cat, punctuate, fill,
fillBreak, enclose, squotes, dquotes, parens, angles, braces, brackets,
lparen, rparen, langle, rangle, lbrace, rbrace, lbracket, rbracket, squote,
dquote, semi, colon, comma, space, dot, backslash, equals, black, red,
green, yellow, blue, magenta, cyan, white, dullblack, dullred, dullgreen,
dullyellow, dullblue, dullmagenta, dullcyan, dullwhite, onblack, onred,
ongreen, onyellow, onblue, onmagenta, oncyan, onwhite, ondullblack,
ondullred, ondullgreen, ondullyellow, ondullblue, ondullmagenta, ondullcyan,
ondullwhite, bold, debold, underline, deunderline, plain, string, int,
integer, float, double, rational, Pretty(..), SimpleDoc, renderPretty,
renderCompact, displayS, displayIO, bool, column, columns, nesting, width
) where
import Prelude hiding ((<$>))
import Data.Monoid
import qualified Data.Text.Lazy as TL
import System.IO
import Data.Text.Prettyprint.Doc (Pretty (..))
import qualified Data.Text.Prettyprint.Doc as New
import qualified Data.Text.Prettyprint.Doc.Render.Terminal as NewT
type Doc = New.Doc NewT.AnsiTerminal
type SimpleDoc = New.SimpleDocStream NewT.AnsiTerminal
putDoc :: Doc -> IO ()
putDoc = NewT.putDoc
hPutDoc :: Handle -> Doc -> IO ()
hPutDoc = NewT.hPutDoc
empty :: Doc
empty = New.emptyDoc
char :: Char -> Doc
char = New.pretty
text :: String -> Doc
text = New.pretty
nest :: Int -> Doc -> Doc
nest = New.nest
line :: Doc
line = New.line
linebreak :: Doc
linebreak = New.flatAlt New.line mempty
group :: Doc -> Doc
group = New.group
softline :: Doc
softline = New.softline
softbreak :: Doc
softbreak = New.group linebreak
hardline :: Doc
hardline = New.hardline
flatAlt :: Doc -> Doc -> Doc
flatAlt = New.flatAlt
renderSmart :: Float -> Int -> Doc -> SimpleDoc
renderSmart ribbonFraction pageWidth
= New.layoutSmart New.LayoutOptions
{ New.layoutPageWidth = New.AvailablePerLine pageWidth (realToFrac ribbonFraction) }
align :: Doc -> Doc
align = New.align
hang :: Int -> Doc -> Doc
hang = New.hang
indent :: Int -> Doc -> Doc
indent = New.indent
encloseSep :: Doc -> Doc -> Doc -> [Doc] -> Doc
encloseSep = New.encloseSep
list :: [Doc] -> Doc
list = New.list
tupled :: [Doc] -> Doc
tupled = New.tupled
semiBraces :: [Doc] -> Doc
semiBraces = New.encloseSep New.lbrace New.rbrace New.semi
(<+>), (<$>), (</>), (<$$>), (<//>) :: Doc -> Doc -> Doc
(<+>) = (New.<+>)
(<$>) = \x y -> x <> New.line <> y
(</>) = \x y -> x <> softline <> y
(<$$>) = \x y -> x <> linebreak <> y
(<//>) = \x y -> x <> softbreak <> y
hsep, vsep, fillSep, sep, hcat, vcat, fillCat, cat :: [Doc] -> Doc
hsep = New.hsep
vsep = New.vsep
fillSep = New.fillSep
sep = New.sep
hcat = New.hcat
vcat = New.vcat
fillCat = New.fillCat
cat = New.cat
punctuate :: Doc -> [Doc] -> [Doc]
punctuate = New.punctuate
fill :: Int -> Doc -> Doc
fill = New.fill
fillBreak :: Int -> Doc -> Doc
fillBreak = New.fillBreak
enclose :: Doc -> Doc -> Doc -> Doc
enclose = New.enclose
squotes, dquotes, parens, angles, braces, brackets :: Doc -> Doc
squotes = New.squotes
dquotes = New.dquotes
parens = New.parens
angles = New.angles
braces = New.braces
brackets = New.brackets
lparen, rparen, langle, rangle, lbrace, rbrace, lbracket, rbracket, squote,
dquote, semi, colon, comma, space, dot, backslash, equals :: Doc
lparen = New.lparen
rparen = New.rparen
langle = New.langle
rangle = New.rangle
lbrace = New.lbrace
rbrace = New.rbrace
lbracket = New.lbracket
rbracket = New.rbracket
squote = New.squote
dquote = New.dquote
semi = New.semi
colon = New.colon
comma = New.comma
space = New.space
dot = New.dot
backslash = New.backslash
equals = New.equals
black, red, green, yellow, blue, magenta, cyan, white, dullblack, dullred,
dullgreen, dullyellow, dullblue, dullmagenta, dullcyan, dullwhite, onblack,
onred, ongreen, onyellow, onblue, onmagenta, oncyan, onwhite, ondullblack,
ondullred, ondullgreen, ondullyellow, ondullblue, ondullmagenta, ondullcyan,
ondullwhite, bold, debold, underline, deunderline :: Doc -> Doc
black = NewT.color NewT.Black
red = NewT.color NewT.Red
green = NewT.color NewT.Green
yellow = NewT.color NewT.Yellow
blue = NewT.color NewT.Blue
magenta = NewT.color NewT.Magenta
cyan = NewT.color NewT.Cyan
white = NewT.color NewT.White
dullblack = NewT.colorDull NewT.Black
dullred = NewT.colorDull NewT.Red
dullgreen = NewT.colorDull NewT.Green
dullyellow = NewT.colorDull NewT.Yellow
dullblue = NewT.colorDull NewT.Blue
dullmagenta = NewT.colorDull NewT.Magenta
dullcyan = NewT.colorDull NewT.Cyan
dullwhite = NewT.colorDull NewT.White
onblack = NewT.bgColor NewT.Black
onred = NewT.bgColor NewT.Red
ongreen = NewT.bgColor NewT.Green
onyellow = NewT.bgColor NewT.Yellow
onblue = NewT.bgColor NewT.Blue
onmagenta = NewT.bgColor NewT.Magenta
oncyan = NewT.bgColor NewT.Cyan
onwhite = NewT.bgColor NewT.White
ondullblack = NewT.bgColorDull NewT.Black
ondullred = NewT.bgColorDull NewT.Red
ondullgreen = NewT.bgColorDull NewT.Green
ondullyellow = NewT.bgColorDull NewT.Yellow
ondullblue = NewT.bgColorDull NewT.Blue
ondullmagenta = NewT.bgColorDull NewT.Magenta
ondullcyan = NewT.bgColorDull NewT.Cyan
ondullwhite = NewT.bgColorDull NewT.White
bold = NewT.bold
debold = id
underline = NewT.underline
deunderline = id
plain :: Doc -> Doc
plain = New.unAnnotate
string :: String -> Doc
string = New.pretty
int :: Int -> Doc
int = New.pretty
integer :: Integer -> Doc
integer = New.pretty
float :: Float -> Doc
float = New.pretty
double :: Double -> Doc
double = New.pretty
rational :: Rational -> Doc
rational = New.pretty . show
renderPretty :: Float -> Int -> Doc -> SimpleDoc
renderPretty ribbonFraction pageWidth
= New.layoutSmart New.LayoutOptions
{ New.layoutPageWidth = New.AvailablePerLine pageWidth (realToFrac ribbonFraction) }
renderCompact :: Doc -> SimpleDoc
renderCompact = New.layoutCompact
displayS :: SimpleDoc -> ShowS
displayS sdoc =
let rendered = NewT.renderLazy sdoc
in (TL.unpack rendered ++)
displayIO :: Handle -> SimpleDoc -> IO ()
displayIO = NewT.renderIO
bool :: Bool -> Doc
bool = New.pretty
column :: (Int -> Doc) -> Doc
column = New.column
columns :: (Maybe Int -> Doc) -> Doc
columns f = New.pageWidth (f . toMaybeInt)
where
toMaybeInt :: New.PageWidth -> Maybe Int
toMaybeInt (New.AvailablePerLine cpl _) = Just cpl
toMaybeInt New.Unbounded = Nothing
nesting :: (Int -> Doc) -> Doc
nesting = New.nesting
width :: Doc -> (Int -> Doc) -> Doc
width = New.width