Function textwrap::fill_inplace
source · [−]Expand description
Fill text
in-place without reallocating the input string.
This function works by modifying the input string: some ' '
characters will be replaced by '\n'
characters. The rest of the
text remains untouched.
Since we can only replace existing whitespace in the input with
'\n'
, we cannot do hyphenation nor can we split words longer
than the line width. We also need to use AsciiSpace
as the word
separator since we need ' '
characters between words in order to
replace some of them with a '\n'
. Indentation is also ruled out.
In other words, fill_inplace(width)
behaves as if you had called
fill
with these options:
Options {
width: width,
initial_indent: "",
subsequent_indent: "",
break_words: false,
word_separator: WordSeparator::AsciiSpace,
wrap_algorithm: WrapAlgorithm::FirstFit,
word_splitter: WordSplitter::NoHyphenation,
};
The wrap algorithm is WrapAlgorithm::FirstFit
since this
is the fastest algorithm — and the main reason to use
fill_inplace
is to get the string broken into newlines as fast
as possible.
A last difference is that (unlike fill
) fill_inplace
can
leave trailing whitespace on lines. This is because we wrap by
inserting a '\n'
at the final whitespace in the input string:
let mut text = String::from("Hello World!");
textwrap::fill_inplace(&mut text, 10);
assert_eq!(text, "Hello \nWorld!");
If we didn’t do this, the word World!
would end up being
indented. You can avoid this if you make sure that your input text
has no double spaces.
Performance
In benchmarks, fill_inplace
is about twice as fast as fill
.
Please see the linear
benchmark
for details.