Module Ocaml_utils.Format_docSource
Composable document for the Format formatting engine.
This module introduces a pure and immutable document type which represents a sequence of formatting instructions to be printed by a formatting engine at later point. At the same time, it also provides format string interpreter which produces this document type from format string and their associated printers.
The module is designed to be source compatible with code defining format printers: replacing `Format` by `Format_doc` in your code will convert `Format` printers to `Format_doc` printers.
Compatibility API
The functions and types below provides source compatibility with format printers and conversion function from Format_doc printers to Format printers. The reverse direction is implemented using an escape hatch in the formatting instruction and should only be used to preserve backward compatibility.
formatter rdoc creates a formatter that updates the rdoc reference
Translate a Format_doc printer to a Format one.
If necessary, embbed a Format printer inside a formatting instruction stream. This breaks every guarantees provided by Format_doc.
Format string interpreters
doc_printf and kdoc_printf creates a document directly
Compatibility with Doc
Source compatibility with Format
String printers
Primitive type printers
Printer combinators
Boxes and tags
Break hints
Tabulations
Newlines and flushing
Compiler specific functions
Separators
List printing helpers
pp_parens_if cond pp ppf x prints pp ppf x, wrapping it with () if cond is true.
val pp_nested_list :
nested:bool ->
pp_element:(nested:bool -> 'a printer) ->
pp_sep:unit printer ->
'a list printerpp_nested_list ~nested ~pp_element ~pp_sep ppf args prints the list args with pp_element on ppf. The elements are separated by pp_sep. If ~nested is true, the list is wrapped in parens. The element printer is always called with nested:true, indicating that any inner lists are nested and need parens.
Compiler output
val pp_two_columns :
?sep:string ->
?max_lines:int ->
formatter ->
(string * string) list ->
unitpp_two_columns ?sep ?max_lines ppf l prints the lines in l as two columns separated by sep ("|" by default). max_lines can be used to indicate a maximum number of lines to print -- an ellipsis gets inserted at the middle if the input has too many lines.
Example:
pp_two_columns ~max_lines:3 Format.std_formatter [ "abc", "hello"; "def", "zzz"; "a" , "bllbl"; "bb" , "dddddd"; ]
prints
abc | hello ... bb | dddddd