• Home
  • Raw
  • Download

Lines Matching full:options

29 //! use textwrap::{wrap, Options, WordSplitter};
33 //! let options = Options::new(18).word_splitter(WordSplitter::Hyphenation(dictionary));
34 //! assert_eq!(wrap(text, &options),
182 //! [`Options::with_termwidth`] constructor for details.
231 /// Holds configuration options for wrapping and filling text.
234 pub struct Options<'a> { struct
240 /// [`Options::initial_indent`] method. argument
243 /// [`Options::subsequent_indent`] method. argument
247 /// `self.width`. See the [`Options::break_words`] method. argument
262 impl<'a> From<&'a Options<'a>> for Options<'a> { argument
263 fn from(options: &'a Options<'a>) -> Self { in from()
265 width: options.width, in from()
266 line_ending: options.line_ending, in from()
267 initial_indent: options.initial_indent, in from()
268 subsequent_indent: options.subsequent_indent, in from()
269 break_words: options.break_words, in from()
270 word_separator: options.word_separator, in from()
271 wrap_algorithm: options.wrap_algorithm, in from()
272 word_splitter: options.word_splitter.clone(), in from()
277 impl<'a> From<usize> for Options<'a> { implementation
279 Options::new(width) in from()
283 impl<'a> Options<'a> { impl
284 /// Creates a new [`Options`] with the specified width.
289 /// # use textwrap::{LineEnding, Options, WordSplitter, WordSeparator, WrapAlgorithm};
291 /// let options = Options::new(width);
292 /// assert_eq!(options.line_ending, LineEnding::LF);
293 /// assert_eq!(options.initial_indent, "");
294 /// assert_eq!(options.subsequent_indent, "");
295 /// assert_eq!(options.break_words, true);
298 /// assert_eq!(options.word_separator, WordSeparator::UnicodeBreakProperties);
300 /// assert_eq!(options.word_separator, WordSeparator::AsciiSpace);
303 /// assert_eq!(options.wrap_algorithm, WrapAlgorithm::new_optimal_fit());
305 /// assert_eq!(options.wrap_algorithm, WrapAlgorithm::FirstFit);
307 /// assert_eq!(options.word_splitter, WordSplitter::HyphenSplitter);
314 Options { in new()
326 /// Creates a new [`Options`] with `width` set to the current
331 /// [`Options::new`].
336 /// use textwrap::{termwidth, Options};
338 /// let options = Options::new(termwidth());
355 /// use textwrap::{refill, LineEnding, Options};
357 /// let options = Options::new(15).line_ending(LineEnding::CRLF);
358 /// assert_eq!(refill("This is a little example.", options),
364 Options { in line_ending()
379 /// use textwrap::{wrap, Options};
381 /// let options = Options::new(16).initial_indent(" ");
382 /// assert_eq!(wrap("This is a little example.", options),
389 Options { in initial_indent()
404 /// use textwrap::{wrap, Options};
406 /// let options = Options::new(12)
410 /// assert_eq!(wrap("This is a little example.", options),
417 /// assert_eq!(wrap("This is a little example.", options),
425 Options { in subsequent_indent()
435 /// See [`Options::word_splitter`] instead if you want to control
441 /// use textwrap::{wrap, Options};
443 /// let options = Options::new(4).break_words(true);
444 /// assert_eq!(wrap("This is a little example.", options),
455 Options { in break_words()
466 pub fn word_separator(self, word_separator: WordSeparator) -> Options<'a> { in word_separator()
467 Options { in word_separator()
485 pub fn wrap_algorithm(self, wrap_algorithm: WrapAlgorithm) -> Options<'a> { in wrap_algorithm()
486 Options { in wrap_algorithm()
502 /// See [`Options::break_words`] instead if you want to control the
508 /// use textwrap::{wrap, Options, WordSplitter};
511 /// let options = Options::new(5);
512 /// assert_eq!(wrap("foo-bar-baz", &options),
516 /// let options = Options::new(5)
518 /// assert_eq!(wrap("foo-bar-baz", &options),
522 /// let options = Options::new(5)
525 /// assert_eq!(wrap("foo-bar-baz", &options),
530 pub fn word_splitter(self, word_splitter: WordSplitter) -> Options<'a> { in word_splitter()
531 Options { in word_splitter()
552 /// Create an [`Options`] for wrapping at the current terminal width
556 /// use textwrap::{termwidth, Options};
559 /// let options = Options::new(width)
589 /// If you need to customize the wrapping, you can pass an [`Options`]
593 /// use textwrap::{fill, Options};
595 /// let options = Options::new(15)
599 /// fill("Memory safety without garbage collection.", &options),
605 Opt: Into<Options<'a>>, in fill()
607 let options = width_or_options.into(); in fill() localVariable
609 if text.len() < options.width && !text.contains('\n') && options.initial_indent.is_empty() { in fill()
612 fill_slow_path(text, options) in fill()
618 /// This is taken when `text` is longer than `options.width`.
619 fn fill_slow_path(text: &str, options: Options<'_>) -> String { in fill_slow_path()
624 let line_ending_str = options.line_ending.as_str(); in fill_slow_path()
625 for (i, line) in wrap(text, options).iter().enumerate() { in fill_slow_path()
657 /// [`Options::initial_indent`] and the prefix (if any) of the the
658 /// other lines is returned in [`Options::subsequent_indent`].
660 /// Line ending is returned in [`Options::line_ending`]. If line ending
679 /// let (text, options) = unfill("\
686 /// assert_eq!(options.initial_indent, "* ");
687 /// assert_eq!(options.subsequent_indent, " ");
688 /// assert_eq!(options.line_ending, LineEnding::LF);
690 pub fn unfill(text: &str) -> (String, Options<'_>) { in unfill()
693 let mut options = Options::new(0); in unfill() localVariable
695 options.width = std::cmp::max(options.width, core::display_width(line)); in unfill()
700 options.initial_indent = prefix; in unfill()
702 options.subsequent_indent = prefix; in unfill()
704 for ((idx, x), y) in prefix.char_indices().zip(options.subsequent_indent.chars()) { in unfill()
706 options.subsequent_indent = &prefix[..idx]; in unfill()
710 if prefix.len() < options.subsequent_indent.len() { in unfill()
711 options.subsequent_indent = prefix; in unfill()
721 unfilled.push_str(&line[options.initial_indent.len()..]); in unfill()
724 unfilled.push_str(&line[options.subsequent_indent.len()..]); in unfill()
740 options.line_ending = detected_line_ending.unwrap_or(LineEnding::LF); in unfill()
741 (unfilled, options) in unfill()
751 /// specify other options as well — except for
752 /// [`Options::initial_indent`] and [`Options::subsequent_indent`],
800 Opt: Into<Options<'a>>, in refill()
803 let (text, options) = unfill(filled_text); in refill()
805 let stripped = text.strip_suffix(options.line_ending.as_str()); in refill()
808 new_options.initial_indent = options.initial_indent; in refill()
809 new_options.subsequent_indent = options.subsequent_indent; in refill()
841 /// If you need to customize the wrapping, you can pass an [`Options`]
845 /// use textwrap::{wrap, Options};
847 /// let options = Options::new(15)
850 /// let lines = wrap("Memory safety without garbage collection.", &options);
873 /// # use textwrap::{WrapAlgorithm::FirstFit, Options, wrap};
876 /// # Options::new(10).wrap_algorithm(FirstFit));
897 /// # use textwrap::{Options, WrapAlgorithm, wrap};
901 /// # Options::new(10).wrap_algorithm(WrapAlgorithm::new_optimal_fit())
923 /// use textwrap::{wrap, Options};
925 /// let options = Options::new(15).subsequent_indent("....");
926 /// let lines = wrap("Wrapping text all day long.", &options);
991 Opt: Into<Options<'a>>, in wrap()
993 let options: Options = width_or_options.into(); in wrap() localVariable
994 let line_ending_str = options.line_ending.as_str(); in wrap()
998 wrap_single_line(line, &options, &mut lines); in wrap()
1004 fn wrap_single_line<'a>(line: &'a str, options: &Options<'_>, lines: &mut Vec<Cow<'a, str>>) { in wrap_single_line()
1006 options.initial_indent in wrap_single_line()
1008 options.subsequent_indent in wrap_single_line()
1010 if line.len() < options.width && indent.is_empty() { in wrap_single_line()
1013 wrap_single_line_slow_path(line, options, lines) in wrap_single_line()
1019 /// This is taken when `line` is longer than `options.width`.
1022 options: &Options<'_>, in wrap_single_line_slow_path()
1025 let initial_width = options in wrap_single_line_slow_path()
1027 .saturating_sub(core::display_width(options.initial_indent)); in wrap_single_line_slow_path()
1028 let subsequent_width = options in wrap_single_line_slow_path()
1030 .saturating_sub(core::display_width(options.subsequent_indent)); in wrap_single_line_slow_path()
1033 let words = options.word_separator.find_words(line); in wrap_single_line_slow_path()
1034 let split_words = word_splitters::split_words(words, &options.word_splitter); in wrap_single_line_slow_path()
1035 let broken_words = if options.break_words { in wrap_single_line_slow_path()
1037 if !options.initial_indent.is_empty() { in wrap_single_line_slow_path()
1050 let wrapped_words = options.wrap_algorithm.wrap(&broken_words, &line_widths); in wrap_single_line_slow_path()
1073 let mut result = if lines.is_empty() && !options.initial_indent.is_empty() { in wrap_single_line_slow_path()
1074 Cow::Owned(options.initial_indent.to_owned()) in wrap_single_line_slow_path()
1075 } else if !lines.is_empty() && !options.subsequent_indent.is_empty() { in wrap_single_line_slow_path()
1076 Cow::Owned(options.subsequent_indent.to_owned()) in wrap_single_line_slow_path()
1106 /// can be a [`Options`] value if you want to customize the wrapping.
1109 /// [`Options::break_words`] to `true` to prevent words from
1117 /// # let options = textwrap::Options::new(80);
1118 /// let inner_width = options.width
1125 /// The `text` is wrapped using [`wrap`] and the given `options`
1165 Opt: Into<Options<'a>>, in wrap_columns()
1169 let mut options: Options = total_width_or_options.into(); in wrap_columns() localVariable
1171 let inner_width = options in wrap_columns()
1178 options.width = column_width; in wrap_columns()
1180 let wrapped_lines = wrap(text, options); in wrap_columns()
1222 /// these options:
1225 /// # use textwrap::{core, LineEnding, Options, WordSplitter, WordSeparator, WrapAlgorithm};
1227 /// Options::new(width)
1304 let opt_usize = Options::from(42_usize); in options_agree_with_usize()
1305 let opt_options = Options::new(42); in options_agree_with_usize()
1332 Options::new(10).wrap_algorithm(WrapAlgorithm::FirstFit) in to_be_or_not()
1398 let options = Options::new(1).word_separator(WordSeparator::AsciiSpace); in issue_129() localVariable
1399 assert_eq!(wrap("x – x", options), vec!["x", "–", "x"]); in issue_129()
1408 Options::new(15).word_separator(WordSeparator::AsciiSpace) in wide_character_handling()
1419 Options::new(15).word_separator(WordSeparator::UnicodeBreakProperties), in wide_character_handling()
1431 let options = Options::new(10).initial_indent("!!!"); in empty_line_is_indented() localVariable
1432 assert_eq!(fill("", &options), "!!!"); in empty_line_is_indented()
1437 let options = Options::new(10).initial_indent(">>>"); // No trailing space in indent_single_line() localVariable
1438 assert_eq!(fill("foo", &options), ">>>foo"); in indent_single_line()
1443 let options = Options::new(10).initial_indent("����"); in indent_first_emoji() localVariable
1445 wrap("x x x x x x x x x x x x x", &options), in indent_first_emoji()
1452 let options = Options::new(6).initial_indent("* ").subsequent_indent(" "); in indent_multiple_lines() localVariable
1454 wrap("foo bar baz", &options), in indent_multiple_lines()
1461 let options = Options::new(10).initial_indent(" "); in only_initial_indent_multiple_lines() localVariable
1462 assert_eq!(wrap("foo\nbar\nbaz", &options), vec![" foo", "bar", "baz"]); in only_initial_indent_multiple_lines()
1467 let options = Options::new(10).subsequent_indent(" "); in only_subsequent_indent_multiple_lines() localVariable
1469 wrap("foo\nbar\nbaz", &options), in only_subsequent_indent_multiple_lines()
1476 let options = Options::new(5).initial_indent("* ").subsequent_indent(" "); in indent_break_words() localVariable
1477 assert_eq!(wrap("foobarbaz", &options), vec!["* foo", " bar", " baz"]); in indent_break_words()
1486 let options = Options::new(5).initial_indent("-->"); in initial_indent_break_words() localVariable
1487 assert_eq!(wrap("foobarbaz", &options), vec!["-->", "fooba", "rbaz"]); in initial_indent_break_words()
1497 let options = Options::new(5).break_words(false); in trailing_hyphen() localVariable
1498 assert_eq!(wrap("foobar-", &options), vec!["foobar-"]); in trailing_hyphen()
1508 let options = Options::new(5).break_words(false); in hyphens_flag() localVariable
1510 wrap("The --foo-bar flag.", &options), in hyphens_flag()
1517 let options = Options::new(4).break_words(false); in repeated_hyphens() localVariable
1518 assert_eq!(wrap("foo--bar", &options), vec!["foo--bar"]); in repeated_hyphens()
1528 let options = Options::new(5).break_words(false); in hyphens_non_alphanumeric() localVariable
1529 assert_eq!(wrap("foo(-)bar", &options), vec!["foo(-)bar"]); in hyphens_non_alphanumeric()
1539 let options = Options::new(5).break_words(false); in forced_split() localVariable
1540 assert_eq!(wrap("foobar-baz", &options), vec!["foobar-", "baz"]); in forced_split()
1545 let options = Options::new(3).break_words(false); in multiple_unbroken_words_issue_193() localVariable
1547 wrap("small large tiny", &options), in multiple_unbroken_words_issue_193()
1551 wrap("small large tiny", &options), in multiple_unbroken_words_issue_193()
1558 let options = Options::new(1).break_words(false); in very_narrow_lines_issue_193() localVariable
1559 assert_eq!(wrap("fooo x y", &options), vec!["fooo", "x", "y"]); in very_narrow_lines_issue_193()
1560 assert_eq!(wrap("fooo x y", &options), vec!["fooo", "x", "y"]); in very_narrow_lines_issue_193()
1565 let options = Options::new(8).word_splitter(WordSplitter::HyphenSplitter); in simple_hyphens() localVariable
1566 assert_eq!(wrap("foo bar-baz", &options), vec!["foo bar-", "baz"]); in simple_hyphens()
1571 let options = Options::new(8).word_splitter(WordSplitter::NoHyphenation); in no_hyphenation() localVariable
1572 assert_eq!(wrap("foo bar-baz", &options), vec!["foo", "bar-baz"]); in no_hyphenation()
1579 let options = Options::new(10); in auto_hyphenation_double_hyphenation() localVariable
1581 wrap("Internationalization", &options), in auto_hyphenation_double_hyphenation()
1585 let options = Options::new(10).word_splitter(WordSplitter::Hyphenation(dictionary)); in auto_hyphenation_double_hyphenation() localVariable
1587 wrap("Internationalization", &options), in auto_hyphenation_double_hyphenation()
1596 let options = Options::new(10); in auto_hyphenation_issue_158() localVariable
1598 wrap("participation is the key to success", &options), in auto_hyphenation_issue_158()
1602 let options = Options::new(10).word_splitter(WordSplitter::Hyphenation(dictionary)); in auto_hyphenation_issue_158() localVariable
1604 wrap("participation is the key to success", &options), in auto_hyphenation_issue_158()
1615 let options = Options::new(15).word_splitter(WordSplitter::Hyphenation(dictionary)); in split_len_hyphenation() localVariable
1617 wrap("garbage collection", &options), in split_len_hyphenation()
1629 let options = Options::new(10).word_splitter(WordSplitter::Hyphenation(dictionary)); in borrowed_lines() localVariable
1630 let lines = wrap("Internationalization", &options); in borrowed_lines()
1647 let options = Options::new(8).break_words(false); in auto_hyphenation_with_hyphen() localVariable
1649 wrap("over-caffinated", &options), in auto_hyphenation_with_hyphen()
1653 let options = options.word_splitter(WordSplitter::Hyphenation(dictionary)); in auto_hyphenation_with_hyphen() localVariable
1655 wrap("over-caffinated", &options), in auto_hyphenation_with_hyphen()
1669 let options = Options::new(5).word_separator(WordSeparator::AsciiSpace); in break_words_wide_characters() localVariable
1670 assert_eq!(wrap("Hello", options), vec!["He", "ll", "o"]); in break_words_wide_characters()
1692 fill("foo\nbar", &Options::new(2).break_words(false)), in break_words_empty_lines()
1707 Options::new(7).wrap_algorithm(WrapAlgorithm::FirstFit) in preserve_line_breaks()
1714 Options::new(5).wrap_algorithm(WrapAlgorithm::FirstFit) in preserve_line_breaks()
1729 let options = Options::new(5).break_words(false); in non_breaking_space() localVariable
1730 assert_eq!(fill("foo bar baz", &options), "foo bar baz"); in non_breaking_space()
1735 let options = Options::new(5).break_words(false); in non_breaking_hyphen() localVariable
1736 assert_eq!(fill("foo‑bar‑baz", &options), "foo‑bar‑baz"); in non_breaking_hyphen()
1836 let (text, options) = unfill("foo\nbar"); in unfill_simple()
1838 assert_eq!(options.width, 3); in unfill_simple()
1839 assert_eq!(options.line_ending, LineEnding::LF); in unfill_simple()
1844 let (text, options) = unfill("foo bar"); in unfill_no_new_line()
1846 assert_eq!(options.width, 7); in unfill_no_new_line()
1847 assert_eq!(options.line_ending, LineEnding::LF); in unfill_no_new_line()
1852 let (text, options) = unfill("foo\r\nbar"); in unfill_simple_crlf()
1854 assert_eq!(options.width, 3); in unfill_simple_crlf()
1855 assert_eq!(options.line_ending, LineEnding::CRLF); in unfill_simple_crlf()
1860 let (text, options) = unfill("foo\r\nbar\nbaz"); in unfill_mixed_new_lines()
1862 assert_eq!(options.width, 3); in unfill_mixed_new_lines()
1863 assert_eq!(options.line_ending, LineEnding::LF); in unfill_mixed_new_lines()
1868 let (text, options) = unfill("foo\nbar\n\n\n"); in unfill_trailing_newlines()
1870 assert_eq!(options.width, 3); in unfill_trailing_newlines()
1875 let (text, options) = unfill("foo\r\nbar\n\r\n\n"); in unfill_mixed_trailing_newlines()
1877 assert_eq!(options.width, 3); in unfill_mixed_trailing_newlines()
1878 assert_eq!(options.line_ending, LineEnding::LF); in unfill_mixed_trailing_newlines()
1883 let (text, options) = unfill("foo bar\r\n"); in unfill_trailing_crlf()
1885 assert_eq!(options.width, 7); in unfill_trailing_crlf()
1886 assert_eq!(options.line_ending, LineEnding::CRLF); in unfill_trailing_crlf()
1891 let (text, options) = unfill(" foo\nbar\nbaz"); in unfill_initial_indent()
1893 assert_eq!(options.width, 5); in unfill_initial_indent()
1894 assert_eq!(options.initial_indent, " "); in unfill_initial_indent()
1899 let (text, options) = unfill(" foo\n bar\n baz"); in unfill_differing_indents()
1901 assert_eq!(options.width, 7); in unfill_differing_indents()
1902 assert_eq!(options.initial_indent, " "); in unfill_differing_indents()
1903 assert_eq!(options.subsequent_indent, " "); in unfill_differing_indents()
1908 let (text, options) = unfill("* foo\n bar\n baz"); in unfill_list_item()
1910 assert_eq!(options.width, 5); in unfill_list_item()
1911 assert_eq!(options.initial_indent, "* "); in unfill_list_item()
1912 assert_eq!(options.subsequent_indent, " "); in unfill_list_item()
1917 let (text, options) = unfill(" // foo bar\n // baz\n // quux"); in unfill_multiple_char_prefix()
1919 assert_eq!(options.width, 14); in unfill_multiple_char_prefix()
1920 assert_eq!(options.initial_indent, " // "); in unfill_multiple_char_prefix()
1921 assert_eq!(options.subsequent_indent, " // "); in unfill_multiple_char_prefix()
1926 let (text, options) = unfill("> foo\n> bar\n> baz"); in unfill_block_quote()
1928 assert_eq!(options.width, 5); in unfill_block_quote()
1929 assert_eq!(options.initial_indent, "> "); in unfill_block_quote()
1930 assert_eq!(options.subsequent_indent, "> "); in unfill_block_quote()
1937 let (text, options) = unfill("######\nfoo"); in unfill_only_prefixes_issue_466()
1939 assert_eq!(options.width, 6); in unfill_only_prefixes_issue_466()
1940 assert_eq!(options.initial_indent, "######"); in unfill_only_prefixes_issue_466()
1941 assert_eq!(options.subsequent_indent, ""); in unfill_only_prefixes_issue_466()
1949 let (text, options) = unfill("foo\n##\n\n\r"); in unfill_trailing_newlines_issue_466()
1952 assert_eq!(options.width, 3); in unfill_trailing_newlines_issue_466()
1953 assert_eq!(options.initial_indent, ""); in unfill_trailing_newlines_issue_466()
1954 assert_eq!(options.subsequent_indent, ""); in unfill_trailing_newlines_issue_466()
1964 let options = Options::new(5).line_ending(LineEnding::CRLF); in refill_convert_lf_to_crlf() localVariable
1965 assert_eq!(refill("foo\nbar\n", options), "foo\r\nbar\r\n",); in refill_convert_lf_to_crlf()
1970 let options = Options::new(5).line_ending(LineEnding::LF); in refill_convert_crlf_to_lf() localVariable
1971 assert_eq!(refill("foo\r\nbar\r\n", options), "foo\nbar\n",); in refill_convert_crlf_to_lf()
1976 let options = Options::new(5).line_ending(LineEnding::CRLF); in refill_convert_mixed_newlines() localVariable
1977 assert_eq!(refill("foo\r\nbar\n", options), "foo\r\nbar\r\n",); in refill_convert_mixed_newlines()