Issue #12947: revert earlier workaround and use a monkey-patch to enable showing doctest directives only in the doctest docs.
This commit is contained in:
parent
d469c400ed
commit
7495456ffc
|
@ -1,3 +1,5 @@
|
||||||
|
:keepdoctest:
|
||||||
|
|
||||||
:mod:`doctest` --- Test interactive Python examples
|
:mod:`doctest` --- Test interactive Python examples
|
||||||
===================================================
|
===================================================
|
||||||
|
|
||||||
|
@ -714,43 +716,28 @@ above.
|
||||||
An example's doctest directives modify doctest's behavior for that single
|
An example's doctest directives modify doctest's behavior for that single
|
||||||
example. Use ``+`` to enable the named behavior, or ``-`` to disable it.
|
example. Use ``+`` to enable the named behavior, or ``-`` to disable it.
|
||||||
|
|
||||||
.. note::
|
For example, this test passes::
|
||||||
Due to an `unfortunate limitation`_ of our current documentation
|
|
||||||
publishing process, syntax highlighting has been disabled in the examples
|
|
||||||
below in order to ensure the doctest directives are correctly displayed.
|
|
||||||
|
|
||||||
.. _unfortunate limitation: http://bugs.python.org/issue12947
|
>>> print range(20) # doctest: +NORMALIZE_WHITESPACE
|
||||||
|
|
||||||
For example, this test passes:
|
|
||||||
|
|
||||||
.. code-block:: text
|
|
||||||
|
|
||||||
>>> print range(20) #doctest: +NORMALIZE_WHITESPACE
|
|
||||||
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
|
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
|
||||||
10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
|
10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
|
||||||
|
|
||||||
Without the directive it would fail, both because the actual output doesn't have
|
Without the directive it would fail, both because the actual output doesn't have
|
||||||
two blanks before the single-digit list elements, and because the actual output
|
two blanks before the single-digit list elements, and because the actual output
|
||||||
is on a single line. This test also passes, and also requires a directive to do
|
is on a single line. This test also passes, and also requires a directive to do
|
||||||
so:
|
so::
|
||||||
|
|
||||||
.. code-block:: text
|
|
||||||
|
|
||||||
>>> print range(20) # doctest: +ELLIPSIS
|
>>> print range(20) # doctest: +ELLIPSIS
|
||||||
[0, 1, ..., 18, 19]
|
[0, 1, ..., 18, 19]
|
||||||
|
|
||||||
Multiple directives can be used on a single physical line, separated by
|
Multiple directives can be used on a single physical line, separated by
|
||||||
commas:
|
commas::
|
||||||
|
|
||||||
.. code-block:: text
|
|
||||||
|
|
||||||
>>> print range(20) # doctest: +ELLIPSIS, +NORMALIZE_WHITESPACE
|
>>> print range(20) # doctest: +ELLIPSIS, +NORMALIZE_WHITESPACE
|
||||||
[0, 1, ..., 18, 19]
|
[0, 1, ..., 18, 19]
|
||||||
|
|
||||||
If multiple directive comments are used for a single example, then they are
|
If multiple directive comments are used for a single example, then they are
|
||||||
combined:
|
combined::
|
||||||
|
|
||||||
.. code-block:: text
|
|
||||||
|
|
||||||
>>> print range(20) # doctest: +ELLIPSIS
|
>>> print range(20) # doctest: +ELLIPSIS
|
||||||
... # doctest: +NORMALIZE_WHITESPACE
|
... # doctest: +NORMALIZE_WHITESPACE
|
||||||
|
@ -758,9 +745,7 @@ combined:
|
||||||
|
|
||||||
As the previous example shows, you can add ``...`` lines to your example
|
As the previous example shows, you can add ``...`` lines to your example
|
||||||
containing only directives. This can be useful when an example is too long for
|
containing only directives. This can be useful when an example is too long for
|
||||||
a directive to comfortably fit on the same line:
|
a directive to comfortably fit on the same line::
|
||||||
|
|
||||||
.. code-block:: text
|
|
||||||
|
|
||||||
>>> print range(5) + range(10,20) + range(30,40) + range(50,60)
|
>>> print range(5) + range(10,20) + range(30,40) + range(50,60)
|
||||||
... # doctest: +ELLIPSIS
|
... # doctest: +ELLIPSIS
|
||||||
|
|
|
@ -33,9 +33,38 @@ def new_visit_versionmodified(self, node):
|
||||||
self.body.append('<span class="versionmodified">%s</span>' % text)
|
self.body.append('<span class="versionmodified">%s</span>' % text)
|
||||||
|
|
||||||
from sphinx.writers.html import HTMLTranslator
|
from sphinx.writers.html import HTMLTranslator
|
||||||
|
from sphinx.writers.latex import LaTeXTranslator
|
||||||
from sphinx.locale import versionlabels
|
from sphinx.locale import versionlabels
|
||||||
HTMLTranslator.visit_versionmodified = new_visit_versionmodified
|
HTMLTranslator.visit_versionmodified = new_visit_versionmodified
|
||||||
|
HTMLTranslator.visit_versionmodified = new_visit_versionmodified
|
||||||
|
|
||||||
|
# monkey-patch HTML and LaTeX translators to keep doctest blocks in the
|
||||||
|
# doctest docs themselves
|
||||||
|
orig_visit_literal_block = HTMLTranslator.visit_literal_block
|
||||||
|
def new_visit_literal_block(self, node):
|
||||||
|
meta = self.builder.env.metadata[self.builder.current_docname]
|
||||||
|
old_trim_doctest_flags = self.highlighter.trim_doctest_flags
|
||||||
|
if 'keepdoctest' in meta:
|
||||||
|
self.highlighter.trim_doctest_flags = False
|
||||||
|
try:
|
||||||
|
orig_visit_literal_block(self, node)
|
||||||
|
finally:
|
||||||
|
self.highlighter.trim_doctest_flags = old_trim_doctest_flags
|
||||||
|
|
||||||
|
HTMLTranslator.visit_literal_block = new_visit_literal_block
|
||||||
|
|
||||||
|
orig_depart_literal_block = LaTeXTranslator.depart_literal_block
|
||||||
|
def new_depart_literal_block(self, node):
|
||||||
|
meta = self.builder.env.metadata[self.curfilestack[-1]]
|
||||||
|
old_trim_doctest_flags = self.highlighter.trim_doctest_flags
|
||||||
|
if 'keepdoctest' in meta:
|
||||||
|
self.highlighter.trim_doctest_flags = False
|
||||||
|
try:
|
||||||
|
orig_depart_literal_block(self, node)
|
||||||
|
finally:
|
||||||
|
self.highlighter.trim_doctest_flags = old_trim_doctest_flags
|
||||||
|
|
||||||
|
LaTeXTranslator.depart_literal_block = new_depart_literal_block
|
||||||
|
|
||||||
# Support for marking up and linking to bugs.python.org issues
|
# Support for marking up and linking to bugs.python.org issues
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue