Text.PrettyPrint.Annotated
Copyright | (c) Trevor Elliott <[email protected]> 2015 |
---|---|
License | BSD-style (see the file LICENSE) |
Maintainer | David Terei <[email protected]> |
Stability | stable |
Portability | portable |
Safe Haskell | Safe |
Language | Haskell98 |
Description
This module provides a version of pretty that allows for annotations to be attached to documents. Annotations are arbitrary pieces of metadata that can be attached to sub-documents.
This module should be used as opposed to the HughesPJ
module. Both are equivalent though as this module simply re-exports the other.
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.
Instances
Constructing documents
Converting values into documents
A document of height and width 1, containing a literal character.
text :: String -> Doc a Source
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.
ptext :: String -> Doc a Source
Same as text
. Used to be used for Bytestrings.
sizedText :: Int -> String -> Doc a Source
Some text with any width. (text s = sizedText (length s) s
)
zeroWidthText :: String -> Doc a Source
Some text, but without any width. Use for non-printing text such as a HTML or Latex tags
Simple derived documents
Arguments
:: Doc a | A ';' character |
Arguments
:: Doc a | A ',' character |
Arguments
:: Doc a | A |
Arguments
:: Doc a | A space character |
Arguments
:: Doc a | A '=' character |
Arguments
:: Doc a | A '(' character |
Arguments
:: Doc a | A ')' character |
Arguments
:: Doc a | A '[' character |
Arguments
:: Doc a | A ']' character |
Arguments
:: Doc a | A '{' character |
Arguments
:: Doc a | A '}' character |
Wrapping documents in delimiters
Combining documents
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 a -> Doc a -> Doc a infixl 6 Source
Beside. <>
is associative, with identity empty
.
(<+>) :: Doc a -> Doc a -> Doc a infixl 6 Source
Beside, separated by space, unless one of the arguments is empty
. <+>
is associative, with identity empty
.
hcat :: [Doc a] -> Doc a Source
List version of <>
.
hsep :: [Doc a] -> Doc a Source
List version of <+>
.
($$) :: Doc a -> Doc a -> Doc a 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 a -> Doc a -> Doc a infixl 5 Source
Above, with no overlapping. $+$
is associative, with identity empty
.
vcat :: [Doc a] -> Doc a Source
List version of $$
.
sep :: [Doc a] -> Doc a Source
cat :: [Doc a] -> Doc a Source
fsep :: [Doc a] -> Doc a Source
"Paragraph fill" version of sep
.
fcat :: [Doc a] -> Doc a Source
"Paragraph fill" version of cat
.
nest :: Int -> Doc a -> Doc a 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 k empty = empty
-
x <> nest k y = x <> y
, ifx
non-empty
The side condition on the last law is needed because empty
is a left identity for <>
.
hang :: Doc a -> Int -> Doc a -> Doc a Source
hang d1 n d2 = sep [d1, nest n d2]
punctuate :: Doc a -> [Doc a] -> [Doc a] Source
punctuate p [d1, ... dn] = [d1 <> p, d2 <> p, ... dn-1 <> p, dn]
Annotating documents
annotate :: a -> Doc a -> Doc a Source
Attach an annotation to a document.
Predicates on documents
isEmpty :: Doc a -> Bool Source
Returns True
if the document is empty
Rendering documents
Default rendering
render :: Doc a -> String Source
Render the Doc
to a String using the default Style
(see style
).
Annotation rendering
renderSpans :: Doc ann -> (String, [Span ann]) Source
Render an annotated Doc
to a String and list of annotations (see Span
) using the default Style
(see style
).
A Span
represents the result of an annotation after a Doc
has been rendered, capturing where the annotation now starts and ends in the rendered output.
Constructors
Span | |
Fields
|
Rendering with a particular style
A rendering style. Allows us to specify constraints to choose among the many different rendering options.
Constructors
Style | |
Fields
|
Instances
Eq Style | |
Show Style | |
Generic Style | |
type Rep Style | |
Defined in Text.PrettyPrint.Annotated.HughesPJ type Rep Style = D1 ('MetaData "Style" "Text.PrettyPrint.Annotated.HughesPJ" "pretty-1.1.3.6" 'False) (C1 ('MetaCons "Style" 'PrefixI 'True) (S1 ('MetaSel ('Just "mode") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Mode) :*: (S1 ('MetaSel ('Just "lineLength") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Int) :*: S1 ('MetaSel ('Just "ribbonsPerLine") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Float)))) |
The default style (mode=PageMode, lineLength=100, ribbonsPerLine=1.5
).
renderStyle :: Style -> Doc a -> String Source
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 b | The document. |
-> a | Result. |
The general rendering interface. Please refer to the Style
and Mode
types for a description of rendering mode, line length and ribbons.
Arguments
:: Mode | Rendering mode. |
-> Int | Line length. |
-> Float | Ribbons per line. |
-> (AnnotDetails b -> a -> a) | What to do with text. |
-> a | What to do at the end. |
-> Doc b | The document. |
-> a | Result. |
The general rendering interface, supporting annotations. Please refer to the Style
and Mode
types for a description of rendering mode, line length and ribbons.
Rendering mode.
Constructors
PageMode | Normal rendering ( |
ZigZagMode | With zig-zag cuts. |
LeftMode | No indentation, infinitely long lines ( |
OneLineMode | All on one line, |
Instances
Eq Mode | |
Show Mode | |
Generic Mode | |
type Rep Mode | |
Defined in Text.PrettyPrint.Annotated.HughesPJ type Rep Mode = D1 ('MetaData "Mode" "Text.PrettyPrint.Annotated.HughesPJ" "pretty-1.1.3.6" 'False) ((C1 ('MetaCons "PageMode" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "ZigZagMode" 'PrefixI 'False) (U1 :: Type -> Type)) :+: (C1 ('MetaCons "LeftMode" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "OneLineMode" 'PrefixI 'False) (U1 :: Type -> Type))) |
data TextDetails Source
A TextDetails represents a fragment of text that will be output at some point in a Doc
.
Constructors
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. |
Instances
© The University of Glasgow and others
Licensed under a BSD-style license (see top of the page).
https://downloads.haskell.org/~ghc/8.10.2/docs/html/libraries/pretty-1.1.3.6/Text-PrettyPrint-Annotated.html