Module Format_doc
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.
module Doc : sig ... endDefinitions and immutable API for composing documents
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.
type doc = Format_doc.Doc.ttype t = Format_doc.doctype 'a printer = Format_doc.formatter -> 'a -> unitval formatter : Format_doc.doc Stdlib.ref -> Format_doc.formatterformatter rdoc creates a formatter that updates the rdoc reference
type 'a format_printer = Stdlib.Format.formatter -> 'a -> unitTranslate a Format_doc printer to a Format one.
val compat : 'a Format_doc.printer -> 'a Format_doc.format_printerval compat1 :
('p1 -> 'a Format_doc.printer) ->
'p1 ->
'a Format_doc.format_printerval compat2 :
('p1 -> 'p2 -> 'a Format_doc.printer) ->
'p1 ->
'p2 ->
'a Format_doc.format_printerval deprecated_printer :
(Stdlib.Format.formatter -> unit) ->
Format_doc.formatter ->
unitIf necessary, embbed a Format printer inside a formatting instruction stream. This breaks every guarantees provided by Format_doc.
val deprecated : 'a Format_doc.format_printer -> 'a Format_doc.printerval deprecated1 :
('p1 -> 'a Format_doc.format_printer) ->
'p1 ->
'a Format_doc.printerFormat string interpreters
val fprintf :
Format_doc.formatter ->
('a, Format_doc.formatter, unit) Stdlib.format ->
'aval kfprintf :
(Format_doc.formatter -> 'a) ->
Format_doc.formatter ->
('b, Format_doc.formatter, unit, 'a) Stdlib.format4 ->
'bval asprintf : ('a, Format_doc.formatter, unit, string) Stdlib.format4 -> 'aval kasprintf :
(string -> 'a) ->
('b, Format_doc.formatter, unit, 'a) Stdlib.format4 ->
'bval dprintf :
('a, Format_doc.formatter, unit, Format_doc.formatter -> unit) Stdlib.format4 ->
'aval kdprintf :
((Format_doc.formatter -> unit) -> 'a) ->
('b, Format_doc.formatter, unit, 'a) Stdlib.format4 ->
'bval doc_printf :
('a, Format_doc.formatter, unit, Format_doc.doc) Stdlib.format4 ->
'adoc_printf and kdoc_printf creates a document directly
val kdoc_printf :
(Format_doc.doc -> 'r) ->
('a, Format_doc.formatter, unit, 'r) Stdlib.format4 ->
'aCompatibility with Doc
val doc_printer : 'a Format_doc.printer -> 'a Format_doc.Doc.printerval pp_doc : Format_doc.doc Format_doc.printerSource compatibility with Format
String printers
val pp_print_string : string Format_doc.printerval pp_print_substring : pos:int -> len:int -> string Format_doc.printerval pp_print_text : string Format_doc.printerval pp_print_bytes : bytes Format_doc.printerval pp_print_as : Format_doc.formatter -> int -> string -> unitval pp_print_substring_as :
pos:int ->
len:int ->
Format_doc.formatter ->
int ->
string ->
unitPrimitive type printers
val pp_print_char : char Format_doc.printerval pp_print_int : int Format_doc.printerval pp_print_float : float Format_doc.printerval pp_print_bool : bool Format_doc.printerval pp_print_nothing : unit Format_doc.printerPrinter combinators
val pp_print_iter :
?pp_sep:unit Format_doc.printer ->
(('a -> unit) -> 'b -> unit) ->
'a Format_doc.printer ->
'b Format_doc.printerval pp_print_list :
?pp_sep:unit Format_doc.printer ->
'a Format_doc.printer ->
'a list Format_doc.printerval pp_print_array :
?pp_sep:unit Format_doc.printer ->
'a Format_doc.printer ->
'a array Format_doc.printerval pp_print_seq :
?pp_sep:unit Format_doc.printer ->
'a Format_doc.printer ->
'a Stdlib.Seq.t Format_doc.printerval pp_print_option :
?none:unit Format_doc.printer ->
'a Format_doc.printer ->
'a option Format_doc.printerval pp_print_result :
ok:'a Format_doc.printer ->
error:'e Format_doc.printer ->
('a, 'e) Stdlib.result Format_doc.printerval pp_print_either :
left:'a Format_doc.printer ->
right:'b Format_doc.printer ->
('a, 'b) Stdlib.Either.t Format_doc.printerBoxes and tags
val pp_open_stag : Stdlib.Format.stag Format_doc.printerval pp_close_stag : unit Format_doc.printerval pp_open_box : int Format_doc.printerval pp_close_box : unit Format_doc.printerBreak hints
val pp_print_space : unit Format_doc.printerval pp_print_cut : unit Format_doc.printerval pp_print_break : Format_doc.formatter -> int -> int -> unitval pp_print_custom_break :
Format_doc.formatter ->
fits:((string * int * string) as 'c) ->
breaks:'c ->
unitTabulations
val pp_open_tbox : unit Format_doc.printerval pp_close_tbox : unit Format_doc.printerval pp_set_tab : unit Format_doc.printerval pp_print_tab : unit Format_doc.printerval pp_print_tbreak : Format_doc.formatter -> int -> int -> unitNewlines and flushing
val pp_print_if_newline : unit Format_doc.printerval pp_force_newline : unit Format_doc.printerval pp_print_flush : unit Format_doc.printerval pp_print_newline : unit Format_doc.printerCompiler specific functions
Separators
val comma : unit Format_doc.printerval semicolon : unit Format_doc.printerCompiler output
val pp_two_columns :
?sep:string ->
?max_lines:int ->
Format_doc.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