Struct textwrap::Wrapper
[−]
[src]
pub struct Wrapper<'a, S: WordSplitter> {
pub width: usize,
pub initial_indent: &'a str,
pub subsequent_indent: &'a str,
pub break_words: bool,
pub splitter: S,
}A Wrapper holds settings for wrapping and filling text. Use it
when the convenience wrap_iter, wrap and fill functions
are not flexible enough.
The algorithm used by the WrapIter iterator (returned from the
wrap_iter method) works by doing successive partial scans over
words in the input string (where each single scan yields a single
line) so that the overall time and memory complexity is O(n) where
n is the length of the input string.
Fields
width: usize
The width in columns at which the text will be wrapped.
initial_indent: &'a str
Indentation used for the first line of output.
subsequent_indent: &'a str
Indentation used for subsequent lines of output.
break_words: bool
Allow long words to be broken if they cannot fit on a line.
When set to false, some lines may be longer than
self.width.
splitter: S
The method for splitting words. If the hyphenation feature
is enabled, you can use a hyphenation::language::Corpus here
to get language-aware hyphenation.
Methods
impl<'a> Wrapper<'a, HyphenSplitter>[src]
pub fn new(width: usize) -> Wrapper<'a, HyphenSplitter>[src]
Create a new Wrapper for wrapping at the specified width. By
default, we allow words longer than width to be broken. A
HyphenSplitter will be used by default for splitting
words. See the WordSplitter trait for other options.
impl<'w, 'a: 'w, S: WordSplitter> Wrapper<'a, S>[src]
pub fn with_splitter(width: usize, splitter: S) -> Wrapper<'a, S>[src]
Use the given WordSplitter to create a new Wrapper for
wrapping at the specified width. By default, we allow words
longer than width to be broken.
pub fn initial_indent(self, indent: &'a str) -> Wrapper<'a, S>[src]
Change self.initial_indent. The initial indentation is
used on the very first line of output.
Examples
Classic paragraph indentation can be achieved by specifying an initial indentation and wrapping each paragraph by itself:
use textwrap::Wrapper; let wrapper = Wrapper::new(15).initial_indent(" ");
pub fn subsequent_indent(self, indent: &'a str) -> Wrapper<'a, S>[src]
Change self.subsequent_indent. The subsequent indentation
is used on lines following the first line of output.
Examples
Combining initial and subsequent indentation lets you format a single paragraph as a bullet list:
use textwrap::Wrapper; let wrapper = Wrapper::new(15) .initial_indent("* ") .subsequent_indent(" ");
pub fn break_words(self, setting: bool) -> Wrapper<'a, S>[src]
Change self.break_words. This controls if words longer
than self.width can be broken, or if they will be left
sticking out into the right margin.
pub fn fill(&self, s: &str) -> String[src]
Fill a line of text at self.width characters. Strings are
wrapped based on their displayed width, not their size in
bytes.
The result is a string with newlines between each line. Use
the wrap method if you need access to the individual lines.
Complexities
This method simply joins the lines produced by wrap_iter. As
such, it inherits the O(n) time and memory complexity where
n is the input string length.
Examples
use textwrap::Wrapper; let wrapper = Wrapper::new(15); assert_eq!(wrapper.fill("Memory safety without garbage collection."), "Memory safety\nwithout garbage\ncollection.");
pub fn wrap(&self, s: &'a str) -> Vec<Cow<'a, str>>[src]
Wrap a line of text at self.width characters. Strings are
wrapped based on their displayed width, not their size in
bytes.
Complexities
This method simply collects the lines produced by wrap_iter.
As such, it inherits the O(n) overall time and memory
complexity where n is the input string length.
Examples
use textwrap::Wrapper; let wrap15 = Wrapper::new(15); assert_eq!(wrap15.wrap("Concurrency without data races."), vec!["Concurrency", "without data", "races."]); let wrap20 = Wrapper::new(20); assert_eq!(wrap20.wrap("Concurrency without data races."), vec!["Concurrency without", "data races."]);
ⓘImportant traits for WrapIter<'w, 'a, S>pub fn wrap_iter(&'w self, s: &'a str) -> WrapIter<'w, 'a, S>[src]
Lazily wrap a line of text at self.width characters. Strings
are wrapped based on their displayed width, not their size in
bytes.
The WordSplitter stored in self.splitter is used
whenever when a word is too large to fit on the current line.
By changing the field, different hyphenation strategies can be
implemented.
Complexities
This method returns a WrapIter iterator which borrows this
Wrapper. The algorithm used has a linear complexity, so
getting the next line from the iterator will take O(w) time,
where w is the wrapping width. Fully processing the iterator
will take O(n) time for an input string of length n.
When no indentation is used, each line returned is a slice of the input string and the memory overhead is thus constant. Otherwise new memory is allocated for each line returned.
Examples
use std::borrow::Cow; use textwrap::Wrapper; let wrap20 = Wrapper::new(20); let mut wrap20_iter = wrap20.wrap_iter("Zero-cost abstractions."); assert_eq!(wrap20_iter.next(), Some(Cow::from("Zero-cost"))); assert_eq!(wrap20_iter.next(), Some(Cow::from("abstractions."))); assert_eq!(wrap20_iter.next(), None); let wrap25 = Wrapper::new(25); let mut wrap25_iter = wrap25.wrap_iter("Zero-cost abstractions."); assert_eq!(wrap25_iter.next(), Some(Cow::from("Zero-cost abstractions."))); assert_eq!(wrap25_iter.next(), None);
ⓘImportant traits for IntoWrapIter<'a, S>pub fn into_wrap_iter(self, s: &'a str) -> IntoWrapIter<'a, S>[src]
Lazily wrap a line of text at self.width characters. Strings
are wrapped based on their displayed width, not their size in
bytes.
The WordSplitter stored in self.splitter is used
whenever when a word is too large to fit on the current line.
By changing the field, different hyphenation strategies can be
implemented.
Complexities
This method consumes the Wrapper and returns a
IntoWrapIter iterator. Fully processing the iterator has
the same O(n) time complexity as wrap_iter, where n is
the length of the input string.
Examples
use std::borrow::Cow; use textwrap::Wrapper; let wrap20 = Wrapper::new(20); let mut wrap20_iter = wrap20.into_wrap_iter("Zero-cost abstractions."); assert_eq!(wrap20_iter.next(), Some(Cow::from("Zero-cost"))); assert_eq!(wrap20_iter.next(), Some(Cow::from("abstractions."))); assert_eq!(wrap20_iter.next(), None);
Trait Implementations
impl<'a, S: Clone + WordSplitter> Clone for Wrapper<'a, S>[src]
fn clone(&self) -> Wrapper<'a, S>[src]
Returns a copy of the value. Read more
fn clone_from(&mut self, source: &Self)1.0.0[src]
Performs copy-assignment from source. Read more