[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,37 +56,45 @@ 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
optional_arguments = 1
final_argument_whitespace = True
option_spec = {}
def run(self):
env = self.state.document.settings.env
arg0 = self.arguments[0]
is_nextversion = env.config.django_next_version == arg0
ret = [] ret = []
node = addnodes.versionmodified() node = addnodes.versionmodified()
ret.append(node) ret.append(node)
if not is_nextversion: if not is_nextversion:
if len(arguments) == 1: if len(self.arguments) == 1:
linktext = 'Please, see the release notes <releases-%s>' % (arguments[0]) linktext = 'Please, see the release notes <releases-%s>' % (arg0)
try: try:
xrefs = roles.XRefRole()('ref', linktext, linktext, lineno, state) # Sphinx >= 1.0 xrefs = roles.XRefRole()('std:ref', linktext, linktext, self.lineno, self.state) # Sphinx >= 1.0
except: except AttributeError:
xrefs = roles.xfileref_role('ref', linktext, linktext, lineno, state) # Sphinx < 1.0 xrefs = roles.xfileref_role('ref', linktext, linktext, self.lineno, self.state) # Sphinx < 1.0
node.extend(xrefs[0]) node.extend(xrefs[0])
node['version'] = arguments[0] node['version'] = arg0
else: else:
node['version'] = "Development version" node['version'] = "Development version"
node['type'] = name node['type'] = self.name
if len(arguments) == 2: if len(self.arguments) == 2:
inodes, messages = state.inline_text(arguments[1], lineno+1) inodes, messages = self.state.inline_text(self.arguments[1], self.lineno+1)
node.extend(inodes) node.extend(inodes)
if content: if self.content:
state.nested_parse(content, content_offset, node) self.state.nested_parse(self.content, self.content_offset, node)
ret = ret + messages ret = ret + messages
env.note_versionchange(node['type'], node['version'], node, lineno) env.note_versionchange(node['type'], node['version'], node, self.lineno)
return ret return ret
@ -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 = ''