Fixed #14033 -- Fixed another problem with xrefs and Sphinx 1.X in the Django doc extension. Thanks for the report and patch, Ramiro Morales and Georg Brandl.

git-svn-id: http://code.djangoproject.com/svn/django/trunk@13602 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
Jannis Leidel 2010-08-18 16:31:15 +00:00
parent 68aff2f7be
commit 7098f8444e
1 changed files with 39 additions and 30 deletions

View File

@ -19,6 +19,7 @@ from sphinx import addnodes, roles
from sphinx.builders.html import StandaloneHTMLBuilder from sphinx.builders.html import StandaloneHTMLBuilder
from sphinx.writers.html import SmartyPantsHTMLTranslator from sphinx.writers.html import SmartyPantsHTMLTranslator
from sphinx.util.console import bold from sphinx.util.console import bold
from sphinx.util.compat import Directive
def setup(app): def setup(app):
@ -55,38 +56,46 @@ def setup(app):
parse_node = parse_django_adminopt_node, parse_node = parse_django_adminopt_node,
) )
app.add_config_value('django_next_version', '0.0', True) app.add_config_value('django_next_version', '0.0', True)
app.add_directive('versionadded', parse_version_directive, 1, (1, 1, 1)) app.add_directive('versionadded', VersionDirective)
app.add_directive('versionchanged', parse_version_directive, 1, (1, 1, 1)) app.add_directive('versionchanged', VersionDirective)
app.add_transform(SuppressBlockquotes) app.add_transform(SuppressBlockquotes)
app.add_builder(DjangoStandaloneHTMLBuilder) app.add_builder(DjangoStandaloneHTMLBuilder)
def parse_version_directive(name, arguments, options, content, lineno,
content_offset, block_text, state, state_machine): class VersionDirective(Directive):
env = state.document.settings.env has_content = True
is_nextversion = env.config.django_next_version == arguments[0] required_arguments = 1
ret = [] optional_arguments = 1
node = addnodes.versionmodified() final_argument_whitespace = True
ret.append(node) option_spec = {}
if not is_nextversion:
if len(arguments) == 1: def run(self):
linktext = 'Please, see the release notes <releases-%s>' % (arguments[0]) env = self.state.document.settings.env
try: arg0 = self.arguments[0]
xrefs = roles.XRefRole()('ref', linktext, linktext, lineno, state) # Sphinx >= 1.0 is_nextversion = env.config.django_next_version == arg0
except: ret = []
xrefs = roles.xfileref_role('ref', linktext, linktext, lineno, state) # Sphinx < 1.0 node = addnodes.versionmodified()
node.extend(xrefs[0]) ret.append(node)
node['version'] = arguments[0] if not is_nextversion:
else: if len(self.arguments) == 1:
node['version'] = "Development version" linktext = 'Please, see the release notes <releases-%s>' % (arg0)
node['type'] = name try:
if len(arguments) == 2: xrefs = roles.XRefRole()('std:ref', linktext, linktext, self.lineno, self.state) # Sphinx >= 1.0
inodes, messages = state.inline_text(arguments[1], lineno+1) except AttributeError:
node.extend(inodes) xrefs = roles.xfileref_role('ref', linktext, linktext, self.lineno, self.state) # Sphinx < 1.0
if content: node.extend(xrefs[0])
state.nested_parse(content, content_offset, node) node['version'] = arg0
ret = ret + messages else:
env.note_versionchange(node['type'], node['version'], node, lineno) node['version'] = "Development version"
return ret node['type'] = self.name
if len(self.arguments) == 2:
inodes, messages = self.state.inline_text(self.arguments[1], self.lineno+1)
node.extend(inodes)
if self.content:
self.state.nested_parse(self.content, self.content_offset, node)
ret = ret + messages
env.note_versionchange(node['type'], node['version'], node, self.lineno)
return ret
class SuppressBlockquotes(transforms.Transform): class SuppressBlockquotes(transforms.Transform):
@ -185,7 +194,7 @@ def parse_django_adminopt_node(env, sig, signode):
"""A copy of sphinx.directives.CmdoptionDesc.parse_signature()""" """A copy of sphinx.directives.CmdoptionDesc.parse_signature()"""
try: try:
from sphinx.domains.std import option_desc_re # Sphinx >= 1.0 from sphinx.domains.std import option_desc_re # Sphinx >= 1.0
except: except ImportError:
from sphinx.directives.desc import option_desc_re # Sphinx < 1.0 from sphinx.directives.desc import option_desc_re # Sphinx < 1.0
count = 0 count = 0
firstname = '' firstname = ''