Closes #2799: Sphinx installs roles and directives automatically on importing sphinx module.

Now Sphinx installs them on running application.
This commit is contained in:
Takeshi KOMIYA 2016-07-28 11:23:10 +09:00
parent 54247c96fe
commit 84baf05c4f
7 changed files with 53 additions and 44 deletions

View File

@ -90,6 +90,8 @@ Bugs fixed
---------- ----------
* #2707: (latex) the column width is badly computed for tabular * #2707: (latex) the column width is badly computed for tabular
* #2799: Sphinx installs roles and directives automatically on importing sphinx
module. Now Sphinx installs them on running application.
Documentation Documentation
------------- -------------

View File

@ -88,6 +88,11 @@ builtin_extensions = (
'sphinx.domains.python', 'sphinx.domains.python',
'sphinx.domains.rst', 'sphinx.domains.rst',
'sphinx.domains.std', 'sphinx.domains.std',
'sphinx.directives',
'sphinx.directives.code',
'sphinx.directives.other',
'sphinx.directives.patches',
'sphinx.roles',
) )
CONFIG_FILENAME = 'conf.py' CONFIG_FILENAME = 'conf.py'

View File

@ -17,11 +17,6 @@ from docutils.parsers.rst import Directive, directives, roles
from sphinx import addnodes from sphinx import addnodes
from sphinx.util.docfields import DocFieldTransformer from sphinx.util.docfields import DocFieldTransformer
# import and register directives
from sphinx.directives.code import * # noqa
from sphinx.directives.other import * # noqa
from sphinx.directives.patches import * # noqa
# RE to strip backslash escapes # RE to strip backslash escapes
nl_escape_re = re.compile(r'\\\n') nl_escape_re = re.compile(r'\\\n')
@ -216,8 +211,9 @@ class DefaultDomain(Directive):
return [] return []
directives.register_directive('default-role', DefaultRole) def setup(app):
directives.register_directive('default-domain', DefaultDomain) directives.register_directive('default-role', DefaultRole)
directives.register_directive('describe', ObjectDescription) directives.register_directive('default-domain', DefaultDomain)
# new, more consistent, name directives.register_directive('describe', ObjectDescription)
directives.register_directive('object', ObjectDescription) # new, more consistent, name
directives.register_directive('object', ObjectDescription)

View File

@ -342,8 +342,9 @@ class LiteralInclude(Directive):
return [retnode] return [retnode]
directives.register_directive('highlight', Highlight) def setup(app):
directives.register_directive('highlightlang', Highlight) # old directives.register_directive('highlight', Highlight)
directives.register_directive('code-block', CodeBlock) directives.register_directive('highlightlang', Highlight) # old
directives.register_directive('sourcecode', CodeBlock) directives.register_directive('code-block', CodeBlock)
directives.register_directive('literalinclude', LiteralInclude) directives.register_directive('sourcecode', CodeBlock)
directives.register_directive('literalinclude', LiteralInclude)

View File

@ -409,24 +409,25 @@ class Include(BaseInclude):
return BaseInclude.run(self) return BaseInclude.run(self)
directives.register_directive('toctree', TocTree) def setup(app):
directives.register_directive('sectionauthor', Author) directives.register_directive('toctree', TocTree)
directives.register_directive('moduleauthor', Author) directives.register_directive('sectionauthor', Author)
directives.register_directive('codeauthor', Author) directives.register_directive('moduleauthor', Author)
directives.register_directive('index', Index) directives.register_directive('codeauthor', Author)
directives.register_directive('deprecated', VersionChange) directives.register_directive('index', Index)
directives.register_directive('versionadded', VersionChange) directives.register_directive('deprecated', VersionChange)
directives.register_directive('versionchanged', VersionChange) directives.register_directive('versionadded', VersionChange)
directives.register_directive('seealso', SeeAlso) directives.register_directive('versionchanged', VersionChange)
directives.register_directive('tabularcolumns', TabularColumns) directives.register_directive('seealso', SeeAlso)
directives.register_directive('centered', Centered) directives.register_directive('tabularcolumns', TabularColumns)
directives.register_directive('acks', Acks) directives.register_directive('centered', Centered)
directives.register_directive('hlist', HList) directives.register_directive('acks', Acks)
directives.register_directive('only', Only) directives.register_directive('hlist', HList)
directives.register_directive('include', Include) directives.register_directive('only', Only)
directives.register_directive('include', Include)
# register the standard rst class directive under a different name # register the standard rst class directive under a different name
# only for backwards compatibility now # only for backwards compatibility now
directives.register_directive('cssclass', Class) directives.register_directive('cssclass', Class)
# new standard name when default-domain with "class" is in effect # new standard name when default-domain with "class" is in effect
directives.register_directive('rst-class', Class) directives.register_directive('rst-class', Class)

View File

@ -35,4 +35,5 @@ class Figure(images.Figure):
return [figure_node] return [figure_node]
directives.register_directive('figure', Figure) def setup(app):
directives.register_directive('figure', Figure)

View File

@ -13,7 +13,6 @@ import re
from six import iteritems from six import iteritems
from docutils import nodes, utils from docutils import nodes, utils
from docutils.parsers.rst import roles
from sphinx import addnodes from sphinx import addnodes
from sphinx.locale import _ from sphinx.locale import _
@ -36,11 +35,6 @@ generic_docroles = {
'regexp': nodes.literal, 'regexp': nodes.literal,
} }
for rolename, nodeclass in iteritems(generic_docroles):
generic = roles.GenericRole(rolename, nodeclass)
role = roles.CustomRole(rolename, generic, {'classes': [rolename]})
roles.register_local_role(rolename, role)
# -- generic cross-reference role ---------------------------------------------- # -- generic cross-reference role ----------------------------------------------
@ -344,5 +338,14 @@ specific_docroles = {
'index': index_role, 'index': index_role,
} }
for rolename, func in iteritems(specific_docroles):
roles.register_local_role(rolename, func) def setup(app):
from docutils.parsers.rst import roles
for rolename, nodeclass in iteritems(generic_docroles):
generic = roles.GenericRole(rolename, nodeclass)
role = roles.CustomRole(rolename, generic, {'classes': [rolename]})
roles.register_local_role(rolename, role)
for rolename, func in iteritems(specific_docroles):
roles.register_local_role(rolename, func)