package b0
Install
dune-project
Dependency
Authors
Maintainers
Sources
sha512=e9aa779e66c08fc763019f16d4706f465d16c05d6400b58fbd0313317ef33ddea51952e2b058db28e65f7ddb7012f328c8bf02d8f1da17bb543348541a2587f0
doc/b0.std/B0_std/Fmt/index.html
Module B0_std.Fmt
Source
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 ->
'b
kpf
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 toone
followed by a's'
character.
val ordinal :
?zero:int t ->
?one:int t ->
?two:int t ->
?three:int t ->
?other:int t ->
unit ->
int t
ordinal ?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"
.other
otherwise. 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_COLOR
environment 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
TERM
environment variable isdumb
. - The
TERM
environment variable is unset andSys.backend_type
is 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
.