2008-03-15 04:06:04 -05:00
|
|
|
.. highlight:: rest
|
|
|
|
|
2008-09-09 14:10:09 -05:00
|
|
|
.. _code-examples:
|
|
|
|
|
2008-03-15 04:06:04 -05:00
|
|
|
Showing code examples
|
|
|
|
---------------------
|
|
|
|
|
2008-03-16 06:19:26 -05:00
|
|
|
.. index:: pair: code; examples
|
|
|
|
single: sourcecode
|
|
|
|
|
2008-03-15 04:06:04 -05:00
|
|
|
Examples of Python source code or interactive sessions are represented using
|
|
|
|
standard reST literal blocks. They are started by a ``::`` at the end of the
|
|
|
|
preceding paragraph and delimited by indentation.
|
|
|
|
|
|
|
|
Representing an interactive session requires including the prompts and output
|
|
|
|
along with the Python code. No special markup is required for interactive
|
|
|
|
sessions. After the last line of input or output presented, there should not be
|
|
|
|
an "unused" primary prompt; this is an example of what *not* to do::
|
|
|
|
|
|
|
|
>>> 1 + 1
|
|
|
|
2
|
|
|
|
>>>
|
|
|
|
|
|
|
|
Syntax highlighting is done with `Pygments <http://pygments.org>`_ (if it's
|
|
|
|
installed) and handled in a smart way:
|
|
|
|
|
|
|
|
* There is a "highlighting language" for each source file. Per default, this is
|
2008-09-09 14:10:09 -05:00
|
|
|
``'python'`` as the majority of files will have to highlight Python snippets,
|
|
|
|
but the doc-wide default can be set with the :confval:`highlight_language`
|
|
|
|
config value.
|
2008-03-15 04:06:04 -05:00
|
|
|
|
|
|
|
* Within Python highlighting mode, interactive sessions are recognized
|
2009-02-23 12:23:08 -06:00
|
|
|
automatically and highlighted appropriately. Normal Python code is only
|
|
|
|
highlighted if it is parseable (so you can use Python as the default, but
|
|
|
|
interspersed snippets of shell commands or other code blocks will not be
|
|
|
|
highlighted as Python).
|
2008-03-15 04:06:04 -05:00
|
|
|
|
|
|
|
* The highlighting language can be changed using the ``highlight`` directive,
|
2014-09-19 06:18:29 -05:00
|
|
|
used as follows:
|
2008-03-15 04:06:04 -05:00
|
|
|
|
2014-09-19 06:18:29 -05:00
|
|
|
.. rst:directive:: .. highlight:: language
|
2008-03-15 04:06:04 -05:00
|
|
|
|
2014-09-19 06:18:29 -05:00
|
|
|
Example::
|
|
|
|
|
|
|
|
.. highlight:: c
|
|
|
|
|
|
|
|
This language is used until the next ``highlight`` directive is encountered.
|
2008-03-15 04:06:04 -05:00
|
|
|
|
|
|
|
* For documents that have to show snippets in different languages, there's also
|
2010-04-17 03:39:51 -05:00
|
|
|
a :rst:dir:`code-block` directive that is given the highlighting language
|
2014-09-19 06:18:29 -05:00
|
|
|
directly:
|
|
|
|
|
|
|
|
.. rst:directive:: .. code-block:: language
|
|
|
|
|
|
|
|
Use it like this::
|
2008-03-15 04:06:04 -05:00
|
|
|
|
2014-09-19 06:18:29 -05:00
|
|
|
.. code-block:: ruby
|
2008-03-15 04:06:04 -05:00
|
|
|
|
2014-09-19 06:18:29 -05:00
|
|
|
Some Ruby code.
|
2008-03-15 04:06:04 -05:00
|
|
|
|
2014-09-19 06:18:29 -05:00
|
|
|
The directive's alias name :rst:dir:`sourcecode` works as well.
|
2008-03-15 04:06:04 -05:00
|
|
|
|
|
|
|
* The valid values for the highlighting language are:
|
|
|
|
|
|
|
|
* ``none`` (no highlighting)
|
2008-09-09 14:10:09 -05:00
|
|
|
* ``python`` (the default when :confval:`highlight_language` isn't set)
|
2008-09-23 16:27:12 -05:00
|
|
|
* ``guess`` (let Pygments guess the lexer based on contents, only works with
|
|
|
|
certain well-recognizable languages)
|
2008-03-15 04:06:04 -05:00
|
|
|
* ``rest``
|
|
|
|
* ``c``
|
2014-01-22 10:28:04 -06:00
|
|
|
* ... and any other `lexer alias that Pygments supports
|
|
|
|
<http://pygments.org/docs/lexers/>`_.
|
2008-03-15 04:06:04 -05:00
|
|
|
|
2014-01-11 03:00:49 -06:00
|
|
|
* If highlighting with the selected language fails (i.e. Pygments emits an
|
|
|
|
"Error" token), the block is not highlighted in any way.
|
2008-03-15 04:06:04 -05:00
|
|
|
|
|
|
|
Line numbers
|
|
|
|
^^^^^^^^^^^^
|
|
|
|
|
|
|
|
If installed, Pygments can generate line numbers for code blocks. For
|
|
|
|
automatically-highlighted blocks (those started by ``::``), line numbers must be
|
2010-04-17 03:39:51 -05:00
|
|
|
switched on in a :rst:dir:`highlight` directive, with the ``linenothreshold``
|
2008-03-15 04:06:04 -05:00
|
|
|
option::
|
|
|
|
|
|
|
|
.. highlight:: python
|
|
|
|
:linenothreshold: 5
|
|
|
|
|
|
|
|
This will produce line numbers for all code blocks longer than five lines.
|
|
|
|
|
2014-06-18 10:53:25 -05:00
|
|
|
For :rst:dir:`code-block` blocks, a ``linenos`` flag option can be given to
|
|
|
|
switch on line numbers for the individual block::
|
2008-03-15 04:06:04 -05:00
|
|
|
|
|
|
|
.. code-block:: ruby
|
|
|
|
:linenos:
|
|
|
|
|
|
|
|
Some more Ruby code.
|
|
|
|
|
2014-01-11 01:44:45 -06:00
|
|
|
The first line number can be selected with the ``lineno-start`` option. If
|
|
|
|
present, ``linenos`` is automatically activated as well.
|
|
|
|
|
|
|
|
.. code-block:: ruby
|
|
|
|
:lineno-start: 10
|
|
|
|
|
|
|
|
Some more Ruby code, with line numbering starting at 10.
|
|
|
|
|
2011-07-06 21:58:19 -05:00
|
|
|
Additionally, an ``emphasize-lines`` option can be given to have Pygments
|
|
|
|
emphasize particular lines::
|
|
|
|
|
|
|
|
.. code-block:: python
|
|
|
|
:emphasize-lines: 3,5
|
|
|
|
|
|
|
|
def some_function():
|
|
|
|
interesting = False
|
|
|
|
print 'This line is highlighted.'
|
|
|
|
print 'This one is not...'
|
|
|
|
print '...but this one is.'
|
|
|
|
|
2011-09-22 02:29:36 -05:00
|
|
|
.. versionchanged:: 1.1
|
|
|
|
``emphasize-lines`` has been added.
|
|
|
|
|
2014-01-11 01:44:45 -06:00
|
|
|
.. versionchanged:: 1.3
|
|
|
|
``lineno-start`` has been added.
|
|
|
|
|
2008-03-15 04:06:04 -05:00
|
|
|
|
|
|
|
Includes
|
|
|
|
^^^^^^^^
|
|
|
|
|
2010-04-17 03:39:51 -05:00
|
|
|
.. rst:directive:: .. literalinclude:: filename
|
2008-03-16 06:19:26 -05:00
|
|
|
|
2014-06-18 10:53:25 -05:00
|
|
|
Longer displays of verbatim text may be included by storing the example text
|
|
|
|
in an external file containing only plain text. The file may be included
|
|
|
|
using the ``literalinclude`` directive. [1]_ For example, to include the
|
|
|
|
Python source file :file:`example.py`, use::
|
2008-03-16 06:19:26 -05:00
|
|
|
|
|
|
|
.. literalinclude:: example.py
|
2008-03-15 04:06:04 -05:00
|
|
|
|
2009-02-24 06:38:15 -06:00
|
|
|
The file name is usually relative to the current file's path. However, if it
|
|
|
|
is absolute (starting with ``/``), it is relative to the top source
|
|
|
|
directory.
|
2008-03-15 04:06:04 -05:00
|
|
|
|
2010-01-08 11:36:58 -06:00
|
|
|
Tabs in the input are expanded if you give a ``tab-width`` option with the
|
|
|
|
desired tab width.
|
|
|
|
|
2014-01-11 01:44:45 -06:00
|
|
|
Like :rst:dir:`code-block`, the directive supports the ``linenos`` flag
|
|
|
|
option to switch on line numbers, the ``lineno-start`` option to select the
|
|
|
|
first line number, the ``emphasize-lines`` option to emphasize particular
|
|
|
|
lines, and a ``language`` option to select a language different from the
|
|
|
|
current file's standard language. Example with options::
|
2009-01-10 15:18:18 -06:00
|
|
|
|
2008-03-16 06:19:26 -05:00
|
|
|
.. literalinclude:: example.rb
|
|
|
|
:language: ruby
|
2011-07-06 21:58:19 -05:00
|
|
|
:emphasize-lines: 12,15-18
|
2008-03-16 06:19:26 -05:00
|
|
|
:linenos:
|
2008-03-15 04:06:04 -05:00
|
|
|
|
2008-10-16 15:31:28 -05:00
|
|
|
Include files are assumed to be encoded in the :confval:`source_encoding`.
|
|
|
|
If the file has a different encoding, you can specify it with the
|
|
|
|
``encoding`` option::
|
Merged revisions 65283,65303,65316-65317,65372-65375,65377,65380,65483-65485,65494 via svnmerge from
svn+ssh://pythondev@svn.python.org/doctools/branches/0.4.x
........
r65283 | georg.brandl | 2008-07-29 10:07:26 +0000 (Tue, 29 Jul 2008) | 2 lines
Update ez_setup.py.
........
r65303 | benjamin.peterson | 2008-07-30 12:35:34 +0000 (Wed, 30 Jul 2008) | 1 line
add a with_testapp decorator for test functions that passes the TestApp instance in a cleans up after it
........
r65316 | benjamin.peterson | 2008-07-30 23:12:07 +0000 (Wed, 30 Jul 2008) | 1 line
make the app for test_markup global to the module
........
r65317 | benjamin.peterson | 2008-07-30 23:31:29 +0000 (Wed, 30 Jul 2008) | 1 line
make TestApp.cleanup more aggressive
........
r65372 | georg.brandl | 2008-08-01 19:11:22 +0000 (Fri, 01 Aug 2008) | 2 lines
Add more tests, fix a few bugs in image handling.
........
r65373 | georg.brandl | 2008-08-01 19:28:33 +0000 (Fri, 01 Aug 2008) | 2 lines
Fix oversight.
........
r65374 | benjamin.peterson | 2008-08-01 19:36:32 +0000 (Fri, 01 Aug 2008) | 1 line
fix one broken test
........
r65375 | georg.brandl | 2008-08-01 19:41:11 +0000 (Fri, 01 Aug 2008) | 2 lines
Fix the handling of non-ASCII input in quickstart.
........
r65377 | georg.brandl | 2008-08-01 19:48:24 +0000 (Fri, 01 Aug 2008) | 2 lines
Allow REs in markup checks.
........
r65380 | georg.brandl | 2008-08-01 20:31:18 +0000 (Fri, 01 Aug 2008) | 2 lines
Don't rely on mtimes being different for changed files.
........
r65483 | georg.brandl | 2008-08-04 09:01:40 +0000 (Mon, 04 Aug 2008) | 4 lines
Add an "encoding" option to literalinclude.
Add tests for include directives.
........
r65484 | georg.brandl | 2008-08-04 09:11:17 +0000 (Mon, 04 Aug 2008) | 2 lines
Add changelog entry.
........
r65485 | georg.brandl | 2008-08-04 09:21:58 +0000 (Mon, 04 Aug 2008) | 2 lines
Fix markup.
........
r65494 | georg.brandl | 2008-08-04 16:34:59 +0000 (Mon, 04 Aug 2008) | 2 lines
Correctly use HTML file suffix in templates.
........
2008-08-04 12:01:15 -05:00
|
|
|
|
|
|
|
.. literalinclude:: example.py
|
|
|
|
:encoding: latin-1
|
|
|
|
|
2008-12-30 08:45:02 -06:00
|
|
|
The directive also supports including only parts of the file. If it is a
|
|
|
|
Python module, you can select a class, function or method to include using
|
|
|
|
the ``pyobject`` option::
|
|
|
|
|
|
|
|
.. literalinclude:: example.py
|
|
|
|
:pyobject: Timer.start
|
|
|
|
|
|
|
|
This would only include the code lines belonging to the ``start()`` method in
|
|
|
|
the ``Timer`` class within the file.
|
|
|
|
|
2009-01-01 17:32:02 -06:00
|
|
|
Alternately, you can specify exactly which lines to include by giving a
|
|
|
|
``lines`` option::
|
|
|
|
|
|
|
|
.. literalinclude:: example.py
|
|
|
|
:lines: 1,3,5-10,20-
|
|
|
|
|
|
|
|
This includes the lines 1, 3, 5 to 10 and lines 20 to the last line.
|
|
|
|
|
|
|
|
Another way to control which part of the file is included is to use the
|
|
|
|
``start-after`` and ``end-before`` options (or only one of them). If
|
|
|
|
``start-after`` is given as a string option, only lines that follow the first
|
|
|
|
line containing that string are included. If ``end-before`` is given as a
|
|
|
|
string option, only lines that precede the first lines containing that string
|
|
|
|
are included.
|
|
|
|
|
2014-10-04 08:36:38 -05:00
|
|
|
When specifying particular parts of a file to display, it can be useful to
|
|
|
|
display exactly which lines are being presented.
|
|
|
|
This can be done using the ``lineno-match`` option.
|
|
|
|
|
2009-06-04 10:57:58 -05:00
|
|
|
You can prepend and/or append a line to the included code, using the
|
|
|
|
``prepend`` and ``append`` option, respectively. This is useful e.g. for
|
|
|
|
highlighting PHP code that doesn't include the ``<?php``/``?>`` markers.
|
|
|
|
|
2014-08-12 00:11:54 -05:00
|
|
|
|
|
|
|
If you want to show the diff of the code, you can specify the old
|
|
|
|
file by giving a ``diff`` option::
|
|
|
|
|
|
|
|
.. literalinclude:: example.py
|
|
|
|
:diff: example.py.orig
|
|
|
|
|
2014-10-04 08:36:38 -05:00
|
|
|
This shows the diff between example.py and example.py.orig with unified diff
|
|
|
|
format.
|
2014-08-12 00:11:54 -05:00
|
|
|
|
Merged revisions 65283,65303,65316-65317,65372-65375,65377,65380,65483-65485,65494 via svnmerge from
svn+ssh://pythondev@svn.python.org/doctools/branches/0.4.x
........
r65283 | georg.brandl | 2008-07-29 10:07:26 +0000 (Tue, 29 Jul 2008) | 2 lines
Update ez_setup.py.
........
r65303 | benjamin.peterson | 2008-07-30 12:35:34 +0000 (Wed, 30 Jul 2008) | 1 line
add a with_testapp decorator for test functions that passes the TestApp instance in a cleans up after it
........
r65316 | benjamin.peterson | 2008-07-30 23:12:07 +0000 (Wed, 30 Jul 2008) | 1 line
make the app for test_markup global to the module
........
r65317 | benjamin.peterson | 2008-07-30 23:31:29 +0000 (Wed, 30 Jul 2008) | 1 line
make TestApp.cleanup more aggressive
........
r65372 | georg.brandl | 2008-08-01 19:11:22 +0000 (Fri, 01 Aug 2008) | 2 lines
Add more tests, fix a few bugs in image handling.
........
r65373 | georg.brandl | 2008-08-01 19:28:33 +0000 (Fri, 01 Aug 2008) | 2 lines
Fix oversight.
........
r65374 | benjamin.peterson | 2008-08-01 19:36:32 +0000 (Fri, 01 Aug 2008) | 1 line
fix one broken test
........
r65375 | georg.brandl | 2008-08-01 19:41:11 +0000 (Fri, 01 Aug 2008) | 2 lines
Fix the handling of non-ASCII input in quickstart.
........
r65377 | georg.brandl | 2008-08-01 19:48:24 +0000 (Fri, 01 Aug 2008) | 2 lines
Allow REs in markup checks.
........
r65380 | georg.brandl | 2008-08-01 20:31:18 +0000 (Fri, 01 Aug 2008) | 2 lines
Don't rely on mtimes being different for changed files.
........
r65483 | georg.brandl | 2008-08-04 09:01:40 +0000 (Mon, 04 Aug 2008) | 4 lines
Add an "encoding" option to literalinclude.
Add tests for include directives.
........
r65484 | georg.brandl | 2008-08-04 09:11:17 +0000 (Mon, 04 Aug 2008) | 2 lines
Add changelog entry.
........
r65485 | georg.brandl | 2008-08-04 09:21:58 +0000 (Mon, 04 Aug 2008) | 2 lines
Fix markup.
........
r65494 | georg.brandl | 2008-08-04 16:34:59 +0000 (Mon, 04 Aug 2008) | 2 lines
Correctly use HTML file suffix in templates.
........
2008-08-04 12:01:15 -05:00
|
|
|
.. versionadded:: 0.4.3
|
|
|
|
The ``encoding`` option.
|
2008-12-30 08:45:02 -06:00
|
|
|
.. versionadded:: 0.6
|
2009-02-24 06:38:15 -06:00
|
|
|
The ``pyobject``, ``lines``, ``start-after`` and ``end-before`` options,
|
|
|
|
as well as support for absolute filenames.
|
2009-06-04 10:57:58 -05:00
|
|
|
.. versionadded:: 1.0
|
2010-01-08 11:36:58 -06:00
|
|
|
The ``prepend`` and ``append`` options, as well as ``tab-width``.
|
2014-08-12 00:11:54 -05:00
|
|
|
.. versionadded:: 1.3
|
|
|
|
The ``diff`` option.
|
2014-10-04 08:36:38 -05:00
|
|
|
The ``lineno-match`` option.
|
Merged revisions 65283,65303,65316-65317,65372-65375,65377,65380,65483-65485,65494 via svnmerge from
svn+ssh://pythondev@svn.python.org/doctools/branches/0.4.x
........
r65283 | georg.brandl | 2008-07-29 10:07:26 +0000 (Tue, 29 Jul 2008) | 2 lines
Update ez_setup.py.
........
r65303 | benjamin.peterson | 2008-07-30 12:35:34 +0000 (Wed, 30 Jul 2008) | 1 line
add a with_testapp decorator for test functions that passes the TestApp instance in a cleans up after it
........
r65316 | benjamin.peterson | 2008-07-30 23:12:07 +0000 (Wed, 30 Jul 2008) | 1 line
make the app for test_markup global to the module
........
r65317 | benjamin.peterson | 2008-07-30 23:31:29 +0000 (Wed, 30 Jul 2008) | 1 line
make TestApp.cleanup more aggressive
........
r65372 | georg.brandl | 2008-08-01 19:11:22 +0000 (Fri, 01 Aug 2008) | 2 lines
Add more tests, fix a few bugs in image handling.
........
r65373 | georg.brandl | 2008-08-01 19:28:33 +0000 (Fri, 01 Aug 2008) | 2 lines
Fix oversight.
........
r65374 | benjamin.peterson | 2008-08-01 19:36:32 +0000 (Fri, 01 Aug 2008) | 1 line
fix one broken test
........
r65375 | georg.brandl | 2008-08-01 19:41:11 +0000 (Fri, 01 Aug 2008) | 2 lines
Fix the handling of non-ASCII input in quickstart.
........
r65377 | georg.brandl | 2008-08-01 19:48:24 +0000 (Fri, 01 Aug 2008) | 2 lines
Allow REs in markup checks.
........
r65380 | georg.brandl | 2008-08-01 20:31:18 +0000 (Fri, 01 Aug 2008) | 2 lines
Don't rely on mtimes being different for changed files.
........
r65483 | georg.brandl | 2008-08-04 09:01:40 +0000 (Mon, 04 Aug 2008) | 4 lines
Add an "encoding" option to literalinclude.
Add tests for include directives.
........
r65484 | georg.brandl | 2008-08-04 09:11:17 +0000 (Mon, 04 Aug 2008) | 2 lines
Add changelog entry.
........
r65485 | georg.brandl | 2008-08-04 09:21:58 +0000 (Mon, 04 Aug 2008) | 2 lines
Fix markup.
........
r65494 | georg.brandl | 2008-08-04 16:34:59 +0000 (Mon, 04 Aug 2008) | 2 lines
Correctly use HTML file suffix in templates.
........
2008-08-04 12:01:15 -05:00
|
|
|
|
2008-03-15 04:06:04 -05:00
|
|
|
|
2014-01-19 04:04:12 -06:00
|
|
|
Showing a file name
|
|
|
|
^^^^^^^^^^^^^^^^^^^
|
|
|
|
|
|
|
|
.. versionadded:: 1.3
|
|
|
|
|
2014-08-23 21:07:36 -05:00
|
|
|
A ``caption`` option can be given to show that name before the code block. For
|
2014-01-19 04:04:12 -06:00
|
|
|
example::
|
|
|
|
|
|
|
|
.. code-block:: python
|
2014-08-23 21:07:36 -05:00
|
|
|
:caption: this.py
|
2014-01-19 04:04:12 -06:00
|
|
|
|
|
|
|
print 'Explicit is better than implicit.'
|
|
|
|
|
|
|
|
|
2014-08-23 21:07:36 -05:00
|
|
|
:rst:dir:`literalinclude` also supports the ``caption`` option, with the
|
2014-01-19 04:04:12 -06:00
|
|
|
additional feature that if you leave the value empty, the shown filename will be
|
|
|
|
exactly the one given as an argument.
|
|
|
|
|
|
|
|
|
2014-08-10 09:03:02 -05:00
|
|
|
Dedent
|
|
|
|
^^^^^^
|
|
|
|
|
|
|
|
.. versionadded:: 1.3
|
|
|
|
|
|
|
|
A ``dedent`` option can be given to strip a precedence characters from the code
|
|
|
|
block. For example::
|
|
|
|
|
|
|
|
.. literalinclude:: example.rb
|
|
|
|
:language: ruby
|
|
|
|
:dedent: 4
|
|
|
|
:lines: 10-15
|
|
|
|
|
|
|
|
:rst:dir:`code-block` also supports the ``dedent`` option.
|
|
|
|
|
|
|
|
|
2008-03-15 04:06:04 -05:00
|
|
|
.. rubric:: Footnotes
|
|
|
|
|
|
|
|
.. [1] There is a standard ``.. include`` directive, but it raises errors if the
|
|
|
|
file is not found. This one only emits a warning.
|