package textutils_kernel
Install
Dune Dependency
Authors
Maintainers
Sources
sha256=621e8ecf031ceac0dbb70a5ac4d8ef6add20cf387844402a3fb9e149870ad131
doc/textutils_kernel.text_block/Text_block/index.html
Module Text_block
Source
Two dimensional blocks of text
fill
and space
assume width and height are non-negative
Fill a space with a Unicode character
Vertical and horizontal alignment specifications
A basic block of text, split on newlines and horizontally aligned as specified.
If max_width
is provided, split each line of the input on whitespace and wrap words to respect the request. So long as no words are longer than max_width
, the resulting text block will be no wider than max_width
Like text
, but takes a format string like printf
Text block dimensions
Vertical and horizontal sequence alignment. Both valign
and halign
return a list of the same length as the input, with the corresponding elements padded to the appropriate alignment.
If you have a list of a statically known length, using With_static_lengths.valign
or With_static_lengths.halign
below will let the type checker know that the length of the returned list is equal to the length of the input list.
Empty blocks with either horizontal or vertical extent -- useful for specifying a minimum width or height in conjunction with valign or halign, respectively
Wrap a block with an ANSI escape sequence. The prefix
and suffix
arguments should render with zero width and height.
Alignment of a 2D grid of blocks
val compress_table_header :
?sep_width:int ->
[ `Cols of (t * t list * halign) list ] ->
[ `Header of t ] * [ `Rows of t list ]
Compress table header according to column widths.
Input: a list of columns of the form (title, values, column alignment). Output: one header block and row sequence. Raises: if the values
lists are not the same length in each column. Example:
first name age first name last name age | last name | | | ==> | | | 30 sue smith 30 sue smith 18 bill rodriguez 18 bill rodriguez 76 rick jones 76 rick jones
Combinators for building up cell structures separated by box characters: e.g.
val span_banner :
extend_left:bool ->
extend_right:bool ->
length:int ->
points:Up_or_down.t ->
?label:t ->
unit ->
t
span_banner
produces text blocks that indicate the extent of something else
extend_left | extend_right | | points | | | span_banner ... | | | | span_banner ~label ... | | | | | true true Up ────────── ─┬──────── label true false Up ─────────┘ ─┬───────┘ label false true Up └───────── └┬──────── label false false Up └────────┘ └┬───────┘ label true true Down label ────────── ─┴──────── true false Down label ─────────┐ ─┴───────┐ false true Down label ┌───────── ┌┴──────── false false Down label ┌────────┐ ┌┴───────┐ |}];
sexp sexp_of_a a = sexp_of_a a |> Sexp.to_string |> text
Versions of halign and valign with the invariant about list length encoded into the types.