\section{\module{textwrap} --- Text wrapping and filling} \declaremodule{standard}{textwrap} \modulesynopsis{Text wrapping and filling} \moduleauthor{Greg Ward}{gward@python.net} \sectionauthor{Greg Ward}{gward@python.net} \versionadded{2.3} The \module{textwrap} module provides two convenience functions, \function{wrap()} and \function{fill()}, as well as \class{TextWrapper}, the class that does all the work, and a utility function \function{dedent()}. If you're just wrapping or filling one or two text strings, the convenience functions should be good enough; otherwise, you should use an instance of \class{TextWrapper} for efficiency. \begin{funcdesc}{wrap}{text\optional{, width\optional{, \moreargs}}} Wraps the single paragraph in \var{text} (a string) so every line is at most \var{width} characters long. Returns a list of output lines, without final newlines. Optional keyword arguments correspond to the instance attributes of \class{TextWrapper}, documented below. \var{width} defaults to \code{70}. \end{funcdesc} \begin{funcdesc}{fill}{text\optional{, width\optional{, \moreargs}}} Wraps the single paragraph in \var{text}, and returns a single string containing the wrapped paragraph. \function{fill()} is shorthand for \begin{verbatim} "\n".join(wrap(text, ...)) \end{verbatim} In particular, \function{fill()} accepts exactly the same keyword arguments as \function{wrap()}. \end{funcdesc} Both \function{wrap()} and \function{fill()} work by creating a \class{TextWrapper} instance and calling a single method on it. That instance is not reused, so for applications that wrap/fill many text strings, it will be more efficient for you to create your own \class{TextWrapper} object. An additional utility function, \function{dedent()}, is provided to remove indentation from strings that have unwanted whitespace to the left of the text. \begin{funcdesc}{dedent}{text} Remove any whitespace that can be uniformly removed from the left of every line in \var{text}. This is typically used to make triple-quoted strings line up with the left edge of screen/whatever, while still presenting it in the source code in indented form. For example: \begin{verbatim} def test(): # end first line with \ to avoid the empty line! s = '''\ hello world ''' print repr(s) # prints ' hello\n world\n ' print repr(dedent(s)) # prints 'hello\n world\n' \end{verbatim} \end{funcdesc} \begin{classdesc}{TextWrapper}{...} The \class{TextWrapper} constructor accepts a number of optional keyword arguments. Each argument corresponds to one instance attribute, so for example \begin{verbatim} wrapper = TextWrapper(initial_indent="* ") \end{verbatim} is the same as \begin{verbatim} wrapper = TextWrapper() wrapper.initial_indent = "* " \end{verbatim} You can re-use the same \class{TextWrapper} object many times, and you can change any of its options through direct assignment to instance attributes between uses. \end{classdesc} The \class{TextWrapper} instance attributes (and keyword arguments to the constructor) are as follows: \begin{memberdesc}{width} (default: \code{70}) The maximum length of wrapped lines. As long as there are no individual words in the input text longer than \member{width}, \class{TextWrapper} guarantees that no output line will be longer than \member{width} characters. \end{memberdesc} \begin{memberdesc}{expand_tabs} (default: \code{True}) If true, then all tab characters in \var{text} will be expanded to spaces using the \method{expandtabs()} method of \var{text}. \end{memberdesc} \begin{memberdesc}{replace_whitespace} (default: \code{True}) If true, each whitespace character (as defined by \code{string.whitespace}) remaining after tab expansion will be replaced by a single space. \note{If \member{expand_tabs} is false and \member{replace_whitespace} is true, each tab character will be replaced by a single space, which is \emph{not} the same as tab expansion.} \end{memberdesc} \begin{memberdesc}{initial_indent} (default: \code{''}) String that will be prepended to the first line of wrapped output. Counts towards the length of the first line. \end{memberdesc} \begin{memberdesc}{subsequent_indent} (default: \code{''}) String that will be prepended to all lines of wrapped output except the first. Counts towards the length of each line except the first. \end{memberdesc} \begin{memberdesc}{fix_sentence_endings} (default: \code{False}) If true, \class{TextWrapper} attempts to detect sentence endings and ensure that sentences are always separated by exactly two spaces. This is generally desired for text in a monospaced font. However, the sentence detection algorithm is imperfect: it assumes that a sentence ending consists of a lowercase letter followed by one of \character{.}, \character{!}, or \character{?}, possibly followed by one of \character{"} or \character{'}, followed by a space. One problem with this is algorithm is that it is unable to detect the difference between ``Dr.'' in \begin{verbatim} [...] Dr. Frankenstein's monster [...] \end{verbatim} and ``Spot.'' in \begin{verbatim} [...] See Spot. See Spot run [...] \end{verbatim} \member{fix_sentence_endings} is false by default. Since the sentence detection algorithm relies on \code{string.lowercase} for the definition of ``lowercase letter,'' and a convention of using two spaces after a period to separate sentences on the same line, it is specific to English-language texts. \end{memberdesc} \begin{memberdesc}{break_long_words} (default: \code{True}) If true, then words longer than \member{width} will be broken in order to ensure that no lines are longer than \member{width}. If it is false, long words will not be broken, and some lines may be longer than \member{width}. (Long words will be put on a line by themselves, in order to minimize the amount by which \member{width} is exceeded.) \end{memberdesc} \class{TextWrapper} also provides two public methods, analogous to the module-level convenience functions: \begin{methoddesc}{wrap}{text} Wraps the single paragraph in \var{text} (a string) so every line is at most \member{width} characters long. All wrapping options are taken from instance attributes of the \class{TextWrapper} instance. Returns a list of output lines, without final newlines. \end{methoddesc} \begin{methoddesc}{fill}{text} Wraps the single paragraph in \var{text}, and returns a single string containing the wrapped paragraph. \end{methoddesc}