A faithful port of OCaml's Format module: pretty-printing boxes, break hints, tabulations, tags and printf-like format strings
let doc = @format.asprintf("@[<hov 2>let x =@ %a@]", [
Print(ppf => ppf.print_list(
pp_sep=ppf => ppf.printf(";@ ", []),
@format.Formatter::print_int,
@list.List([1, 2, 3]),
)),
])| OCaml | MoonBit |
|---|---|
| Format.formatter_of_buffer b | Formatter::of_buffer(b) |
| pp_open_box ppf 2 | ppf.open_box(2) (also open_hbox, open_vbox, open_hvbox, open_hovbox) |
| pp_print_string ppf s, pp_print_as | ppf.print_string(s), ppf.print_as(size, s) |
| pp_print_space ppf (), pp_print_cut, pp_print_break | ppf.print_space(), ppf.print_cut(), ppf.print_break(width, offset) |
| pp_print_custom_break ~fits ~breaks | ppf.print_custom_break(fits~, breaks~) |
| pp_open_tbox, pp_set_tab, pp_print_tab, pp_print_tbreak | ppf.open_tbox(), ppf.set_tab(), ppf.print_tab(), ppf.print_tbreak(width, offset) |
| pp_open_stag, pp_set_mark_tags, ... | ppf.open_stag(StringTag(s)), ppf.set_mark_tags(true), ... |
| pp_set_margin, pp_set_geometry, pp_set_max_boxes, ... | ppf.set_margin(n), ppf.set_geometry(max_indent~, margin~), ... |
| pp_print_list, pp_print_seq, pp_print_text, pp_print_option, pp_print_result | ppf.print_list(...), ppf.print_iter(...), ppf.print_text(s), ... |
| pp_print_flush ppf (), pp_print_newline ppf () | ppf.print_flush(), ppf.print_newline() |
ppf.printf("@[<v 2>%s:@,%5.2f@,%a@]", [
String("total"),
Float(3.14159),
Print(ppf => ppf.print_bool(true)),
])
@format.asprintf("%-8s|%08.3e|%#x", [String("a"), Float(-1.5), Int(255)])@format.check_format("%{%d") // raises Failure("invalid format \"%{%d\": unclosed sub-format, expected \"%}\" at character number 4")pub(all) enum Arg {
Int(Int)
Int32(Int)
Int64(Int64)
Float(Double)
String(String)
Char(Char)
Bool(Bool)
Print((Formatter) -> Unit)
Format(String)
}pub struct Formatter {
// private fields
}fn Formatter::set_geometry(self : Formatter, max_indent~ : Int, margin~ : Int) -> Unit raise InvalidArgumentpub(all) struct OutFunctions {
out_string : (StringView) -> Unit
out_flush : () -> Unit
out_newline : () -> Unit
out_spaces : (Int) -> Unit
out_indent : (Int) -> Unit
}pub struct SymbolicOutputBuffer {
// private fields
}fn char_escaped(c : Char) -> Stringfn format_float_c(x : Double, conv : Char, prec : Int, sign? : Char, alt? : Bool) -> Stringfn hexstring_of_float(x : Double, prec : Int, sign : Char) -> Stringfn string_escaped(s : StringView) -> Stringfn string_of_float(f : Double) -> Stringfn utf8_length(s : StringView) -> IntInstall
Download zipA faithful port of OCaml's Format module: pretty-printing boxes, break hints, tabulations, tags and printf-like format strings