| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | .. highlightlang:: rest
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | reStructuredText Primer
 | 
					
						
							|  |  |  | =======================
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | This section is a brief introduction to reStructuredText (reST) concepts and
 | 
					
						
							|  |  |  | syntax, intended to provide authors with enough information to author documents
 | 
					
						
							|  |  |  | productively.  Since reST was designed to be a simple, unobtrusive markup
 | 
					
						
							|  |  |  | language, this will not take too long.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .. seealso::
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     The authoritative `reStructuredText User
 | 
					
						
							|  |  |  |     Documentation <http://docutils.sourceforge.net/rst.html>`_.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Paragraphs
 | 
					
						
							|  |  |  | ----------
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | The paragraph is the most basic block in a reST document.  Paragraphs are simply
 | 
					
						
							|  |  |  | chunks of text separated by one or more blank lines.  As in Python, indentation
 | 
					
						
							|  |  |  | is significant in reST, so all lines of the same paragraph must be left-aligned
 | 
					
						
							|  |  |  | to the same level of indentation.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Inline markup
 | 
					
						
							|  |  |  | -------------
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | The standard reST inline markup is quite simple: use
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | * one asterisk: ``*text*`` for emphasis (italics),
 | 
					
						
							|  |  |  | * two asterisks: ``**text**`` for strong emphasis (boldface), and
 | 
					
						
							|  |  |  | * backquotes: ````text```` for code samples.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | If asterisks or backquotes appear in running text and could be confused with
 | 
					
						
							|  |  |  | inline markup delimiters, they have to be escaped with a backslash.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Be aware of some restrictions of this markup:
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | * it may not be nested,
 | 
					
						
							|  |  |  | * content may not start or end with whitespace: ``* text*`` is wrong,
 | 
					
						
							|  |  |  | * it must be separated from surrounding text by non-word characters.  Use a
 | 
					
						
							|  |  |  |   backslash escaped space to work around that: ``thisis\ *one*\ word``.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | These restrictions may be lifted in future versions of the docutils.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | reST also allows for custom "interpreted text roles"', which signify that the
 | 
					
						
							|  |  |  | enclosed text should be interpreted in a specific way.  Sphinx uses this to
 | 
					
						
							|  |  |  | provide semantic markup and cross-referencing of identifiers, as described in
 | 
					
						
							|  |  |  | the appropriate section.  The general syntax is ``:rolename:`content```.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Lists and Quotes
 | 
					
						
							|  |  |  | ----------------
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | List markup is natural: just place an asterisk at the start of a paragraph and
 | 
					
						
							|  |  |  | indent properly.  The same goes for numbered lists; they can also be
 | 
					
						
							|  |  |  | autonumbered using a ``#`` sign::
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    * This is a bulleted list.
 | 
					
						
							|  |  |  |    * It has two items, the second
 | 
					
						
							|  |  |  |      item uses two lines.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    1. This is a numbered list.
 | 
					
						
							|  |  |  |    2. It has two items too.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    #. This is a numbered list.
 | 
					
						
							|  |  |  |    #. It has two items too.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Nested lists are possible, but be aware that they must be separated from the
 | 
					
						
							|  |  |  | parent list items by blank lines::
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    * this is
 | 
					
						
							|  |  |  |    * a list
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |      * with a nested list
 | 
					
						
							|  |  |  |      * and some subitems
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    * and here the parent list continues
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Definition lists are created as follows::
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    term (up to a line of text)
 | 
					
						
							|  |  |  |       Definition of the term, which must be indented
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       and can even consist of multiple paragraphs
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    next term
 | 
					
						
							|  |  |  |       Description.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Paragraphs are quoted by just indenting them more than the surrounding
 | 
					
						
							|  |  |  | paragraphs.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Source Code
 | 
					
						
							|  |  |  | -----------
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Literal code blocks are introduced by ending a paragraph with the special marker
 | 
					
						
							| 
									
										
											  
											
												Merged revisions 67531-67532,67538,67553-67554,67556-67557,67571,67574-67575,67579-67580,67591,67597,67608,67631 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r67531 | georg.brandl | 2008-12-04 19:54:05 +0100 (Thu, 04 Dec 2008) | 2 lines
  Add reference to enumerate() to indices example.
........
  r67532 | georg.brandl | 2008-12-04 19:59:16 +0100 (Thu, 04 Dec 2008) | 2 lines
  Add another heapq example.
........
  r67538 | georg.brandl | 2008-12-04 22:28:16 +0100 (Thu, 04 Dec 2008) | 2 lines
  Clarification to avoid confusing output with file descriptors.
........
  r67553 | georg.brandl | 2008-12-05 08:49:49 +0100 (Fri, 05 Dec 2008) | 2 lines
  #4408: document regex.groups.
........
  r67554 | georg.brandl | 2008-12-05 08:52:26 +0100 (Fri, 05 Dec 2008) | 2 lines
  #4409: fix asterisks looking like footnotes.
........
  r67556 | georg.brandl | 2008-12-05 09:02:17 +0100 (Fri, 05 Dec 2008) | 2 lines
  #4441: improve doc for os.open() flags.
........
  r67557 | georg.brandl | 2008-12-05 09:06:57 +0100 (Fri, 05 Dec 2008) | 2 lines
  Add an index entry for "subclassing immutable types".
........
  r67571 | georg.brandl | 2008-12-05 10:13:45 +0100 (Fri, 05 Dec 2008) | 2 lines
  Use markup.
........
  r67574 | georg.brandl | 2008-12-05 10:25:32 +0100 (Fri, 05 Dec 2008) | 2 lines
  #4441 followup: Add link to open() docs for Windows.
........
  r67575 | georg.brandl | 2008-12-05 12:34:51 +0100 (Fri, 05 Dec 2008) | 2 lines
  #4544: add `dedent` to textwrap.__all__.
........
  r67579 | georg.brandl | 2008-12-05 16:29:39 +0100 (Fri, 05 Dec 2008) | 2 lines
  #4517: add "special method" glossary entry and clarify when __getattribute__ is bypassed.
........
  r67580 | georg.brandl | 2008-12-05 16:32:29 +0100 (Fri, 05 Dec 2008) | 2 lines
  #4478: document that copyfile() can raise Error.
........
  r67591 | georg.brandl | 2008-12-05 19:00:06 +0100 (Fri, 05 Dec 2008) | 2 lines
  Followup to #4511: add link from decorator glossary entry to definition.
........
  r67597 | georg.brandl | 2008-12-05 20:03:19 +0100 (Fri, 05 Dec 2008) | 2 lines
  Remove confusing sentence part.
........
  r67608 | georg.brandl | 2008-12-06 12:57:12 +0100 (Sat, 06 Dec 2008) | 2 lines
  Follow-up to #4488: document PIPE and STDOUT properly.
........
  r67631 | georg.brandl | 2008-12-07 12:54:07 +0100 (Sun, 07 Dec 2008) | 2 lines
  Add link to the favicon to the docs.
........
											
										 
											2008-12-07 15:06:20 +00:00
										 |  |  | ``::``.  The literal block must be indented::
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |    This is a normal text paragraph. The next paragraph is a code sample::
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       It is not processed in any way, except
 | 
					
						
							|  |  |  |       that the indentation is removed.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       It can span multiple lines.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    This is a normal text paragraph again.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | The handling of the ``::`` marker is smart:
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | * If it occurs as a paragraph of its own, that paragraph is completely left
 | 
					
						
							|  |  |  |   out of the document.
 | 
					
						
							|  |  |  | * If it is preceded by whitespace, the marker is removed.
 | 
					
						
							|  |  |  | * If it is preceded by non-whitespace, the marker is replaced by a single
 | 
					
						
							|  |  |  |   colon.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | That way, the second sentence in the above example's first paragraph would be
 | 
					
						
							|  |  |  | rendered as "The next paragraph is a code sample:".
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Hyperlinks
 | 
					
						
							|  |  |  | ----------
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | External links
 | 
					
						
							|  |  |  | ^^^^^^^^^^^^^^
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Use ```Link text <http://target>`_`` for inline web links.  If the link text
 | 
					
						
							|  |  |  | should be the web address, you don't need special markup at all, the parser
 | 
					
						
							|  |  |  | finds links and mail addresses in ordinary text.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Internal links
 | 
					
						
							|  |  |  | ^^^^^^^^^^^^^^
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Internal linking is done via a special reST role, see the section on specific
 | 
					
						
							|  |  |  | markup, :ref:`doc-ref-role`.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Sections
 | 
					
						
							|  |  |  | --------
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Section headers are created by underlining (and optionally overlining) the
 | 
					
						
							|  |  |  | section title with a punctuation character, at least as long as the text::
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    =================
 | 
					
						
							|  |  |  |    This is a heading
 | 
					
						
							|  |  |  |    =================
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Normally, there are no heading levels assigned to certain characters as the
 | 
					
						
							|  |  |  | structure is determined from the succession of headings.  However, for the
 | 
					
						
							|  |  |  | Python documentation, we use this convention:
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | * ``#`` with overline, for parts
 | 
					
						
							|  |  |  | * ``*`` with overline, for chapters
 | 
					
						
							|  |  |  | * ``=``, for sections
 | 
					
						
							|  |  |  | * ``-``, for subsections
 | 
					
						
							|  |  |  | * ``^``, for subsubsections
 | 
					
						
							|  |  |  | * ``"``, for paragraphs
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Explicit Markup
 | 
					
						
							|  |  |  | ---------------
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | "Explicit markup" is used in reST for most constructs that need special
 | 
					
						
							|  |  |  | handling, such as footnotes, specially-highlighted paragraphs, comments, and
 | 
					
						
							|  |  |  | generic directives.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | An explicit markup block begins with a line starting with ``..`` followed by
 | 
					
						
							|  |  |  | whitespace and is terminated by the next paragraph at the same level of
 | 
					
						
							|  |  |  | indentation.  (There needs to be a blank line between explicit markup and normal
 | 
					
						
							|  |  |  | paragraphs.  This may all sound a bit complicated, but it is intuitive enough
 | 
					
						
							|  |  |  | when you write it.)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Directives
 | 
					
						
							|  |  |  | ----------
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | A directive is a generic block of explicit markup.  Besides roles, it is one of
 | 
					
						
							|  |  |  | the extension mechanisms of reST, and Sphinx makes heavy use of it.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Basically, a directive consists of a name, arguments, options and content. (Keep
 | 
					
						
							|  |  |  | this terminology in mind, it is used in the next chapter describing custom
 | 
					
						
							|  |  |  | directives.)  Looking at this example, ::
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    .. function:: foo(x)
 | 
					
						
							|  |  |  |                  foo(y, z)
 | 
					
						
							|  |  |  |       :bar: no
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       Return a line of text input from the user.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ``function`` is the directive name.  It is given two arguments here, the
 | 
					
						
							|  |  |  | remainder of the first line and the second line, as well as one option ``bar``
 | 
					
						
							|  |  |  | (as you can see, options are given in the lines immediately following the
 | 
					
						
							|  |  |  | arguments and indicated by the colons).
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | The directive content follows after a blank line and is indented relative to the
 | 
					
						
							|  |  |  | directive start.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Footnotes
 | 
					
						
							|  |  |  | ---------
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | For footnotes, use ``[#]_`` to mark the footnote location, and add the footnote
 | 
					
						
							|  |  |  | body at the bottom of the document after a "Footnotes" rubric heading, like so::
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    Lorem ipsum [#]_ dolor sit amet ... [#]_
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    .. rubric:: Footnotes
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    .. [#] Text of the first footnote.
 | 
					
						
							|  |  |  |    .. [#] Text of the second footnote.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | You can also explicitly number the footnotes for better context.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Comments
 | 
					
						
							|  |  |  | --------
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Every explicit markup block which isn't a valid markup construct (like the
 | 
					
						
							|  |  |  | footnotes above) is regarded as a comment.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Source encoding
 | 
					
						
							|  |  |  | ---------------
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Since the easiest way to include special characters like em dashes or copyright
 | 
					
						
							|  |  |  | signs in reST is to directly write them as Unicode characters, one has to
 | 
					
						
							|  |  |  | specify an encoding:
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | All Python documentation source files must be in UTF-8 encoding, and the HTML
 | 
					
						
							|  |  |  | documents written from them will be in that encoding as well.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Gotchas
 | 
					
						
							|  |  |  | -------
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | There are some problems one commonly runs into while authoring reST documents:
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | * **Separation of inline markup:** As said above, inline markup spans must be
 | 
					
						
							|  |  |  |   separated from the surrounding text by non-word characters, you have to use
 | 
					
						
							|  |  |  |   an escaped space to get around that.
 |