package containers
Install
dune-project
Dependency
Authors
Maintainers
Sources
sha256=eb9b26eb2c3cf04fc5157d256eb49c43552ccb5c59c568772d70315db9669784
sha512=7f4cf5112c8047fd789c04129745dbe9783aa94390e8983f86408053b0af637e2a9cfce1559ce466b1b6ff7c01fd52d8685f5db1d1c0dda2c0aa138f90606a50
doc/containers.pp/Containers_pp/index.html
Module Containers_ppSource
Pretty printing of documents.
A document is a structured tree of text with formatting instructions.
It can be rendered into a string ("pretty printed"), see Pretty.
This follows Wadler's paper "A prettier printer", but with some changes in the rendering part because we can't rely on lazyness to make the algebraic implementation efficient.
Some general considerations: the type t is the type of documents, a tree with text leaves that is pretty printed within a given width.
Layout is controlled via the combination of a few primitives:
newlinewill either print a space or a newline. It is similar toFormat's"@ "in that sense. A big difference withFormatis that by defaultnewlineis actually a newline. It only becomes a space if it's in agroupsmall enough to fit in the remainder of the current line.group dtries to writedon a single line if there's room. If not, it has no effect.nest n dincreases the indentation level insided. Any newline that is rendered as a new line is indented bynmore spaces (which are cumulative with surroundingnestcalls).append a b(ora ^ b) just printsafollowed byb.fill dis a bit likegroupbut it will try to cram as much as possible on each line. It is not all-or-nothing likegroup.
Core
The type of documents
Text, with a Printf-compatible format.
For example, textpf "%d-%d" 4 2 is like text "4-2".
nest n d increases indentation by n inside d. If current indentation is m, then every newline inside d will be followed by n + m leading spaces.
Group the documents inside this.
Newlines immediately inside this group will either render as new lines or as spaces, depending on the width available.
newline_or_spaces n either prints a newline (respecting indentation), or prints n spaces. newline is basically newline_or_spaces 1.
fill sep l resembles group (append_l ~sep l), except it tries to put as many items of l as possible on each line.
In terms of Format, this is like the hov box.
Output device
Extensibility
ext e v d wraps d with value v.
It is a document that has the same shape (and size) as d, except that additional data will be output when it is rendered using extension e.
When this is rendered, first e.pre out v is called; then d is printed; then e.post out v is called. Here out is the output buffer/stream for rendering.
Pretty print and rendering
Pretty-print, using Pretty and an unspecified margin.
Convenience functions
append_l ?sep l is the concatenation of elements of l, separated by sep (default nil)
append_sp l is the concatenation of elements of l, separated by ' '
of_list f l maps each element of l to a document and concatenates them.
bracket2 l d r groups d, indented by 2, between brackets l and r
sexp_apply a l is the S-expr "(text a …l)", pretty-printed
Simple colors in terminals