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 an 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 with 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 | |"]);