package b0
Install
dune-project
Dependency
Authors
Maintainers
Sources
sha512=e9aa779e66c08fc763019f16d4706f465d16c05d6400b58fbd0313317ef33ddea51952e2b058db28e65f7ddb7012f328c8bf02d8f1da17bb543348541a2587f0
doc/b0.std/B0_std/Fmt/index.html
Module B0_std.FmtSource
Textual formatters.
Helpers for dealing with Format.
Standard outputs
stdout outputs to standard output.
stderr outputs to standard error.
Formatting
pf is Format.fprintf.
pf is Format.printf.
epr is Format.eprintf.
str is Format.asprintf.
val kpf :
(Format.formatter -> 'a) ->
Format.formatter ->
('b, Format.formatter, unit, 'a) format4 ->
'bkpf is Format.kfprintf.
kstr is Format.kasprintf.
failwith fmt ... is kstr failwith fmt ...
failwith_notrace is like failwith but Failure is raised with raise_notrace.
failwith_line fmt … is failwith ("%d:" ^^ fmt) ….
invalid_arg fmt ... is kstr invalid_arg fmt ...
error fmt ... is kstr (fun s -> Error s) fmt ...
Formatters
The type for formatter of values of type 'a.
flush has the effect of Format.pp_print_flush.
flush_nl has the effect of Format.pp_print_newline.
any fmt formats any value with fmt.
Separators
cut has the effect of Format.pp_print_cut.
sp has the effect of Format.pp_print_space.
sps n has the effect of Format.pp_print_break n 0.
suffix_lines ~suffix pp adds suffix to the lines formatted by pp. Note. Not very compositional: first formats to a string, cuts the string and then formats the lines.
Sequencing
iter ~sep iter pp_elt formats the iterations of iter over a value using pp_elt. Iterations are separated by sep (defaults to cut).
iter_bindings ~sep iter pp_binding formats the iterations of iter over a value using pp_binding. Iterations are separated by sep (defaults to cut).
concat ~sep pps concatenates the formatters pps separating them with sep (defaults to cut).
Boxes
box ~indent pp ppf wraps pp in a horizontal or vertical box. Break hints that lead to a new line add indent to the current indentation (defaults to 0).
hbox is like box but is a horizontal box: the line is not split in this box (but may be in sub-boxes).
vbox is like box but is a vertical box: every break hint leads to a new line which adds indent to the current indentation (default to 0).
hovbox is a condensed box, see Format.pp_open_hovbox.
Brackets
quote ~mark pp_v ppf is pf "@[<1>@<1>%s%a@<1>%s@]" mark pp_v mark, mark defaults to "\"", it is always counted as spanning as single column (this allows for UTF-8 encoded marks).
Records
field ~label ~sep l prj pp_v pretty prints a labelled field value as pf "@[<1>%a%a%a@]" label l sep () (using prj pp_v). label defaults to st [`Yellow] and sep to any ":@ ".
record ~sep fields pretty-prints a value using the concatenation of fields, separated by sep (defaults to cut) and framed in a vertical box.
Stdlib types
Formatters for structures give full control to the client over the formatting process and do not wrap the formatted structures with boxes. If you want to print literal OCaml values use the OCaml module.
bool is Format.pp_print_bool.
int is Format.pp_print_int.
char is Format.pp_print_char.
string is Format.pp_print_string.
binary_string formats strings as ASCII hex. See also Text and lines.
bytes formats bytes as ASCII hex. See also Text and lines.
sys_signal formats an OCaml signal number as a C POSIX constant or "SIG(%d)" if the signal number is unknown.
backtrace formats a backtrace.
exn formats an exception using Printexc.to_string.
exn_backtrace formats an exception backtrace using exn and the format use by the OCaml runtime system.
pair ~sep pp_fst pp_snd formats a pair. The first and second projection are formatted using pp_fst and pp_snd and are separated by sep (defaults to cut).
option ~none pp_v formats an option. The Some case uses pp_v and None uses none (defaults to nop).
either ~left ~right formats an Either.t value. The Left case uses left and the Right cases uses right.
result ~ok ~error formats a result value. The Ok case uses ok and the Error case uses error.
Text and lines
text is Format.pp_print_text. FIXME. replace this by the behaviour of styledtext.
styled_text formats ANSI escape sequences as zero width characters, collapses multiple newlines and spaces to a single Fmt.sp and preserves blank lines and suppresses trailing space and newlines.
lines formats lines by replacing newlines ('\n') in the string with calls to Format.pp_force_newline.
truncated ~max formats a string using at most max characters. If the string doesn't fit, it is truncated and ended with … (U+2026) which does count towards max.
ascii_char prints Char.Ascii.is_print characters and hex escapes for other characters.
ascii_string prints Char.Ascii.is_print characters and hex escapes for other characters.
text_uchar formats an UTF-8 encoded Unicode character or its scalar value in U+%04X representation if u is in C0 control characters (U+0000-U+001F), C1 control characters (U+0080-U+009F), line separator (U+2028), paragraph separator (U+2029), left-to-right mark (U+200E) or right-to-left mark (U+200F).
text_string formats an UTF-8 encoded string but escapes: C0 control characters (U+0000-U+001F), C1 control characters (U+0080-U+009F), line separator (U+2028) and paragraph separator (U+2029). Decoding errors are replaced by literal Uchar.rep characters.
styled_text_string is like text_string but ANSI escape sequences are detected and output as zero width strings.
text_bytes is like text_string but on bytes values.
FIXME. Get rid of these in favour of OCaml
ascii_string_literal is like ascii_string but between double quotes '\"'. Double quotes are also escaped and CR an LF are escaped by '\r' and '\n'. The result is a valid, single line, OCaml string.
text_string_literal is like text_string but between double quotes '\"'. Double quotes are also escaped an CR and LF are escaped by '\r' and '\n'. The result is a valid, single line, OCaml string.
styled_text_string_literal combines text_string_literal and styled_text_string.
Magnitudes
si_size ~scale unit formats a non negative integer representing unit unit at scale 10scale * 3, depending on its magnitude, using power of 3 SI prefixes (i.e. all of them except deca, hector, deci and centi). The output is UTF-8 encoded, it uses U+03BC for µ (10-6).
scale indicates the scale 10scale * 3 an integer represents, for example -1 for munit (10-3), 0 for unit (100), 1 for kunit (103); it must be in the range [-8;8] or Invalid_argument is raised.
Except at the maximal yotta scale always tries to show three digits of data with trailing fractional zeros omited. Rounds towards positive infinity (over approximates).
uint64_ns_span formats an unsigned nanosecond time span according to its magnitude using SI prefixes on seconds and non-SI units. Years are counted in Julian years (365.25 SI-accepted days) as defined by the International Astronomical Union.
Rounds towards positive infinity, i.e. over approximates, no duration is formatted shorter than it is.
The output is UTF-8 encoded, it uses U+03BC for µs (10-6s).
HCI fragments
and_enum ~empty pp_v ppf l formats l according to its length.
0, formatsempty(defaults tonop).1, formats the element withpp_v.2, formats"%a and %a"with the list elementsn, formats"%a, ... and %a"with the list elements
or_enum is like and_enum but uses "or" instead of "and".
unknown ~kind pp_v formats "Unknown %a %a." kind () pp_v.
unknown ~kind pp_v ~hint (v, hints) formats unknown followed by a space and hint pp_v hints if hints is non-empty.
cardinal ?zero ~one ?other () formats an integer by selecting a formatter according to the cardinal english plural form of its absolute value n:
zero, ifn = 0. Defaults toother(as per english rules).one, ifn = 1.other, otherwise. Defaults toonefollowed by a's'character.
val ordinal :
?zero:int t ->
?one:int t ->
?two:int t ->
?three:int t ->
?other:int t ->
unit ->
int tordinal ?zero ?one ?two ?three ?other () formats an integer by selecting a formatter according to the ordinal english plural form of its absolute value n:
zero, ifn = 0. Defaults toother(as per english rules).one, ifn mod 10 = 1 && n mod 100 <> 11. Defaults to"%dst".two, ifn mod 10 = 2 && n mod 100 <> 12. Defaults to"%dnd".three, ifn mod 10 = 3 && n mod 100 <> 13. Defaults to"%drd".otherotherwise. Defaults to"%dth".
Text styling
Text styling control happens via ANSI escape sequences and is handled globally. See the cookbook for more information.
The kind of styler.
set_styler styler sets the global styler to styler.
Use B0_std_cli.set_no_color to set this from the command line.
styler is the global styler. The initial value is Ansi or Plain if one of the following conditions is satisified:
- The
NO_COLORenvironment variable is set and different from the empty string. Yes, even if you haveNO_COLOR=0, that's what the dumb https://no-color.org standard says. - The
TERMenvironment variable isdumb. - The
TERMenvironment variable is unset andSys.backend_typeis notOther "js_of_ocaml"(browser consoles support ANSI escapes).
strip_styles ppf, this overrides the formatter's out_string function to strip out styling information. See also String.strip_ansi_escapes.
Note. This assumes ppf is not used to write data that uses raw U+001B characters.
type color = [ | `Default| `Black(* *)| `Black_bright(* *)| `Red(* *)| `Red_bright(* *)| `Green(* *)| `Green_bright(* *)| `Yellow(* *)| `Yellow_bright(* *)| `Blue(* *)| `Blue_bright(* *)| `Magenta(* *)| `Magenta_bright(* *)| `Cyan(* *)| `Cyan_bright(* *)| `White(* *)| `White_bright(* *)
]The type for colors.
Note. The actual color may differ in terminals. See for example the table here and check out the output of the b0-sttyle tool.
type style = [ | `Bold| `Faint| `Italic| `Underline| `Blink of [ `Slow | `Rapid ]| `Reverse| `Fg of color| `Bg of color
]The type for text styles.
st' styles pp_v ppf v formats v with pp_v on ppf styled by styles.