Commit 4aca3be9 authored by Russell Keith-Magee's avatar Russell Keith-Magee
Browse files

[1.0.X] Fixed #10539 -- Updated Sphinx configuration to accommodate 0.6 while...

[1.0.X] Fixed #10539 -- Updated Sphinx configuration to accommodate 0.6 while retaining compatibility with 0.4 and 0.5. Thanks to Ramiro Morales for the patch.

Merge of r11162 from trunk.


git-svn-id: http://code.djangoproject.com/svn/django/branches/releases/1.0.X@11165 bcc190cf-cafb-0310-a4f2-bffc1f526a37
parent f538e15a
Loading
Loading
Loading
Loading
+39 −14
Original line number Diff line number Diff line
@@ -6,10 +6,16 @@ import docutils.nodes
import docutils.transforms
import sphinx
import sphinx.addnodes
import sphinx.builder
try:
    from sphinx import builders
except ImportError:
    import sphinx.builder as builders
import sphinx.directives
import sphinx.environment
import sphinx.htmlwriter
try:
    import sphinx.writers.html as sphinx_htmlwriter
except ImportError:
    import sphinx.htmlwriter as sphinx_htmlwriter

def setup(app):
    app.add_crossref_type(
@@ -42,7 +48,7 @@ def setup(app):
        directivename = "django-admin-option",
        rolename      = "djadminopt",
        indextemplate = "pair: %s; django-admin command-line option",
        parse_node    = lambda env, sig, signode: sphinx.directives.parse_option_desc(signode, sig),
        parse_node    = parse_django_adminopt_node,
    )
    app.add_transform(SuppressBlockquotes)
    
@@ -71,7 +77,7 @@ class SuppressBlockquotes(docutils.transforms.Transform):
            if len(node.children) == 1 and isinstance(node.children[0], self.suppress_blockquote_child_nodes):
                node.replace_self(node.children[0])

class DjangoHTMLTranslator(sphinx.htmlwriter.SmartyPantsHTMLTranslator):
class DjangoHTMLTranslator(sphinx_htmlwriter.SmartyPantsHTMLTranslator):
    """
    Django-specific reST to HTML tweaks.
    """
@@ -94,10 +100,10 @@ class DjangoHTMLTranslator(sphinx.htmlwriter.SmartyPantsHTMLTranslator):
    #
    def visit_literal_block(self, node):
        self.no_smarty += 1
        sphinx.htmlwriter.SmartyPantsHTMLTranslator.visit_literal_block(self, node)
        sphinx_htmlwriter.SmartyPantsHTMLTranslator.visit_literal_block(self, node)

    def depart_literal_block(self, node):
        sphinx.htmlwriter.SmartyPantsHTMLTranslator.depart_literal_block(self, node) 
        sphinx_htmlwriter.SmartyPantsHTMLTranslator.depart_literal_block(self, node)
        self.no_smarty -= 1
        
    #
@@ -131,7 +137,7 @@ class DjangoHTMLTranslator(sphinx.htmlwriter.SmartyPantsHTMLTranslator):
    # Give each section a unique ID -- nice for custom CSS hooks
    # This is different on docutils 0.5 vs. 0.4...

    if hasattr(sphinx.htmlwriter.SmartyPantsHTMLTranslator, 'start_tag_with_title') and sphinx.__version__ == '0.4.2':
    if hasattr(sphinx_htmlwriter.SmartyPantsHTMLTranslator, 'start_tag_with_title') and sphinx.__version__ == '0.4.2':
        def start_tag_with_title(self, node, tagname, **atts):
            node = {
                'classes': node.get('classes', []), 
@@ -145,7 +151,7 @@ class DjangoHTMLTranslator(sphinx.htmlwriter.SmartyPantsHTMLTranslator):
            node['ids'] = ['s-' + i for i in old_ids]
            if sphinx.__version__ != '0.4.2':
                node['ids'].extend(old_ids)
            sphinx.htmlwriter.SmartyPantsHTMLTranslator.visit_section(self, node)
            sphinx_htmlwriter.SmartyPantsHTMLTranslator.visit_section(self, node)
            node['ids'] = old_ids

def parse_django_admin_node(env, sig, signode):
@@ -155,6 +161,25 @@ def parse_django_admin_node(env, sig, signode):
    signode += sphinx.addnodes.desc_name(title, title)
    return sig

def parse_django_adminopt_node(env, sig, signode):
    """A copy of sphinx.directives.CmdoptionDesc.parse_signature()"""
    from sphinx import addnodes
    from sphinx.directives.desc import option_desc_re
    count = 0
    firstname = ''
    for m in option_desc_re.finditer(sig):
        optname, args = m.groups()
        if count:
            signode += addnodes.desc_addname(', ', ', ')
        signode += addnodes.desc_name(optname, optname)
        signode += addnodes.desc_addname(args, args)
        if not count:
            firstname = optname
        count += 1
    if not firstname:
        raise ValueError
    return firstname

def monkeypatch_pickle_builder():
    import shutil
    from os import path
@@ -183,12 +208,12 @@ def monkeypatch_pickle_builder():

        # copy the environment file from the doctree dir to the output dir
        # as needed by the web app
        shutil.copyfile(path.join(self.doctreedir, sphinx.builder.ENV_PICKLE_FILENAME),
                        path.join(self.outdir, sphinx.builder.ENV_PICKLE_FILENAME))
        shutil.copyfile(path.join(self.doctreedir, builders.ENV_PICKLE_FILENAME),
                        path.join(self.outdir, builders.ENV_PICKLE_FILENAME))

        # touch 'last build' file, used by the web application to determine
        # when to reload its environment and clear the cache
        open(path.join(self.outdir, sphinx.builder.LAST_BUILD_FILENAME), 'w').close()
        open(path.join(self.outdir, builders.LAST_BUILD_FILENAME), 'w').close()

    sphinx.builder.PickleHTMLBuilder.handle_finish = handle_finish
    builders.PickleHTMLBuilder.handle_finish = handle_finish
+1 −1
Original line number Diff line number Diff line
{% extends "!layout.html" %}

{%- macro secondnav %}
{%- macro secondnav() %}
  {%- if prev %}
    &laquo; <a href="{{ prev.link|e }}" title="{{ prev.title|e }}">previous</a> 
    {{ reldelim2 }}