diff -r 5bad73fbf593 Doc/library/doctest.rst --- a/Doc/library/doctest.rst Sun Apr 29 09:25:25 2012 -0700 +++ b/Doc/library/doctest.rst Mon Apr 30 15:36:39 2012 +0200 @@ -580,6 +580,10 @@ Traceback (most recent call last): CustomError: message + + .. code-block:: python + :trim-doctest-flags: disable + >>> raise CustomError('message') #doctest: +IGNORE_EXCEPTION_DETAIL Traceback (most recent call last): my_module.CustomError: message diff -r 5bad73fbf593 Doc/tools/sphinxext/pyspecific.py --- a/Doc/tools/sphinxext/pyspecific.py Sun Apr 29 09:25:25 2012 -0700 +++ b/Doc/tools/sphinxext/pyspecific.py Mon Apr 30 15:36:39 2012 +0200 @@ -261,9 +261,46 @@ return fullname +from sphinx.directives import CodeBlock, directives +from functools import partial +class ExtendedCodeBlock(CodeBlock): + """Code block that can disable the trimming of doctest flag.""" + + OPT = 'trim-doctest-flags' + + option_spec = CodeBlock.option_spec.copy() + option_spec[OPT] = partial(directives.choice, values=('disable',)) + + def run(self): + node, = super(ExtendedCodeBlock, self).run() + if self.OPT in self.options: + node.attributes[self.OPT] = self.options[self.OPT] + return [node] + + @classmethod + def _patch(cls, original): + from functools import wraps + @wraps(original) + def visit_literal_block(self, node): + trimming = node.attributes.get(cls.OPT, '') + saved = self.highlighter.trim_doctest_flags + if trimming == 'disable': + self.highlighter.trim_doctest_flags = False + try: + original(self, node) + finally: + self.highlighter.trim_doctest_flags = saved + return visit_literal_block + +from sphinx.writers.latex import LaTeXTranslator +LaTeXTranslator.depart_literal_block = ExtendedCodeBlock._patch(LaTeXTranslator.depart_literal_block) +HTMLTranslator.visit_literal_block = ExtendedCodeBlock._patch(HTMLTranslator.visit_literal_block) + + def setup(app): app.add_role('issue', issue_role) app.add_role('source', source_role) + app.add_directive('code-block', ExtendedCodeBlock) app.add_directive('impl-detail', ImplementationDetail) app.add_directive('deprecated-removed', DeprecatedRemoved) app.add_builder(PydocTopicsBuilder)