Add a new directive marking up implementation details and start using it.

This commit is contained in:
Georg Brandl 2009-10-22 08:05:04 +00:00
parent 4ebf80734d
commit 08be2e2f35
3 changed files with 39 additions and 4 deletions

View file

@ -1,4 +1,3 @@
:mod:`weakref` --- Weak references :mod:`weakref` --- Weak references
================================== ==================================
@ -76,9 +75,10 @@ support weak references but can add support through subclassing::
obj = Dict(red=1, green=2, blue=3) # this object is weak referenceable obj = Dict(red=1, green=2, blue=3) # this object is weak referenceable
.. impl-detail::
Other built-in types such as :class:`tuple` and :class:`long` do not support Other built-in types such as :class:`tuple` and :class:`long` do not support
weak references even when subclassed (this is an implementation detail and may weak references even when subclassed.
be different across various Python implementations).
Extension types can easily be made to support weak references; see Extension types can easily be made to support weak references; see
:ref:`weakref-support`. :ref:`weakref-support`.

View file

@ -35,6 +35,8 @@ from sphinx.locale import versionlabels
HTMLTranslator.visit_versionmodified = new_visit_versionmodified HTMLTranslator.visit_versionmodified = new_visit_versionmodified
# Support for marking up and linking to bugs.python.org issues
def issue_role(typ, rawtext, text, lineno, inliner, options={}, content=[]): def issue_role(typ, rawtext, text, lineno, inliner, options={}, content=[]):
issue = utils.unescape(text) issue = utils.unescape(text)
text = 'issue ' + issue text = 'issue ' + issue
@ -42,6 +44,25 @@ def issue_role(typ, rawtext, text, lineno, inliner, options={}, content=[]):
return [refnode], [] return [refnode], []
# Support for marking up implementation details
from sphinx.util.compat import Directive
class ImplementationDetail(Directive):
has_content = True
required_arguments = 0
optional_arguments = 1
final_argument_whitespace = True
def run(self):
pnode = nodes.compound(classes=['impl-detail'])
content = self.content
content[0] = '**CPython implementation detail:** ' + content[0]
self.state.nested_parse(content, self.content_offset, pnode)
return [pnode]
# Support for building "topic help" for pydoc # Support for building "topic help" for pydoc
pydoc_topic_labels = [ pydoc_topic_labels = [
@ -110,10 +131,12 @@ class PydocTopicsBuilder(Builder):
finally: finally:
f.close() f.close()
# Support for checking for suspicious markup # Support for checking for suspicious markup
import suspicious import suspicious
# Support for documenting Opcodes # Support for documenting Opcodes
import re import re
@ -136,6 +159,7 @@ def parse_opcode_signature(env, sig, signode):
def setup(app): def setup(app):
app.add_role('issue', issue_role) app.add_role('issue', issue_role)
app.add_directive('impl-detail', ImplementationDetail)
app.add_builder(PydocTopicsBuilder) app.add_builder(PydocTopicsBuilder)
app.add_builder(suspicious.CheckSuspiciousMarkupBuilder) app.add_builder(suspicious.CheckSuspiciousMarkupBuilder)
app.add_description_unit('opcode', 'opcode', '%s (opcode)', app.add_description_unit('opcode', 'opcode', '%s (opcode)',

View file

@ -345,6 +345,17 @@ p.deprecated {
background-color: #ffa background-color: #ffa
} }
.impl-detail {
margin-top: 10px;
margin-bottom: 10px;
padding: 7px;
border: 1px solid #ccc;
}
.impl-detail p {
margin: 0;
}
/* -- code displays --------------------------------------------------------- */ /* -- code displays --------------------------------------------------------- */
pre { pre {