Module CCFormat

Helpers for Format

type 'a sequence = ('a ‑> unit) ‑> unit
include module type of sig ... end
val open_box : int ‑> unit
val close_box : unit ‑> unit
val print_string : string ‑> unit
val print_as : int ‑> string ‑> unit
val print_int : int ‑> unit
val print_float : float ‑> unit
val print_char : char ‑> unit
val print_bool : bool ‑> unit
val print_space : unit ‑> unit
val print_cut : unit ‑> unit
val print_break : int ‑> int ‑> unit
val print_flush : unit ‑> unit
val print_newline : unit ‑> unit
val force_newline : unit ‑> unit
val print_if_newline : unit ‑> unit
val set_margin : int ‑> unit
val get_margin : unit ‑> int
val set_max_indent : int ‑> unit
val get_max_indent : unit ‑> int
val set_max_boxes : int ‑> unit
val get_max_boxes : unit ‑> int
val over_max_boxes : unit ‑> bool
val open_hbox : unit ‑> unit
val open_vbox : int ‑> unit
val open_hvbox : int ‑> unit
val open_hovbox : int ‑> unit
val set_ellipsis_text : string ‑> unit
val get_ellipsis_text : unit ‑> string
type tag = string
val open_tag : tag ‑> unit
val close_tag : unit ‑> unit
val set_tags : bool ‑> unit
val set_print_tags : bool ‑> unit
val set_mark_tags : bool ‑> unit
val get_print_tags : unit ‑> bool
val get_mark_tags : unit ‑> bool
val set_formatter_out_channel : Pervasives.out_channel ‑> unit
val set_formatter_output_functions : (string ‑> int ‑> int ‑> unit) ‑> (unit ‑> unit) ‑> unit
val get_formatter_output_functions : unit ‑> (string ‑> int ‑> int ‑> unit) * (unit ‑> unit)
type formatter_out_functions = Format.formatter_out_functions = {
out_string : string ‑> int ‑> int ‑> unit;
out_flush : unit ‑> unit;
out_newline : unit ‑> unit;
out_spaces : int ‑> unit;
}
val set_formatter_out_functions : formatter_out_functions ‑> unit
val get_formatter_out_functions : unit ‑> formatter_out_functions
type formatter_tag_functions = Format.formatter_tag_functions = {
mark_open_tag : tag ‑> string;
mark_close_tag : tag ‑> string;
print_open_tag : tag ‑> unit;
print_close_tag : tag ‑> unit;
}
val set_formatter_tag_functions : formatter_tag_functions ‑> unit
val get_formatter_tag_functions : unit ‑> formatter_tag_functions
type formatter = Format.formatter
val formatter_of_out_channel : Pervasives.out_channel ‑> formatter
val std_formatter : formatter
val err_formatter : formatter
val formatter_of_buffer : Buffer.t ‑> formatter
val stdbuf : Buffer.t
val str_formatter : formatter
val flush_str_formatter : unit ‑> string
val make_formatter : (string ‑> int ‑> int ‑> unit) ‑> (unit ‑> unit) ‑> formatter
val pp_open_hbox : formatter ‑> unit ‑> unit
val pp_open_vbox : formatter ‑> int ‑> unit
val pp_open_hvbox : formatter ‑> int ‑> unit
val pp_open_hovbox : formatter ‑> int ‑> unit
val pp_open_box : formatter ‑> int ‑> unit
val pp_close_box : formatter ‑> unit ‑> unit
val pp_open_tag : formatter ‑> string ‑> unit
val pp_close_tag : formatter ‑> unit ‑> unit
val pp_print_string : formatter ‑> string ‑> unit
val pp_print_as : formatter ‑> int ‑> string ‑> unit
val pp_print_int : formatter ‑> int ‑> unit
val pp_print_float : formatter ‑> float ‑> unit
val pp_print_char : formatter ‑> char ‑> unit
val pp_print_bool : formatter ‑> bool ‑> unit
val pp_print_break : formatter ‑> int ‑> int ‑> unit
val pp_print_cut : formatter ‑> unit ‑> unit
val pp_print_space : formatter ‑> unit ‑> unit
val pp_force_newline : formatter ‑> unit ‑> unit
val pp_print_flush : formatter ‑> unit ‑> unit
val pp_print_newline : formatter ‑> unit ‑> unit
val pp_print_if_newline : formatter ‑> unit ‑> unit
val pp_set_tags : formatter ‑> bool ‑> unit
val pp_set_print_tags : formatter ‑> bool ‑> unit
val pp_set_mark_tags : formatter ‑> bool ‑> unit
val pp_get_print_tags : formatter ‑> unit ‑> bool
val pp_get_mark_tags : formatter ‑> unit ‑> bool
val pp_set_margin : formatter ‑> int ‑> unit
val pp_get_margin : formatter ‑> unit ‑> int
val pp_set_max_indent : formatter ‑> int ‑> unit
val pp_get_max_indent : formatter ‑> unit ‑> int
val pp_set_max_boxes : formatter ‑> int ‑> unit
val pp_get_max_boxes : formatter ‑> unit ‑> int
val pp_over_max_boxes : formatter ‑> unit ‑> bool
val pp_set_ellipsis_text : formatter ‑> string ‑> unit
val pp_get_ellipsis_text : formatter ‑> unit ‑> string
val pp_set_formatter_out_channel : formatter ‑> Pervasives.out_channel ‑> unit
val pp_set_formatter_output_functions : formatter ‑> (string ‑> int ‑> int ‑> unit) ‑> (unit ‑> unit) ‑> unit
val pp_get_formatter_output_functions : formatter ‑> unit ‑> (string ‑> int ‑> int ‑> unit) * (unit ‑> unit)
val pp_set_formatter_tag_functions : formatter ‑> formatter_tag_functions ‑> unit
val pp_get_formatter_tag_functions : formatter ‑> unit ‑> formatter_tag_functions
val pp_set_formatter_out_functions : formatter ‑> formatter_out_functions ‑> unit
val pp_get_formatter_out_functions : formatter ‑> unit ‑> formatter_out_functions
val pp_flush_formatter : formatter ‑> unit
val pp_print_list : ?⁠pp_sep:(formatter ‑> unit ‑> unit) ‑> (formatter ‑> 'a ‑> unit) ‑> formatter ‑> 'a list ‑> unit
val pp_print_text : formatter ‑> string ‑> unit
val fprintf : formatter ‑> ('aformatter, unit) Pervasives.format ‑> 'a
val printf : ('aformatter, unit) Pervasives.format ‑> 'a
val eprintf : ('aformatter, unit) Pervasives.format ‑> 'a
val sprintf : ('a, unit, string) Pervasives.format ‑> 'a
val asprintf : ('aformatter, unit, string) Pervasives.format4 ‑> 'a
val ifprintf : formatter ‑> ('aformatter, unit) Pervasives.format ‑> 'a
val kfprintf : (formatter ‑> 'a) ‑> formatter ‑> ('bformatter, unit, 'a) Pervasives.format4 ‑> 'b
val ikfprintf : (formatter ‑> 'a) ‑> formatter ‑> ('bformatter, unit, 'a) Pervasives.format4 ‑> 'b
val ksprintf : (string ‑> 'a) ‑> ('b, unit, string, 'a) Pervasives.format4 ‑> 'b
val kasprintf : (string ‑> 'a) ‑> ('bformatter, unit, 'a) Pervasives.format4 ‑> 'b
val bprintf : Buffer.t ‑> ('aformatter, unit) Pervasives.format ‑> 'a
val kprintf : (string ‑> 'a) ‑> ('b, unit, string, 'a) Pervasives.format4 ‑> 'b
  • Deprecated Use Format.ksprintf instead.
val set_all_formatter_output_functions : out:(string ‑> int ‑> int ‑> unit) ‑> flush:(unit ‑> unit) ‑> newline:(unit ‑> unit) ‑> spaces:(int ‑> unit) ‑> unit
  • Deprecated Use Format.set_formatter_out_functions instead.
val get_all_formatter_output_functions : unit ‑> (string ‑> int ‑> int ‑> unit) * (unit ‑> unit) * (unit ‑> unit) * (int ‑> unit)
  • Deprecated Use Format.get_formatter_out_functions instead.
val pp_set_all_formatter_output_functions : formatter ‑> out:(string ‑> int ‑> int ‑> unit) ‑> flush:(unit ‑> unit) ‑> newline:(unit ‑> unit) ‑> spaces:(int ‑> unit) ‑> unit
  • Deprecated Use Format.pp_set_formatter_out_functions instead.
val pp_get_all_formatter_output_functions : formatter ‑> unit ‑> (string ‑> int ‑> int ‑> unit) * (unit ‑> unit) * (unit ‑> unit) * (int ‑> unit)
  • Deprecated Use Format.pp_get_formatter_out_functions instead.
val pp_open_tbox : formatter ‑> unit ‑> unit
  • Deprecated Tabulation boxes are not supported any more.
val pp_close_tbox : formatter ‑> unit ‑> unit
  • Deprecated Tabulation boxes are not supported any more.
val pp_print_tbreak : formatter ‑> int ‑> int ‑> unit
  • Deprecated Tabulation boxes are not supported any more.
val pp_set_tab : formatter ‑> unit ‑> unit
  • Deprecated Tabulation boxes are not supported any more.
val pp_print_tab : formatter ‑> unit ‑> unit
  • Deprecated Tabulation boxes are not supported any more.
val open_tbox : unit ‑> unit
  • Deprecated Tabulation boxes are not supported any more.
val close_tbox : unit ‑> unit
  • Deprecated Tabulation boxes are not supported any more.
val print_tbreak : int ‑> int ‑> unit
  • Deprecated Tabulation boxes are not supported any more.
val set_tab : unit ‑> unit
  • Deprecated Tabulation boxes are not supported any more.
val print_tab : unit ‑> unit
  • Deprecated Tabulation boxes are not supported any more.
type t = Format.formatter
type 'a printer = t ‑> 'a ‑> unit

Combinators

val silent : 'a printer

Prints nothing

val unit : unit printer

Prints "()".

val int : int printer
val string : string printer
val bool : bool printer
val float3 : float printer
val float : float printer
val newline : unit printer

Force newline (see Format.pp_force_newline).

val substring : (string * int * int) printer

Print the substring (s,i,len), where i is the offset in s and len the number of bytes in the substring.

val text : string printer

Print string, but replacing spaces with breaks and newlines with newline. See pp_print_text on recent versions of OCaml.

val char : char printer
val int32 : int32 printer
val int64 : int64 printer
val nativeint : nativeint printer
val flush : unit printer

Alias to Format.pp_print_flush.

val string_quoted : string printer

Similar to CCString.print.

val list : ?⁠sep:unit printer ‑> 'a printer ‑> 'a list printer
val array : ?⁠sep:unit printer ‑> 'a printer ‑> 'a array printer
val arrayi : ?⁠sep:unit printer ‑> (int * 'a) printer ‑> 'a array printer
val seq : ?⁠sep:unit printer ‑> 'a printer ‑> 'a sequence printer
val opt : 'a printer ‑> 'a option printer

opt pp prints options as follows: Some x will become "some foo" if pp x ---> "foo". None will become "none".

In the tuple printers, the sep argument is only available.

val pair : ?⁠sep:unit printer ‑> 'a printer ‑> 'b printer ‑> ('a * 'b) printer
val triple : ?⁠sep:unit printer ‑> 'a printer ‑> 'b printer ‑> 'c printer ‑> ('a * 'b * 'c) printer
val quad : ?⁠sep:unit printer ‑> 'a printer ‑> 'b printer ‑> 'c printer ‑> 'd printer ‑> ('a * 'b * 'c * 'd) printer
val within : string ‑> string ‑> 'a printer ‑> 'a printer

within a b p wraps p inside the strings a and b. Convenient, for instances, for brackets, parenthesis, quotes, etc.

val map : ('a ‑> 'b) ‑> 'b printer ‑> 'a printer
val vbox : ?⁠i:int ‑> 'a printer ‑> 'a printer

Wrap the printer in a vertical box.

val hvbox : ?⁠i:int ‑> 'a printer ‑> 'a printer

Wrap the printer in a horizontal/vertical box.

val hovbox : ?⁠i:int ‑> 'a printer ‑> 'a printer

Wrap the printer in a horizontal or vertical box.

val hbox : 'a printer ‑> 'a printer

Wrap the printer in an horizontal box.

val return : ('a__'a) Pervasives.format4 ‑> unit printer

return "some_format_string" takes a argument-less format string and returns a printer actionable by (). Examples:

val of_to_string : ('a ‑> string) ‑> 'a printer

of_to_string f converts its input to a string using f, then prints the string.

val const : 'a printer ‑> 'a ‑> unit printer

const pp x is a unit printer that uses pp on x.

val some : 'a printer ‑> 'a option printer

some pp will print options as follows:

val lazy_force : 'a printer ‑> 'a lazy_t printer

lazy_force pp out x forces x and prints the result with pp

val lazy_or : ?⁠default:unit printer ‑> 'a printer ‑> 'a lazy_t printer

lazy_or ?default pp out x prints default if x is not evaluated yet, or uses pp otherwise

ANSI codes

Use ANSI escape codes https://en.wikipedia.org/wiki/ANSI_escape_code to put some colors on the terminal.

This uses tags in format strings to specify the style. Current styles are the following:

Example:

      set_color_default true;;

      Format.printf
        "what is your @{<White>favorite color@}? @{<blue>blue@}! No, @{<red>red@}! Ahhhhhhh@.";;

status: unstable

val set_color_tag_handling : t ‑> unit

Add functions to support color tags to the given formatter.

val set_color_default : bool ‑> unit

set_color_default b enables color handling on the standard formatters (stdout, stderr) if b = true as well as on sprintf formatters; it disables the color handling if b = false.

val with_color : string ‑> 'a printer ‑> 'a printer

with_color "Blue" pp behaves like the printer pp, but with the given style. status: unstable

val with_colorf : string ‑> t ‑> ('at, unit, unit) Pervasives.format4 ‑> 'a

with_colorf "Blue" out "%s %d" "yolo" 42 will behave like Format.fprintf, but wrapping the content with the given style. status: unstable

val with_color_sf : string ‑> ('at, unit, string) Pervasives.format4 ‑> 'a

with_color_sf "Blue" out "%s %d" "yolo" 42 will behave like sprintf, but wrapping the content with the given style. Example:

      CCFormat.with_color_sf "red" "%a" CCFormat.Dump.(list int) [1;2;3] |> print_endline;;

status: unstable

val with_color_ksf : f:(string ‑> 'b) ‑> string ‑> ('at, unit, 'b) Pervasives.format4 ‑> 'a

with_color_ksf "Blue" ~f "%s %d" "yolo" 42 will behave like ksprintf, but wrapping the content with the given style. Example: the following with raise Failure with a colored message

      CCFormat.with_color_ksf "red" ~f:failwith "%a" CCFormat.Dump.(list int) [1;2;3];;

IO

val output : t ‑> 'a printer ‑> 'a ‑> unit
val to_string : 'a printer ‑> 'a ‑> string
val of_chan : Pervasives.out_channel ‑> t

Alias to Format.formatter_of_out_channel.

val with_out_chan : Pervasives.out_channel ‑> (t ‑> 'a) ‑> 'a

with_out_chan oc f turns oc into a formatter fmt, and call f fmt. Behaves like f fmt from then on, but whether the call to f fails or returns, fmt is flushed before the call terminates.

val stdout : t
val stderr : t
val tee : t ‑> t ‑> t

tee a b makes a new formatter that writes in both a and b.

val sprintf : ('at, unit, string) Pervasives.format4 ‑> 'a

Print into a string any format string that would usually be compatible with fprintf. Similar to Format.asprintf.

val sprintf_no_color : ('at, unit, string) Pervasives.format4 ‑> 'a

Similar to sprintf but never prints colors.

val sprintf_dyn_color : colors:bool ‑> ('at, unit, string) Pervasives.format4 ‑> 'a

Similar to sprintf but enable/disable colors depending on colors. Example:

      (* with colors *)
      CCFormat.sprintf_dyn_color ~colors:true "@{<Red>%a@}"
        CCFormat.Dump.(list int) [1;2;3] |> print_endline;;

      (* without colors *)
      CCFormat.sprintf_dyn_color ~colors:false "@{<Red>%a@}"
        CCFormat.Dump.(list int) [1;2;3] |> print_endline;;
val fprintf : t ‑> ('at, unit) Pervasives.format ‑> 'a

Alias to Format.fprintf.

val fprintf_dyn_color : colors:bool ‑> t ‑> ('at, unit) Pervasives.format ‑> 'a

Similar to fprintf but enable/disable colors depending on colors.

val ksprintf : f:(string ‑> 'b) ‑> ('a, Format.formatter, unit, 'b) Pervasives.format4 ‑> 'a

ksprintf fmt ~f formats using fmt, in a way similar to sprintf, and then calls f on the resulting string.

val to_file : string ‑> ('at, unit, unit) Pervasives.format4 ‑> 'a

Print to the given file.

Dump

Print structures as OCaml values, so that they can be parsed back by OCaml (typically, in the toplevel, for debugging).

Example:

      Format.printf "%a@." CCFormat.Dump.(list int) CCList.(1 -- 200);;

      Format.printf "%a@." CCFormat.Dump.(array (list (pair int bool)))
        [| [1, true; 2, false]; []; [42, false] |];;
module Dump : sig ... end