--- /dev/null
+from typing import Callable, List, Optional, Dict, Pattern\r
+\r
+class TextWrapper:\r
+ width: int = ...\r
+ initial_indent: str = ...\r
+ subsequent_indent: str = ...\r
+ expand_tabs: bool = ...\r
+ replace_whitespace: bool = ...\r
+ fix_sentence_endings: bool = ...\r
+ drop_whitespace: bool = ...\r
+ break_long_words: bool = ...\r
+ break_on_hyphens: bool = ...\r
+ tabsize: int = ...\r
+ max_lines: Optional[int] = ...\r
+ placeholder: str = ...\r
+\r
+ # Attributes not present in documentation\r
+ sentence_end_re: Pattern[str] = ...\r
+ wordsep_re: Pattern[str] = ...\r
+ wordsep_simple_re: Pattern[str] = ...\r
+ whitespace_trans: str = ...\r
+ unicode_whitespace_trans: Dict[int, int] = ...\r
+ uspace: int = ...\r
+ x: int = ...\r
+\r
+ def __init__(\r
+ self,\r
+ width: int = ...,\r
+ initial_indent: str = ...,\r
+ subsequent_indent: str = ...,\r
+ expand_tabs: bool = ...,\r
+ replace_whitespace: bool = ...,\r
+ fix_sentence_endings: bool = ...,\r
+ break_long_words: bool = ...,\r
+ drop_whitespace: bool = ...,\r
+ break_on_hyphens: bool = ...,\r
+ tabsize: int = ...,\r
+ *,\r
+ max_lines: Optional[int] = ...,\r
+ placeholder: str = ...) -> None:\r
+ ...\r
+\r
+ # Private methods *are* part of the documented API for subclasses.\r
+ def _munge_whitespace(self, text: str) -> str: ...\r
+ def _split(self, text: str) -> List[str]: ...\r
+ def _fix_sentence_endings(self, chunks: List[str]) -> None: ...\r
+ def _handle_long_word(self, reversed_chunks: List[str], cur_line: List[str], cur_len: int, width: int) -> None: ...\r
+ def _wrap_chunks(self, chunks: List[str]) -> List[str]: ...\r
+ def _split_chunks(self, text: str) -> List[str]: ...\r
+\r
+ def wrap(self, text: str) -> List[str]: ...\r
+ def fill(self, text: str) -> str: ...\r
+\r
+\r
+def wrap(\r
+ text: str = ...,\r
+ width: int = ...,\r
+ *,\r
+ initial_indent: str = ...,\r
+ subsequent_indent: str = ...,\r
+ expand_tabs: bool = ...,\r
+ tabsize: int = ...,\r
+ replace_whitespace: bool = ...,\r
+ fix_sentence_endings: bool = ...,\r
+ break_long_words: bool = ...,\r
+ break_on_hyphens: bool = ...,\r
+ drop_whitespace: bool = ...,\r
+ max_lines: int = ...,\r
+ placeholder: str = ...\r
+) -> List[str]:\r
+ ...\r
+\r
+def fill(\r
+ text: str,\r
+ width: int = ...,\r
+ *,\r
+ initial_indent: str = ...,\r
+ subsequent_indent: str = ...,\r
+ expand_tabs: bool = ...,\r
+ tabsize: int = ...,\r
+ replace_whitespace: bool = ...,\r
+ fix_sentence_endings: bool = ...,\r
+ break_long_words: bool = ...,\r
+ break_on_hyphens: bool = ...,\r
+ drop_whitespace: bool = ...,\r
+ max_lines: int = ...,\r
+ placeholder: str = ...\r
+) -> str:\r
+ ...\r
+\r
+def shorten(\r
+ text: str,\r
+ width: int,\r
+ *,\r
+ initial_indent: str = ...,\r
+ subsequent_indent: str = ...,\r
+ expand_tabs: bool = ...,\r
+ tabsize: int = ...,\r
+ replace_whitespace: bool = ...,\r
+ fix_sentence_endings: bool = ...,\r
+ break_long_words: bool = ...,\r
+ break_on_hyphens: bool = ...,\r
+ drop_whitespace: bool = ...,\r
+ # Omit `max_lines: int = None`, it is forced to 1 here.\r
+ placeholder: str = ...\r
+) -> str:\r
+ ...\r
+\r
+def dedent(text: str) -> str:\r
+ ...\r
+\r
+def indent(text: str, prefix: str, predicate: Callable[[str], bool] = ...) -> str:\r
+ ...\r