blob: a2d0336bdc229cc38994ee0ba0fefc22f67bab90 [file] [log] [blame]
Fred Drakeacffaee1999-03-16 16:09:13 +00001\documentclass{howto}
2\usepackage{ltxmarkup}
3
4\title{Documenting Python}
5
6\input{boilerplate}
7
8% Now override the stuff that includes author information:
9
10\author{Fred L. Drake, Jr.}
11\authoraddress{
12 Corporation for National Research Initiatives (CNRI) \\
13 1895 Preston White Drive, Reston, Va 20191, USA \\
14 E-mail: \email{fdrake@acm.org}
15}
16\date{\today}
17
18
19\begin{document}
20
21\maketitle
22
23\begin{abstract}
24\noindent
25The Python language documentation has a substantial body of
26documentation, much of it contributed by various authors. The markup
27used for the Python documentation is based on \LaTeX{} and requires a
28significant set of macros written specifically for documenting Python.
29Maintaining the documentation requires substantial effort, in part
30because selecting the correct markup to use is not always easy.
31
32This document describes the document classes and special markup used
33in the Python documentation. Authors may use this guide, in
34conjunction with the template files provided with the
35distribution, to create or maintain whole documents or sections.
36\end{abstract}
37
38\tableofcontents
39
40
41\section{Introduction}
42
43 Python's documentation has long been considered to be good for a
44 free programming language. There are a number of reasons for this,
45 the most important being the early commitment of Python's creator,
46 Guido van Rossum, to providing documentation on the language and its
47 libraries, and the continuing involvement of the user community in
48 providing assistance for creating and maintaining documentation.
49
50 The involvement of the community takes many forms, from authoring to
51 bug reports to just plain complaining when aspects of the
52 documentation could be easier to use. All of these forms of input
53 from the community have proved useful during the time I've been
54 involved in maintaining the documentation.
55
56 [Who is this document for?]
57
58 [What does it cover?]
59
60\section{Directory Structure}
61
62 The source distribution for the standard Python documentation
63 contains a large number of directories. While third-party documents
64 do not need to be placed into this structure or need to be placed
65 within a similar structure, it can be helpful to know where to look
66 for examples and tools when developing new documents using the
67 Python documentation tools. This section describes this directory
68 structure.
69
70 The documentation sources are usually placed within the Python
71 source distribution as the top-level subdirectory \file{Doc/}, but
72 is independent of the Python source distribution.
73
74 The \file{Doc/} directory contains a few files and several
75 subdirectories. The files are mostly self-explanatory, including a
76 \file{README} and a \file{Makefile}. The directories fall into
77 three categories:
78
79 \begin{definitions}
80 \term{Document Sources}
81 The \LaTeX{} sources for each document are placed in a
82 separate directory. These directories are given short,
83 three-character names.
84
85 \term{Format-Specific Output}
86 Most output formats have a directory provided which contains a
87 \file{Makefile} which controls the generation of that format
88 and provides storage for the formatted documents. The only
89 variation within this category is the Portable Document Format
90 (PDF) and PostScript versions are placed in the directories
91 \file{paper-a4/} and \file{paper-letter/}.
92
93 \term{Supplemental Files}
94 Some additional directories are used to store supplemental
95 files used for the various processes. Directories are
96 included for the shared \LaTeX{} document classes, the
97 \LaTeX2HTML support, template files for various document
98 components, and the scripts used to perform various steps in
99 the formatting processes.
100 \end{definitions}
101
102\section{Document Classes}
103
104 Two \LaTeX{} document classes are defined specifically for use with
105 the Python documentation. The \code{manual} class is for large
106 documents which are sectioned into chapters, and the \code{howto}
107 class is for smaller documents.
108
109 The \code{manual} documents are larger and are used for most of the
110 standard documents. This document class is based on the standard
111 \LaTeX{} \code{report} class and is formatted very much like a long
112 technical report.
113
114 The \code{howto} documents are shorter, and don't have the large
115 structure of the \code{manual} documents. This class is based on
116 the standard \LaTeX{} \code{article} class and is formatted somewhat
117 like the Linux Documentation Project's ``HOWTO'' series as done
118 originally using the LinuxDoc software. The original intent for the
119 document class was that it serve a similar role as the LDP's HOWTO
120 series, but the applicability of the class turns out to be somewhat
121 more broad. This class is used for ``how-to'' documents (this
122 document is an example) and for shorter reference manuals for small,
123 fairly cohesive module libraries. Examples of the later use include
124 the standard \emph{Macintosh Library Modules} and \emph{Using
125 Kerberos from Python}, which contains reference material for an
126 extension package. These documents are roughly equivalent to a
127 single chapter from a larger work.
128
129
130\section{Python-specific Markup}
131
132 \subsection{Information Units \label{info-units}}
133
134 Most of the environments should be described here: \env{excdesc},
135 \env{funcdesc}, etc.
136
137 \begin{envdesc}{datadesc}{\{\var{name}\}}
138 \end{envdesc}
139 \begin{envdesc}{datadesc}{\{\var{name}\}}
140 Like \env{datadesc}, but without creating any index entries.
141 \end{envdesc}
142
143 \begin{envdesc}{excdesc}{\{\var{name}\}}
144 Describe an exception. This may be either a string exception or
145 a class exception.
146 \end{envdesc}
147
148 \begin{envdesc}{funcdesc}{\{\var{name}\}\{\var{parameter list}\}}
149 \end{envdesc}
150 \begin{envdesc}{funcdescni}{\{\var{name}\}\{\var{parameter list}\}}
151 Like \env{funcdesc}, but without creating any index entries.
152 \end{envdesc}
153
154 \begin{envdesc}{classdesc}{\{\var{name}\}\{\var{constructor parameter list}\}}
155 \end{envdesc}
156
157 \begin{envdesc}{memberdesc}{\{\var{name}\}}
158 \end{envdesc}
159 \begin{envdesc}{memberdescni}{\{\var{name}\}}
160 Like \env{memberdesc}, but without creating any index entries.
161 \end{envdesc}
162
163 \begin{envdesc}{methoddesc}{{[}\var{class name}{]}\{\var{name}\}\{\var{parameter list}\}}
164 \end{envdesc}
165 \begin{envdesc}{methoddescni}{{[}\var{class name}{]}\{\var{name}\}\{\var{parameter list}\}}
166 Like \env{methoddesc}, but without creating any index entries.
167 \end{envdesc}
168
169
170 \subsection{Inline Markup}
171
172 This is where to explain \macro{code}, \macro{function},
173 \macro{email}, etc.
174
175
176 \subsection{Module-specific Markup}
177
178 The markup described in this section is used to provide information
179 about a module being documented. A typical use of this markup
180 appears at the top of the section used to document a module. A
181 typical example might look like this:
182
183\begin{verbatim}
184\section{\module{spam} ---
185 Access to the SPAM facility}
186
187\declaremodule{extension}{spam}
188 \platform{SomeOS}
189\modulesynopsis{Access to the SPAM facility of SomeOS.}
190\moduleauthor{John Doe}{john.doe@frobnication.org}
191\end{verbatim}
192
193 \begin{macrodesc}{declaremodule}{{[}\var{key}{]}\{\var{type}\}\{\var{name}\}}
194 Requires two parameters: module type (standard, builtin,
195 extension), and the module name. An optional parameter should be
196 given as the basis for the module's ``key'' used for linking to or
197 referencing the section. The ``key'' should only be given if the
198 module's name contains underscores, and should be the name with the
199 underscore's stripped. This should be the first thing after the
200 \macro{section} used to introduce the module.
201 \end{macrodesc}
202
203 \begin{macrodesc}{platform}{\{\var{specifier}\}}
204 Specifies the portability of the module. \var{specifier} is a
205 comma-separated list of keys that specify what platforms the
206 module is available on. The keys are short identifiers;
207 examples that are in use include \samp{IRIX}, \samp{Mac},
208 \samp{Windows}, and \samp{Unix}. It is important to use a key
209 which has already been used when applicable.
210 \end{macrodesc}
211
212 \begin{macrodesc}{modulesynopsis}{\{\var{text}\}}
213 The \var{text} is a short, ``one line'' description of the
214 module that can be used as part of the chapter introduction.
215 This is typically placed just after \macro{declaremodule}.
216 The synopsis is used in building the contents of the table
217 inserted as the \macro{localmoduletable}. No text is
218 produced at the point of the markup.
219 \end{macrodesc}
220
221 \begin{macrodesc}{moduleauthor}{\{\var{name}\}\{\var{email}\}}
222 This macro is used to encode information about who authored a
223 module. This is currently not used to generate output, but can be
224 used to help determine the origin of the module.
225 \end{macrodesc}
226
227
228 \subsection{Library-level Markup}
229
230 This markup is used when describing a selection of modules. For
231 example, the \emph{Macintosh Library Modules} document uses this
232 to help provide an overview of the modules in the collection, and
233 many chapters in the \emph{Python Library Reference} use it for
234 the same purpose.
235
236 \begin{macrodesc}{localmoduletable}{}
237 No parameters. If a \file{.syn} file exists for the current
238 chapter (or for the entire document in \code{howto} documents), a
239 \env{synopsistable} is created with the contents loaded from the
240 \file{.syn} file.
241 \end{macrodesc}
242
243
244 \subsection{Table Markup}
245
246 There are three general-purpose table environments defined which
247 should be used whenever possible. These environments are defined
248 to provide tables of specific widths and some convenience for
249 formatting. These environments are not meant to be general
250 replacements for the standard \LaTeX{} table environments, but can
251 be used for an advantage when the documents are processed using
252 the tools for Python documentation processing. In particular, the
253 generated HTML looks good! There is also an advantage for the
254 eventual conversion of the documentation to SGML; see Section
255 \ref{futures}, ``Future Directions.''
256
257 Each environment is named \env{table\var{cols}}, where \var{cols}
258 is the number of columns in the table specified in lower-case
259 Roman numerals. Within each of these environments, an additional
260 macro, \macro{line\var{cols}}, is defined, where \var{cols}
261 matches the \var{cols} value of the corresponding table
262 environment. These environments are all built on top of the
263 \env{tabular} environment.
264
265 \begin{envdesc}{tableii}{\{\var{colspec}\}\{\var{col1font}\}\{\var{heading1}\}\{\var{heading2}\}}
266 Create a two-column table using the \LaTeX{} column specifier
267 \var{colspec}. The column specifier should indicate vertical
268 bars between columns as appropriate for the specific table, but
269 should not specify vertical bars on the outside of the table
270 (that is considered a stylesheet issue). The \var{col1font}
271 parameter is used as a stylistic treatment of the first column
272 of the table: the first column is presented as
273 \code{\e\var{col1font}\{column1\}}. To avoid treating the first
274 column specially, \var{col1font} may be \code{textrm}. The
275 column headings are taken from the values \var{heading1} and
276 \var{heading2}.
277 \end{envdesc}
278
279 \begin{macrodesc}{lineii}{\{\var{column1}\}\{\var{column2}\}}
280 Create a single table row within a \env{tableii} environment.
281 The text for the first column will be generated by applying the
282 macro named by the \var{col1font} value when the \env{tableii}
283 was opened.
284 \end{macrodesc}
285
286 \begin{envdesc}{tableiii}{\{\var{colspec}\}\{\var{col1font}\}\{\var{heading1}\}\{\var{heading2}\}\{\var{heading3}\}}
287 Like the \env{tableii} environment, but with a third column.
288 The heading for the third column is given by \var{heading3}.
289 \end{envdesc}
290
291 \begin{macrodesc}{lineiii}{\{\var{column1}\}\{\var{column2}\}\{\var{column3}\}}
292 Like the \macro{lineii} macro, but with a third column. The
293 text for the third column is given by \var{column3}.
294 \end{macrodesc}
295
296 \begin{envdesc}{tableiv}{\{\var{colspec}\}\{\var{col1font}\}\{\var{heading1}\}\{\var{heading2}\}\{\var{heading3}\}\{\var{heading4}\}}
297 Like the \env{tableiii} environment, but with a fourth column.
298 The heading for the fourth column is given by \var{heading4}.
299 \end{envdesc}
300
301 \begin{macrodesc}{lineiv}{\{\var{column1}\}\{\var{column2}\}\{\var{column3}\}\{\var{column4}\}}
302 Like the \macro{lineiii} macro, but with a fourth column. The
303 text for the fourth column is given by \var{column4}.
304 \end{macrodesc}
305
306
307 An additional table-like environment is \env{synopsistable}. The
308 table generated by this environment contains two columns, and each
309 row is defined by an alternate definition of
310 \macro{modulesynopsis}. This environment is not normally use by
311 the user, but is created by the \macro{localmoduletable} macro.
312
313
314 \subsection{Reference List Markup \label{references}}
315
316 Many sections include a list of references to module documentation
317 or external documents. These lists are created using the
318 \env{seealso} environment. This environment defines some
319 additional macros to support creating reference entries in a
320 reasonable manner.
321
322 \begin{envdesc}{seealso}{}
323 This environment creates a ``See also:'' heading and defines the
324 markup used to describe individual references.
325 \end{envdesc}
326
327 \begin{macrodesc}{seemodule}{{[}\var{key}{]}\{\var{name}\}\{\var{why}\}}
328 Refer to another module. \var{why} should be a brief
329 explanation of why the reference may be interesting. The module
330 name is given in \var{name}, with the link key given in
331 \var{key} if necessary. In the HTML and PDF conversions, the
332 module name will be a hyperlink to the referred-to module.
333 \end{macrodesc}
334
335 \begin{macrodesc}{seetext}{\{\var{text}\}}
336 Add arbitrary text \var{text} to the ``See also:'' list. This
337 can be used to refer to off-line materials or on-line materials
338 using the \macro{url} macro.
339 \end{macrodesc}
340
341
342 \subsection{Index-generating Markup \label{indexing}}
343
344 Effective index generation for technical documents can be very
345 difficult, especially for someone familliar with the topic but not
346 the creation of indexes. Much of the difficulty arises in the
347 area of terminology: including the terms an expert would use for a
348 concept is not sufficient. Coming up with the terms that a novice
349 would look up is fairly difficult for an author who, hopefully, is
350 an expert in the area she is writing on.
351
352 The truly difficult aspects of index generation are not something
353 which the documentation tools can help with, unfortunately. Ease
354 of producing the index once content decisions are make is within
355 the scope of the tools. Markup is provided which the processing
356 software is able to use to generate a variety of kinds of index
357 entry with minimal effort. Additionally, many of the environments
358 described in Section \ref{info-units}, ``Information Units,'' will
359 generate appropriate entries into the general and module indexes.
360
361 The following macro can be used to control the generation of index
362 data, and should be used in the document prologue:
363
364 \begin{macrodesc}{makemodindex}{}
365 This should be used in the document prologue if a ``Module
366 Index'' is desired for a document containing reference material
367 on many modules. This causes a data file
368 \code{lib\macro{jobname}.idx} to be created from the
369 \macro{declaremodule} macros. This file can be processed by the
370 \program{makeindex} program to generate a file which can be
371 \macro{input} into the document at the desired location of the
372 module index.
373 \end{macrodesc}
374
375 There are a number of macros that are useful for adding index
376 entries for particular concepts, many of which are specific to
377 programming languages or even Python.
378
379 \begin{macrodesc}{bifuncindex}{\{\var{name}\}}
380 \end{macrodesc}
381
382 \begin{macrodesc}{exindex}{\{\var{exception}\}}
383 \end{macrodesc}
384
385 \begin{macrodesc}{kwindex}{\{\var{keyword}\}}
386 \end{macrodesc}
387
388 \begin{macrodesc}{obindex}{\{\var{object type}\}}
389 \end{macrodesc}
390
391 \begin{macrodesc}{opindex}{\{\var{operator}\}}
392 \end{macrodesc}
393
394 \begin{macrodesc}{refmodindex}{{[}\var{key}{]}\{\var{module}\}}
395 Add an index entry for module \var{module}; if \var{module}
396 contains an underscore, the optional parameter \var{key} should
397 be provided as the same string with underscores removed. An
398 index entry ``\var{module} (module)'' will be generated. This
399 is intended for use with non-standard modules implemented in
400 Python.
401 \end{macrodesc}
402
403 \begin{macrodesc}{refexmodindex}{{[}\var{key}{]}\{\var{module}\}}
404 As for \macro{refmodindex}, but the index entry will be
405 ``\var{module} (extension module).'' This is intended for use
406 with non-standard modules not implemented in Python.
407 \end{macrodesc}
408
409 \begin{macrodesc}{refbimodindex}{{[}\var{key}{]}\{\var{module}\}}
410 As for \macro{refmodindex}, but the index entry will be
411 ``\var{module} (built-in module).'' This is intended for use
412 with standard modules not implemented in Python.
413 \end{macrodesc}
414
415 \begin{macrodesc}{refstmodindex}{{[}\var{key}{]}\{\var{module}\}}
416 As for \macro{refmodindex}, but the index entry will be
417 ``\var{module} (standard module).'' This is intended for use
418 with standard modules implemented in Python.
419 \end{macrodesc}
420
421 \begin{macrodesc}{stindex}{\{\var{statement}\}}
422 \end{macrodesc}
423
424
425 Additional macros are provided which are useful for conveniently
426 creating general index entries which should appear at many places
427 in the index by rotating a list of words. These are simple macros
428 that simply use \macro{index} to build some number of index
429 entries. Index entries build using these macros contain both
430 primary and secondary text.
431
432 \begin{macrodesc}{indexii}{\{\var{word1}\}\{\var{word2}\}}
433 Build two index entries. This is exactly equivalent to using
434 \code{\e index\{\var{word1}!\var{word2}\}} and
435 \code{\e index\{\var{word2}!\var{word1}\}}.
436 \end{macrodesc}
437
438 \begin{macrodesc}{indexiii}{\{\var{word1}\}\{\var{word2}\}\{\var{word3}\}}
439 Build three index entries. This is exactly equivalent to using
440 \code{\e index\{\var{word1}!\var{word2} \var{word3}\}},
441 \code{\e index\{\var{word2}!\var{word3}, \var{word1}\}}, and
442 \code{\e index\{\var{word3}!\var{word1} \var{word2}\}}.
443 \end{macrodesc}
444
445 \begin{macrodesc}{indexiv}{\{\var{word1}\}\{\var{word2}\}\{\var{word3}\}\{\var{word4}\}}
446 Build four index entries. This is exactly equivalent to using
447 \code{\e index\{\var{word1}!\var{word2} \var{word3} \var{word4}\}},
448 \code{\e index\{\var{word2}!\var{word3} \var{word4}, \var{word1}\}},
449 \code{\e index\{\var{word3}!\var{word4}, \var{word1} \var{word2}\}},
450 and
451 \code{\e index\{\var{word4}!\var{word1} \var{word2} \var{word3}\}}.
452 \end{macrodesc}
453
454
455\section{Special Names}
456
457 Many special names are used in the Python documentation, including
458 the names of operating systems, programming languages, standards
459 bodies, and the like. Many of these were assigned \LaTeX{} macros
460 at some point in the distant past, and these macros lived on long
461 past their usefulness. In the current markup, these entities are
462 not assigned any special markup, but the preferred spellings are
463 given here to aid authors in maintaining the consistency of
464 presentation in the Python documentation.
465
466 \begin{description}
467 \item[POSIX]
468 The name assigned to a particular group of standards. This is
469 always uppercase.
470
471 \item[Python]
472 The name of our favorite programming language is always
473 capitalized.
474 \end{description}
475
476
477\section{Processing Tools}
478
479 \subsection{External Tools}
480
481 Many tools are needed to be able to process the Python
482 documentation if all supported formats are required. This
483 section lists the tools used and when each is required.
484
485 \begin{description}
486 \item[\program{dvips}]
487 This program is a typical part of \TeX{} installations. It is
488 used to generate PostScript from the ``device independent''
489 \file{.dvi} files. It is only needed for the conversion to
490 PostScript.
491
492 \item[\program{emacs}]
493 Emacs is the kitchen sink of programmers' editors, and a damn
494 fine kitchen sink it is. It also comes with some of the
495 processing needed to support the proper menu structures for
496 Texinfo documents when an info conversion is desired. This is
497 only needed for the info conversion. Using \program{xemacs}
498 instead of FSF \program{emacs} may lead to instability in the
499 conversion, but that's because nobody seems to maintain the
500 Emacs Texinfo code in a portable manner.
501
502 \item[\program{latex}]
503 This is a world-class typesetter by Donald Knuth. It is used
504 for the conversion to PostScript, and is needed for the HTML
505 conversion as well (\LaTeX2HTML requires one of the
506 intermediate files it creates).
507
508 \item[\program{latex2html}]
509 Probably the longest Perl script anyone ever attempted to
510 maintain. This converts \LaTeX{} documents to HTML documents,
511 and does a pretty reasonable job. It is required for the
512 conversions to HTML and GNU info.
513
514 \item[\program{lynx}]
515 This is a text-mode Web browser which includes an
516 HTML-to-plain text conversion. This is used to convert
517 \code{howto} documents to text.
518
519 \item[\program{make}]
520 Just about any version should work for the standard documents,
521 but GNU \program{make} is required for the experimental
522 processes in \file{Doc/tools/sgmlconv/}, at least while
523 they're experimental.
524
525 \item[\program{makeindex}]
526 This is a standard program for converting \LaTeX{} index data
527 to a formatted index; it should be included with all \LaTeX{}
528 installations. It is needed for the PDF and PostScript
529 conversions.
530
531 \item[\program{makeinfo}]
532 GNU \program{makeinfo} is used to convert Texinfo documents to
533 GNU info files. Since Texinfo is used as an intermediate
534 format in the info conversion, this program is needed in that
535 conversion.
536
537 \item[\program{pdflatex}]
538 pdf\TeX{} is a relatively new variant of \TeX, and is used to
539 generate the PDF version of the manuals. It is typically
540 installed as part of most of the large \TeX{} distributions.
541 \program{pdflatex} is PDF\TeX{} using the \LaTeX{} format.
542
543 \item[\program{perl}]
544 Perl is required for \LaTeX2HTML{} and one of the scripts used
545 to post-process \LaTeX2HTML output, as well as the
546 HTML-to-Texinfo conversion. This is only required for
547 the HTML and GNU info conversions.
548
549 \item[\program{python}]
550 Python is used for many of the scripts in the
551 \file{Doc/tools/} directory; it is required for all
552 conversions. This shouldn't be a problem if you're interested
553 in writing documentation for Python!
554 \end{description}
555
556
557 \subsection{Internal Tools}
558
559 This section describes the various scripts that are used to
560 implement various stages of document processing or to orchestrate
561 entire build sequences. Most of these tools are still only useful
562 in the context of building the standard documentation, but some
563 are more general.
564
565 \begin{description}
566 \item[\program{mkhowto}]
567 \end{description}
568
569
570\section{Future Directions \label{futures}}
571
572 The history of the Python documentation is full of changes, most of
573 which have been fairly small and evolutionary. There has been a
574 great deal of discussion about making large changes in the markup
575 languages and tools used to process the documentation. This section
576 deals with the nature of the changes and what appears to be the most
577 likely path of future development.
578
579 \subsection{Structured Documentation \label{structured}}
580
581 Most of the small changes to the \LaTeX{} markup have been made
582 with an eye to divorcing the markup from the presentation, making
583 both a bit more maintainable. Over the course of 1998, a large
584 number of changes were made with exactly this in mind; previously,
585 changes had been made but in a less systematic manner and with
586 more concern for not needing to update the existing content. The
587 result has been a highly structured and semantically loaded markup
588 language implemented in \LaTeX. With almost no basic \TeX{} or
589 \LaTeX{} markup in use, however, the markup syntax is about the
590 only evidence of \LaTeX{} in the actual document sources.
591
592 One side effect of this is that while we've been able to use
593 standard ``engines'' for manipulating the documents, such as
594 \LaTeX{} and \LaTeX2HTML, most of the actual transformations have
595 been created specifically for this documentation. The \LaTeX{}
596 document classes and \LaTeX2HTML support are both complete
597 implementations of the specific markup designed for these
598 documents.
599
600 Combining highly customized markup with the somewhat esoteric
601 systems used to process the documents leads us to ask some
602 questions: Can we do this more easily? and, Can we do this
603 better? After a great deal of discussion with the community, we
604 have determined that actively pursuing modern structured
605 documentation systems worth some investment of time.
606
607 There appear to be two real contenders in this arena: the Standard
608 General Markup Language (SGML), and the Extensible Markup Language
609 (XML). Both of these standards have advantages and disadvantages,
610 and many advantages are shared.
611
612 SGML offers advantages which may appeal most to authors,
613 especially those using ordinary text editors. There are also
614 additional abilities to define content models. A number of
615 high-quality tools with demonstrated maturity is available, but
616 most are not free; for those which are, portability issues remain
617 a problem.
618
619 The advantages of XML include the availability of a large number
620 of evolving tools. Unfortunately, many of the associated
621 standards are still evolving, and the tools will have to follow
622 along. This means that developing a robust tool set that uses
623 more than the basic XML 1.0 recommendation is not possible in the
624 short term. The promised availability of a wide variety of
625 high-quality tools which support some of the most important
626 related standards is not immediate. Many tools are likely to be
627 free.
628
629 [Eventual migration to SGML/XML.]
630
631 \subsection{Discussion Forums \label{discussion}}
632
633 Discussion of the future of the Python documentation and related
634 topics takes place in the ``Doc-SIG'' special interest group.
635 Information on the group, including mailing list archives and
636 subscriptions, is available at
637 \url{http://www.python.org/sigs/doc-sig/}. The SIG is open to all
638 interested parties.
639
640 Comments and bug reports on the standard documents should be sent
641 to \email{python-docs@python.org}. This may include comments
642 about formatting, content, or grammatical errors.
643
644\end{document}