summaryrefslogtreecommitdiffstats
path: root/Doc
diff options
context:
space:
mode:
authorGreg Ward <gward@python.net>2002-06-29 02:38:50 (GMT)
committerGreg Ward <gward@python.net>2002-06-29 02:38:50 (GMT)
commitae64f3adcd4b9f11710520ad47075930e175cd1d (patch)
tree6ac2cea8b9ab219e16176de04159aa77379ad377 /Doc
parent8b46c71d5b5444f9554008ebb2aa808f4f48e5e1 (diff)
downloadcpython-ae64f3adcd4b9f11710520ad47075930e175cd1d.zip
cpython-ae64f3adcd4b9f11710520ad47075930e175cd1d.tar.gz
cpython-ae64f3adcd4b9f11710520ad47075930e175cd1d.tar.bz2
Add documentation for new textwrap module.
Diffstat (limited to 'Doc')
-rw-r--r--Doc/Makefile.deps1
-rw-r--r--Doc/lib/lib.tex1
-rw-r--r--Doc/lib/libtextwrap.tex141
3 files changed, 143 insertions, 0 deletions
diff --git a/Doc/Makefile.deps b/Doc/Makefile.deps
index 060e3ec..29a6bc1 100644
--- a/Doc/Makefile.deps
+++ b/Doc/Makefile.deps
@@ -124,6 +124,7 @@ LIBFILES= $(MANSTYLES) $(INDEXSTYLES) $(COMMONTEX) \
lib/libmain.tex \
lib/libstrings.tex \
lib/libstring.tex \
+ lib/libtextwrap.tex \
lib/libcodecs.tex \
lib/libunicodedata.tex \
lib/libstruct.tex \
diff --git a/Doc/lib/lib.tex b/Doc/lib/lib.tex
index f285dda..70b1c93 100644
--- a/Doc/lib/lib.tex
+++ b/Doc/lib/lib.tex
@@ -107,6 +107,7 @@ and how to embed it in other applications.
\input{libdifflib}
\input{libfpformat}
\input{libstringio}
+\input{libtextwrap}
\input{libcodecs}
\input{libunicodedata}
diff --git a/Doc/lib/libtextwrap.tex b/Doc/lib/libtextwrap.tex
new file mode 100644
index 0000000..a4924e7
--- /dev/null
+++ b/Doc/lib/libtextwrap.tex
@@ -0,0 +1,141 @@
+\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. 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, width=70, **kwargs}
+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.
+\end{funcdesc}
+
+\begin{funcdesc}{fill}{text, width=70, **kwargs}
+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.
+
+% XXX how to typeset long argument lists? this just spills off
+% the edge of the page, with or without \\ delimiters
+\begin{classdesc}{TextWrapper}{width=70, \\
+ initial_indent="", \\
+ subsequent_indent="", \\
+ expand_tabs=True, \\
+ replace_whitespace=True, \\
+ fix_sentence_endings=False, \\
+ break_long_words=True}
+
+Each keyword argument to the constructor corresponds to an 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. The effects of the instance attributes are as
+follows:
+
+\begin{memberdesc}[bool]{expand_tabs}
+If true (the default), then all tab characters in \var{text} will be
+expanded to spaces using the \method{expand_tabs()} method of
+\var{text}.
+\end{memberdesc}
+
+\begin{memberdesc}[bool]{replace_whitespace}
+If true (the default), each whitespace character (as defined by
+\var{string.whitespace}) remaining after tab expansion will be replaced
+by a single space. \note{If \var{expand_tabs} is false and
+\var{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}
+
+% XXX how to typeset the empty string? this looks awful, and "" is worse.
+\begin{memberdesc}[string]{initial_indent}
+(default: '') String that will be prepended to the first line of wrapped
+output. Counts towards the length of the first line.
+\end{memberdesc}
+
+\begin{memberdesc}[string]{subsequent_indent}
+(default: '') 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}[bool]{fix_sentence_endings}
+(default: 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{'}. One problem with this is algoritm 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}
+Furthermore, since it relies on \var{string.lowercase} for the
+definition of ``lowercase letter'', it is specific to English-language
+texts. Thus, \var{fix_sentence_endings} is false by default.
+\end{memberdesc}
+
+\begin{memberdesc}[bool]{break_long_words}
+If true (the default), then words longer than \var{width} will be broken
+in order to ensure that no lines are longer than \var{width}. If it is
+false, long words will not be broken, and some lines may be longer than
+\var{width}. (Long words will be put on a line by themselves, in order
+to minimize the amount by which \var{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 \var{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}
+
+\end{classdesc}