| Portability | portable |
|---|---|
| Stability | stable |
| Maintainer | David Terei <dave.terei@gmail.com> |
| Safe Haskell | Safe |
Text.PrettyPrint
Contents
Description
The default interface to the pretty-printing library. Provides a collection of pretty printer combinators.
This module should be used as opposed to the Text.PrettyPrint.HughesPJ module. Both are equivalent though as this module simply re-exports the other.
- data Doc
- char :: Char -> Doc
- text :: String -> Doc
- ptext :: String -> Doc
- sizedText :: Int -> String -> Doc
- zeroWidthText :: String -> Doc
- int :: Int -> Doc
- integer :: Integer -> Doc
- float :: Float -> Doc
- double :: Double -> Doc
- rational :: Rational -> Doc
- semi :: Doc
- comma :: Doc
- colon :: Doc
- space :: Doc
- equals :: Doc
- lparen :: Doc
- rparen :: Doc
- lbrack :: Doc
- rbrack :: Doc
- lbrace :: Doc
- rbrace :: Doc
- parens :: Doc -> Doc
- brackets :: Doc -> Doc
- braces :: Doc -> Doc
- quotes :: Doc -> Doc
- doubleQuotes :: Doc -> Doc
- empty :: Doc
- (<>) :: Doc -> Doc -> Doc
- (<+>) :: Doc -> Doc -> Doc
- hcat :: [Doc] -> Doc
- hsep :: [Doc] -> Doc
- ($$) :: Doc -> Doc -> Doc
- ($+$) :: Doc -> Doc -> Doc
- vcat :: [Doc] -> Doc
- sep :: [Doc] -> Doc
- cat :: [Doc] -> Doc
- fsep :: [Doc] -> Doc
- fcat :: [Doc] -> Doc
- nest :: Int -> Doc -> Doc
- hang :: Doc -> Int -> Doc -> Doc
- punctuate :: Doc -> [Doc] -> [Doc]
- isEmpty :: Doc -> Bool
- render :: Doc -> String
- data Style = Style {
- mode :: Mode
- lineLength :: Int
- ribbonsPerLine :: Float
- style :: Style
- renderStyle :: Style -> Doc -> String
- fullRender :: Mode -> Int -> Float -> (TextDetails -> a -> a) -> a -> Doc -> a
- data Mode
- = PageMode
- | ZigZagMode
- | LeftMode
- | OneLineMode
- data TextDetails
The document type
data Doc
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.
Constructing documents
Converting values into documents
zeroWidthText :: String -> Doc
Some text, but without any width. Use for non-printing text such as a HTML or Latex tags
Simple derived documents
Wrapping documents in delimiters
Combining documents
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
Nest (or indent) a document by a given number of positions
(which may also be negative). nest satisfies the laws:
nest0 x = xnestk (nestk' x) =nest(k+k') xnestk (x<>y) =nestk z<>nestk ynestk (x$$y) =nestk x$$nestk ynestkempty=empty-
x, if<>nestk y = x<>yxnon-empty
The side condition on the last law is needed because
empty is a left identity for <>.
Predicates on documents
Rendering documents
Default rendering
Rendering with a particular style
data Style
A rendering style.
Constructors
| Style | |
Fields
| |
renderStyle :: Style -> Doc -> String
Render the Doc to a String using the given Style.
General rendering
Arguments
| :: 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.
data Mode
Rendering mode.
Constructors
| PageMode | Normal |
| ZigZagMode | With zig-zag cuts |
| LeftMode | No indentation, infinitely long lines |
| OneLineMode | All on one line |
data TextDetails
The TextDetails data type
A TextDetails represents a fragment of text that will be output at some point.