package pprint
Install
dune-project
Dependency
Authors
Maintainers
Sources
md5=defc647ff0d1cb2afc10d513230724c4
sha512=12133735f558075f1ecdcec16cc11f7237dd82883c542645c479f534acd8ed6935f05a3f9aad8e330c329520852bdff6d420d632636bd9004a4d0aade762cae6
doc/pprint/PPrintCombinators/index.html
Module PPrintCombinatorsSource
A set of high-level combinators for building documents.
Single characters
The following constant documents consist of a single character.
Delimiters
precede l x is l ^^ x.
terminate r x is x ^^ r.
val enclose :
PPrintEngine.document ->
PPrintEngine.document ->
PPrintEngine.document ->
PPrintEngine.documentenclose l r x is l ^^ x ^^ r.
The following combinators enclose a document within a pair of delimiters. They are partial applications of enclose. No whitespace or line break is introduced.
Repetition
twice doc is the document obtained by concatenating two copies of the document doc.
repeat n doc is the document obtained by concatenating n copies of the document doc.
Lists and options
concat docs is the concatenation of the documents in the list docs.
separate sep docs is the concatenation of the documents in the list docs. The separator sep is inserted between every two adjacent documents.
concat_map f xs is equivalent to concat (List.map f xs).
val separate_map :
PPrintEngine.document ->
('a -> PPrintEngine.document) ->
'a list ->
PPrintEngine.documentseparate_map sep f xs is equivalent to separate sep (List.map f xs).
val separate2 :
PPrintEngine.document ->
PPrintEngine.document ->
PPrintEngine.document list ->
PPrintEngine.documentseparate2 sep last_sep docs is the concatenation of the documents in the list docs. The separator sep is inserted between every two adjacent documents, except between the last two documents, where the separator last_sep is used instead.
optional f None is the empty document. optional f (Some x) is the document f x.
Text
lines s is the list of documents obtained by splitting s at newline characters, and turning each line into a document via substring. This code is not UTF-8 aware.
arbitrary_string s is equivalent to separate (break 1) (lines s). It is analogous to string s, but is valid even if the string s contains newline characters.
words s is the list of documents obtained by splitting s at whitespace characters, and turning each word into a document via substring. All whitespace is discarded. This code is not UTF-8 aware.
split ok s splits the string s before and after every occurrence of a character that satisfies the predicate ok. The substrings thus obtained are turned into documents, and a list of documents is returned. No information is lost: the concatenation of the documents yields the original string. This code is not UTF-8 aware.
flow sep docs separates the documents in the list docs with the separator sep and arranges for a new line to begin whenever a document does not fit on the current line. This is useful for typesetting free-flowing, ragged-right text. A typical choice of sep is break b, where b is the number of spaces that must be inserted between two consecutive words (when displayed on the same line).
val flow_map :
PPrintEngine.document ->
('a -> PPrintEngine.document) ->
'a list ->
PPrintEngine.documentflow_map sep f docs is equivalent to flow sep (List.map f docs).
url s is a possible way of displaying the URL s. A potential line break is inserted immediately before and immediately after every slash and dot character.
Alignment and indentation
val prefix :
int ->
int ->
PPrintEngine.document ->
PPrintEngine.document ->
PPrintEngine.documentprefix n b left right has the following flat layout:
left rightand the following non-flat layout:
left
rightThe parameter n controls the nesting of right (when not flat). The parameter b controls the number of spaces between left and right (when flat).
jump n b right is equivalent to prefix n b empty right.
val infix :
int ->
int ->
PPrintEngine.document ->
PPrintEngine.document ->
PPrintEngine.document ->
PPrintEngine.documentinfix n b middle left right has the following flat layout:
left middle rightand the following non-flat layout:
left middle
rightThe parameter n controls the nesting of right (when not flat). The parameter b controls the number of spaces between left and middle (always) and between middle and right (when flat).
val surround :
int ->
int ->
PPrintEngine.document ->
PPrintEngine.document ->
PPrintEngine.document ->
PPrintEngine.documentsurround n b opening contents closing has the following flat layout:
opening contents closingand the following non-flat layout:
opening
contents
closingThe parameter n controls the nesting of contents (when not flat). The parameter b controls the number of spaces between opening and contents and between contents and closing (when flat).
val soft_surround :
int ->
int ->
PPrintEngine.document ->
PPrintEngine.document ->
PPrintEngine.document ->
PPrintEngine.documentsoft_surround is analogous to surround, but involves more than one group, so it offers possibilities other than the completely flat layout (where opening, contents, and closing appear on a single line) and the completely developed layout (where opening, contents, and closing appear on separate lines). It tries to place the beginning of contents on the same line as opening, and to place closing on the same line as the end of contents, if possible.
val surround_separate :
int ->
int ->
PPrintEngine.document ->
PPrintEngine.document ->
PPrintEngine.document ->
PPrintEngine.document ->
PPrintEngine.document list ->
PPrintEngine.documentsurround_separate n b void opening sep closing docs is equivalent to surround n b opening (separate sep docs) closing, except when the list docs is empty, in which case it reduces to void.
val surround_separate_map :
int ->
int ->
PPrintEngine.document ->
PPrintEngine.document ->
PPrintEngine.document ->
PPrintEngine.document ->
('a -> PPrintEngine.document) ->
'a list ->
PPrintEngine.documentsurround_separate_map n b void opening sep closing f xs is equivalent to surround_separate n b void opening sep closing (List.map f xs).
Short-hands
!^s is a short-hand for string s.
x ^/^ y separates x and y with a breakable space. It is a short-hand for x ^^ break 1 ^^ y.
x ^//^ y is a short-hand for prefix 2 1 x y.