[1.2.X] 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.

Backport of r13602 from trunk.

git-svn-id: http://code.djangoproject.com/svn/django/branches/releases/1.2.X@13603 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
Jannis Leidel 2010-08-18 16:32:25 +00:00
parent 6fd09c600f
commit d9bba6b13f

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 = ''