From 3a2e101be564ffcb73dac708533d9178d90c2da8 Mon Sep 17 00:00:00 2001 From: Georg Brandl Date: Wed, 10 Oct 2012 16:45:11 +0200 Subject: [PATCH] Issue #12947: revert earlier workaround and use a monkey-patch to enable showing doctest directives only in the doctest docs. --- Doc/library/doctest.rst | 7 +++++-- Doc/tools/sphinxext/pyspecific.py | 29 +++++++++++++++++++++++++++++ 2 files changed, 34 insertions(+), 2 deletions(-) diff --git a/Doc/library/doctest.rst b/Doc/library/doctest.rst index ed53f060517..ec8edbe0ac3 100644 --- a/Doc/library/doctest.rst +++ b/Doc/library/doctest.rst @@ -1,3 +1,5 @@ +:keepdoctest: + :mod:`doctest` --- Test interactive Python examples =================================================== @@ -652,7 +654,7 @@ example. Use ``+`` to enable the named behavior, or ``-`` to disable it. For example, this test passes:: - >>> print(list(range(20))) #doctest: +NORMALIZE_WHITESPACE + >>> print(list(range(20))) # doctest: +NORMALIZE_WHITESPACE [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19] @@ -664,7 +666,8 @@ so:: >>> print(list(range(20))) # doctest: +ELLIPSIS [0, 1, ..., 18, 19] -Multiple directives can be used on a single physical line, separated by commas:: +Multiple directives can be used on a single physical line, separated by +commas:: >>> print(list(range(20))) # doctest: +ELLIPSIS, +NORMALIZE_WHITESPACE [0, 1, ..., 18, 19] diff --git a/Doc/tools/sphinxext/pyspecific.py b/Doc/tools/sphinxext/pyspecific.py index 89bb86fc22c..9b2cc47c88f 100644 --- a/Doc/tools/sphinxext/pyspecific.py +++ b/Doc/tools/sphinxext/pyspecific.py @@ -33,9 +33,38 @@ def new_visit_versionmodified(self, node): self.body.append('%s ' % text) from sphinx.writers.html import HTMLTranslator +from sphinx.writers.latex import LaTeXTranslator from sphinx.locale import versionlabels 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