Module Format_doc
: sigend
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.
moduleDoc:sigend
Definitions and immutable API for composing documents
CompatibilityAPI
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.
typedoc = Doc.ttypet = doctypeformattertype'aprinter = formatter->'a->unitvalformatter : docref->formatterformatterrdoc creates a Format_doc.formatter that updates the rdoc reference
type'aformat_printer = Format.formatter->'a->unit
Translate a Format_doc printer to a Format one.
valcompat : 'aprinter->'aformat_printervalcompat1 : ('p1->'aprinter)->'p1->'aformat_printervalcompat2 : ('p1->'p2->'aprinter)->'p1->'p2->'aformat_printervaldeprecated_printer : (Format.formatter->unit)->formatter->unit
If necessary, embbed a Format printer inside a formatting instruction stream. This breaks every
guarantees provided by Format_doc .
valdeprecated : 'aformat_printer->'aprintervaldeprecated1 : ('p1->'aformat_printer)->'p1->'aprinterFormatstringinterpretersvalfprintf : formatter->('a,formatter,unit)format->'avalkfprintf : (formatter->'a)->formatter->('b,formatter,unit,'a)format4->'bvalasprintf : ('a,formatter,unit,string)format4->'avalkasprintf : (string->'a)->('b,formatter,unit,'a)format4->'bvaldprintf : ('a,formatter,unit,formatter->unit)format4->'avalkdprintf : ((formatter->unit)->'a)->('b,formatter,unit,'a)format4->'bvaldoc_printf : ('a,formatter,unit,doc)format4->'aFormat_doc.doc_printf and Format_doc.kdoc_printf creates a document directly
valkdoc_printf : (doc->'r)->('a,formatter,unit,'r)format4->'aCompatibilitywithFormat_doc.Docvaldoc_printer : 'aprinter->'aDoc.printervalpp_doc : docprinterSourcecompatibilitywithFormatStringprintersvalpp_print_string : stringprintervalpp_print_substring : pos:int->len:int->stringprintervalpp_print_text : stringprintervalpp_print_bytes : bytesprintervalpp_print_as : formatter->int->string->unitvalpp_print_substring_as : pos:int->len:int->formatter->int->string->unitPrimitivetypeprintersvalpp_print_char : charprintervalpp_print_int : intprintervalpp_print_float : floatprintervalpp_print_bool : boolprintervalpp_print_nothing : unitprinterPrintercombinatorsvalpp_print_iter : ?pp_sep:unitprinter->(('a->unit)->'b->unit)->'aprinter->'bprintervalpp_print_list : ?pp_sep:unitprinter->'aprinter->'alistprintervalpp_print_array : ?pp_sep:unitprinter->'aprinter->'aarrayprintervalpp_print_seq : ?pp_sep:unitprinter->'aprinter->'aSeq.tprintervalpp_print_option : ?none:unitprinter->'aprinter->'aoptionprintervalpp_print_result : ok:'aprinter->error:'eprinter->('a,'e)resultprintervalpp_print_either : left:'aprinter->right:'bprinter->('a,'b)Either.tprinterBoxesandtagsvalpp_open_stag : Format.stagprintervalpp_close_stag : unitprintervalpp_open_box : intprintervalpp_close_box : unitprinterBreakhintsvalpp_print_space : unitprintervalpp_print_cut : unitprintervalpp_print_break : formatter->int->int->unitvalpp_print_custom_break : formatter->fits:string*int*string->breaks:string*int*string->unitTabulationsvalpp_open_tbox : unitprintervalpp_close_tbox : unitprintervalpp_set_tab : unitprintervalpp_print_tab : unitprintervalpp_print_tbreak : formatter->int->int->unitNewlinesandflushingvalpp_print_if_newline : unitprintervalpp_force_newline : unitprintervalpp_print_flush : unitprintervalpp_print_newline : unitprinterCompilerspecificfunctionsSeparatorsvalcomma : unitprinterCompileroutputvalpp_two_columns : ?sep:string->?max_lines:int->formatter->(string*string)list->unitpp_two_columns?sep?max_linesppfl 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
OCamldoc 2025-06-12 Format_doc(3o)