Copyright | (c) The University of Glasgow 2001 |
---|---|
License | BSD-style (see the file LICENSE) |
Maintainer | David Terei <[email protected]> |
Stability | stable |
Portability | portable |
Safe Haskell | Safe |
Language | Haskell98 |
John Hughes's and Simon Peyton Jones's Pretty Printer Combinators
Based on The Design of a Pretty-printing Library in Advanced Functional Programming, Johan Jeuring and Erik Meijer (eds), LNCS 925 http://www.cs.chalmers.se/~rjmh/Papers/pretty.ps
The abstract type of documents. A Doc represents a *set* of layouts. A Doc with no occurrences of Union or NoDoc represents just one layout.
data TextDetails Source
The TextDetails data type
A TextDetails represents a fragment of text that will be output at some point.
Chr !Char | A single Char fragment |
Str String | A whole String fragment |
PStr String | Used to represent a Fast String fragment but now deprecated and identical to the Str constructor. |
A document of height and width 1, containing a literal character.
A document of height 1 containing a literal string. text
satisfies the following laws:
The side condition on the last law is necessary because text ""
has height 1, while empty
has no height.
Same as text
. Used to be used for Bytestrings.
sizedText :: Int -> String -> Doc Source
Some text with any width. (text s = sizedText (length s) s
)
zeroWidthText :: String -> Doc Source
Some text, but without any width. Use for non-printing text such as a HTML or Latex tags
:: Doc | A ';' character |
:: Doc | A ',' character |
:: Doc | A |
:: Doc | A space character |
:: Doc | A '=' character |
:: Doc | A '(' character |
:: Doc | A ')' character |
:: Doc | A '[' character |
:: Doc | A ']' character |
:: Doc | A '{' character |
:: Doc | A '}' character |
maybeParens :: Bool -> Doc -> Doc Source
Apply parens
to Doc
if boolean is true.
maybeBrackets :: Bool -> Doc -> Doc Source
Apply brackets
to Doc
if boolean is true.
maybeBraces :: Bool -> Doc -> Doc Source
Apply braces
to Doc
if boolean is true.
maybeQuotes :: Bool -> Doc -> Doc Source
Apply quotes
to Doc
if boolean is true.
maybeDoubleQuotes :: Bool -> Doc -> Doc Source
Apply doubleQuotes
to Doc
if boolean is true.
The empty document, with no height and no width. empty
is the identity for <>
, <+>
, $$
and $+$
, and anywhere in the argument list for sep
, hcat
, hsep
, vcat
, fcat
etc.
(<>) :: Doc -> Doc -> Doc infixl 6 Source
Beside. <>
is associative, with identity empty
.
(<+>) :: Doc -> Doc -> Doc infixl 6 Source
Beside, separated by space, unless one of the arguments is empty
. <+>
is associative, with identity empty
.
List version of <>
.
List version of <+>
.
($$) :: Doc -> Doc -> Doc infixl 5 Source
Above, except that if the last line of the first argument stops at least one position before the first line of the second begins, these two lines are overlapped. For example:
text "hi" $$ nest 5 (text "there")
lays out as
hi there
rather than
hi there
$$
is associative, with identity empty
, and also satisfies
($+$) :: Doc -> Doc -> Doc infixl 5 Source
Above, with no overlapping. $+$
is associative, with identity empty
.
List version of $$
.
"Paragraph fill" version of sep
.
"Paragraph fill" version of cat
.
nest :: Int -> Doc -> Doc Source
Nest (or indent) a document by a given number of positions (which may also be negative). nest
satisfies the laws:
nest
0 x = x
nest
k (nest
k' x) =nest
(k+k') x
nest
k (x<>
y) =nest
k z<>
nest
k y
nest
k (x$$
y) =nest
k x$$
nest
k y
nest
kempty
=empty
x <> nest k y = x <> y
, if x
non-emptyThe side condition on the last law is needed because empty
is a left identity for <>
.
hang :: Doc -> Int -> Doc -> Doc Source
hang d1 n d2 = sep [d1, nest n d2]
punctuate :: Doc -> [Doc] -> [Doc] Source
punctuate p [d1, ... dn] = [d1 <> p, d2 <> p, ... dn-1 <> p, dn]
Returns True
if the document is empty
first :: Doc -> Doc -> Doc Source
first
returns its first argument if it is non-empty, otherwise its second.
reduceDoc :: Doc -> RDoc Source
Perform some simplification of a built up GDoc
.
render :: Doc -> String Source
Render the Doc
to a String using the default Style
.
A rendering style.
Style | |
Fields
|
The default style (mode=PageMode, lineLength=100, ribbonsPerLine=1.5
).
renderStyle :: Style -> Doc -> String Source
Render the Doc
to a String using the given Style
.
Rendering mode.
PageMode | Normal |
ZigZagMode | With zig-zag cuts |
LeftMode | No indentation, infinitely long lines |
OneLineMode | All on one line |
:: Mode | Rendering mode |
-> Int | Line length |
-> Float | Ribbons per line |
-> (TextDetails -> a -> a) | What to do with text |
-> a | What to do at the end |
-> Doc | The document |
-> a | Result |
The general rendering interface.
© The University of Glasgow and others
Licensed under a BSD-style license (see top of the page).
https://downloads.haskell.org/~ghc/7.10.3/docs/html/libraries/pretty-1.1.2.0/Text-PrettyPrint-HughesPJ.html