Author: jezdez
Date: 2010-08-18 11:32:25 -0500 (Wed, 18 Aug 2010)
New Revision: 13603

Modified:
   django/branches/releases/1.2.X/docs/_ext/djangodocs.py
Log:
[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.

Modified: django/branches/releases/1.2.X/docs/_ext/djangodocs.py
===================================================================
--- django/branches/releases/1.2.X/docs/_ext/djangodocs.py      2010-08-18 
16:31:15 UTC (rev 13602)
+++ django/branches/releases/1.2.X/docs/_ext/djangodocs.py      2010-08-18 
16:32:25 UTC (rev 13603)
@@ -19,6 +19,7 @@
 from sphinx.builders.html import StandaloneHTMLBuilder
 from sphinx.writers.html import SmartyPantsHTMLTranslator
 from sphinx.util.console import bold
+from sphinx.util.compat import Directive
 
 
 def setup(app):
@@ -55,40 +56,48 @@
         parse_node    = parse_django_adminopt_node,
     )
     app.add_config_value('django_next_version', '0.0', True)
-    app.add_directive('versionadded', parse_version_directive, 1, (1, 1, 1))
-    app.add_directive('versionchanged', parse_version_directive, 1, (1, 1, 1))
+    app.add_directive('versionadded', VersionDirective)
+    app.add_directive('versionchanged', VersionDirective)
     app.add_transform(SuppressBlockquotes)
     app.add_builder(DjangoStandaloneHTMLBuilder)
 
-def parse_version_directive(name, arguments, options, content, lineno,
-                      content_offset, block_text, state, state_machine):
-    env = state.document.settings.env
-    is_nextversion = env.config.django_next_version == arguments[0]
-    ret = []
-    node = addnodes.versionmodified()
-    ret.append(node)
-    if not is_nextversion:
-        if len(arguments) == 1:
-            linktext = 'Please, see the release notes <releases-%s>' % 
(arguments[0])
-            try:
-                xrefs = roles.XRefRole()('ref', linktext, linktext, lineno, 
state) # Sphinx >= 1.0
-            except:
-                xrefs = roles.xfileref_role('ref', linktext, linktext, lineno, 
state) # Sphinx < 1.0
-            node.extend(xrefs[0])
-        node['version'] = arguments[0]
-    else:
-        node['version'] = "Development version"
-    node['type'] = name
-    if len(arguments) == 2:
-        inodes, messages = state.inline_text(arguments[1], lineno+1)
-        node.extend(inodes)
-        if content:
-            state.nested_parse(content, content_offset, node)
-        ret = ret + messages
-    env.note_versionchange(node['type'], node['version'], node, lineno)
-    return ret
 
+class VersionDirective(Directive):
+    has_content = True
+    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 = []
+        node = addnodes.versionmodified()
+        ret.append(node)
+        if not is_nextversion:
+            if len(self.arguments) == 1:
+                linktext = 'Please, see the release notes <releases-%s>' % 
(arg0)
+                try:
+                    xrefs = roles.XRefRole()('std:ref', linktext, linktext, 
self.lineno, self.state) # Sphinx >= 1.0
+                except AttributeError:
+                    xrefs = roles.xfileref_role('ref', linktext, linktext, 
self.lineno, self.state) # Sphinx < 1.0
+                node.extend(xrefs[0])
+            node['version'] = arg0
+        else:
+            node['version'] = "Development version"
+        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):
     """
     Remove the default blockquotes that encase indented list, tables, etc.
@@ -185,7 +194,7 @@
     """A copy of sphinx.directives.CmdoptionDesc.parse_signature()"""
     try:
         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
     count = 0
     firstname = ''

-- 
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/django-updates?hl=en.

Reply via email to