| Copyright | (c) The University of Glasgow 2001 |
|---|---|
| License | BSD-style (see the file LICENSE) |
| Maintainer | David Terei <code@davidterei.com> |
| Stability | stable |
| Portability | portable |
| Safe Haskell | Safe |
| Language | Haskell98 |
Text.PrettyPrint
Contents
Description
Provides a collection of pretty printer combinators, a set of API's that provides a way to easily print out text in a consistent format of your choosing.
This module should be used as opposed to the HughesPJ
module. Both are equivalent though as this module simply re-exports the
other.
Synopsis
- 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
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
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
Simple derived documents
Wrapping documents in delimiters
Combining documents
($$) :: 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
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:
nest0 x = xnestk (nestk' x) =nest(k+k') xnestk (x<>y) =nestk x<>nestk ynestk (x$$y) =nestk x$$nestk ynestkempty=emptyx, if<>nestk y = x<>yxnon-empty
The side condition on the last law is needed because
empty is a left identity for <> .
punctuate :: Doc -> [Doc] -> [Doc] Source #
punctuate p [d1, ... dn] = [d1 <> p, d2 <> p, ... dn-1 <> p, dn]
Predicates on documents
Rendering documents
Default rendering
Rendering with a particular style
A rendering style. Allows us to specify constraints to choose among the many different rendering options.
Constructors
Fields
- mode :: Mode
The rendering mode.
- lineLength :: Int
Maximum length of a line, in characters.
- ribbonsPerLine :: Float
Ratio of line length to ribbon length. A ribbon refers to the characters on a line excluding indentation. So a
lineLengthof 100, with aribbonsPerLineof2.0would only allow up to 50 characters of ribbon to be displayed on a line, while allowing it to be indented up to 50 characters.
Instances
Instance details
General rendering
Arguments
Rendering mode.
Line length.
Ribbons per line.
What to do with text.
What to do at the end.
The document.
Result.
The general rendering interface. Please refer to the Style and Mode
types for a description of rendering mode, line length and ribbons.
Rendering mode.
Constructors
Normal rendering (lineLength and ribbonsPerLine
respected').
With zig-zag cuts.
No indentation, infinitely long lines (lineLength ignored),
but explicit new lines, i.e., text "one" $$ text "two", are
respected.
All on one line, lineLength ignored and explicit new lines
($$) are turned into spaces.
Instances
Instance details
data TextDetails Source #
A TextDetails represents a fragment of text that will be output at some
point in a Doc.
Constructors
Instances
Instance details
Instance details
Methods
showsPrec :: Int -> TextDetails -> ShowS #
show :: TextDetails -> String #
showList :: [TextDetails] -> ShowS #
Instance details
Associated Types
type Rep TextDetails :: * -> * #
Instance details
Methods
rnf :: TextDetails -> () #