pub fn wrap_columns<'a, Opt>(
text: &str,
columns: usize,
total_width_or_options: Opt,
left_gap: &str,
middle_gap: &str,
right_gap: &str,
) -> Vec<String>Expand description
Wrap text into columns with a given total width.
The left_gap, middle_gap and right_gap arguments specify the
strings to insert before, between, and after the columns. The
total width of all columns and all gaps is specified using the
total_width_or_options argument. This argument can simply be an
integer if you want to use default settings when wrapping, or it
can be a Options value if you want to customize the wrapping.
If the columns are narrow, it is recommended to set
Options::break_words to true to prevent words from
protruding into the margins.
The per-column width is computed like this:
let inner_width = options.width
- textwrap::core::display_width(left_gap)
- textwrap::core::display_width(right_gap)
- textwrap::core::display_width(middle_gap) * (columns - 1);
let column_width = inner_width / columns;The text is wrapped using wrap() and the given options
argument, but the width is overwritten to the computed
column_width.
§Panics
Panics if columns is zero.
§Examples
use textwrap::wrap_columns;
let text = "\
This is an example text, which is wrapped into three columns. \
Notice how the final column can be shorter than the others.";
#[cfg(feature = "smawk")]
assert_eq!(wrap_columns(text, 3, 50, "| ", " | ", " |"),
vec!["| This is | into three | column can be |",
"| an example | columns. | shorter than |",
"| text, which | Notice how | the others. |",
"| is wrapped | the final | |"]);
// Without the `smawk` feature, the middle column is a little more uneven:
#[cfg(not(feature = "smawk"))]
assert_eq!(wrap_columns(text, 3, 50, "| ", " | ", " |"),
vec!["| This is an | three | column can be |",
"| example text, | columns. | shorter than |",
"| which is | Notice how | the others. |",
"| wrapped into | the final | |"]);