From 84baf05c4f9c3ff3f17779fe522cec7aa444b2f8 Mon Sep 17 00:00:00 2001 From: Takeshi KOMIYA Date: Thu, 28 Jul 2016 11:23:10 +0900 Subject: [PATCH] Closes #2799: Sphinx installs roles and directives automatically on importing sphinx module. Now Sphinx installs them on running application. --- CHANGES | 2 ++ sphinx/application.py | 5 +++++ sphinx/directives/__init__.py | 16 +++++--------- sphinx/directives/code.py | 11 +++++----- sphinx/directives/other.py | 41 ++++++++++++++++++----------------- sphinx/directives/patches.py | 3 ++- sphinx/roles.py | 19 +++++++++------- 7 files changed, 53 insertions(+), 44 deletions(-) diff --git a/CHANGES b/CHANGES index f832946e7..95b65a194 100644 --- a/CHANGES +++ b/CHANGES @@ -90,6 +90,8 @@ Bugs fixed ---------- * #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 ------------- diff --git a/sphinx/application.py b/sphinx/application.py index 892a85d26..d8cae8435 100644 --- a/sphinx/application.py +++ b/sphinx/application.py @@ -88,6 +88,11 @@ builtin_extensions = ( 'sphinx.domains.python', 'sphinx.domains.rst', 'sphinx.domains.std', + 'sphinx.directives', + 'sphinx.directives.code', + 'sphinx.directives.other', + 'sphinx.directives.patches', + 'sphinx.roles', ) CONFIG_FILENAME = 'conf.py' diff --git a/sphinx/directives/__init__.py b/sphinx/directives/__init__.py index d99a9bc1b..b0c69a8e1 100644 --- a/sphinx/directives/__init__.py +++ b/sphinx/directives/__init__.py @@ -17,11 +17,6 @@ from docutils.parsers.rst import Directive, directives, roles from sphinx import addnodes 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 nl_escape_re = re.compile(r'\\\n') @@ -216,8 +211,9 @@ class DefaultDomain(Directive): return [] -directives.register_directive('default-role', DefaultRole) -directives.register_directive('default-domain', DefaultDomain) -directives.register_directive('describe', ObjectDescription) -# new, more consistent, name -directives.register_directive('object', ObjectDescription) +def setup(app): + directives.register_directive('default-role', DefaultRole) + directives.register_directive('default-domain', DefaultDomain) + directives.register_directive('describe', ObjectDescription) + # new, more consistent, name + directives.register_directive('object', ObjectDescription) diff --git a/sphinx/directives/code.py b/sphinx/directives/code.py index de804f988..f88b30987 100644 --- a/sphinx/directives/code.py +++ b/sphinx/directives/code.py @@ -342,8 +342,9 @@ class LiteralInclude(Directive): return [retnode] -directives.register_directive('highlight', Highlight) -directives.register_directive('highlightlang', Highlight) # old -directives.register_directive('code-block', CodeBlock) -directives.register_directive('sourcecode', CodeBlock) -directives.register_directive('literalinclude', LiteralInclude) +def setup(app): + directives.register_directive('highlight', Highlight) + directives.register_directive('highlightlang', Highlight) # old + directives.register_directive('code-block', CodeBlock) + directives.register_directive('sourcecode', CodeBlock) + directives.register_directive('literalinclude', LiteralInclude) diff --git a/sphinx/directives/other.py b/sphinx/directives/other.py index bab2f9f54..a24a40a49 100644 --- a/sphinx/directives/other.py +++ b/sphinx/directives/other.py @@ -409,24 +409,25 @@ class Include(BaseInclude): return BaseInclude.run(self) -directives.register_directive('toctree', TocTree) -directives.register_directive('sectionauthor', Author) -directives.register_directive('moduleauthor', Author) -directives.register_directive('codeauthor', Author) -directives.register_directive('index', Index) -directives.register_directive('deprecated', VersionChange) -directives.register_directive('versionadded', VersionChange) -directives.register_directive('versionchanged', VersionChange) -directives.register_directive('seealso', SeeAlso) -directives.register_directive('tabularcolumns', TabularColumns) -directives.register_directive('centered', Centered) -directives.register_directive('acks', Acks) -directives.register_directive('hlist', HList) -directives.register_directive('only', Only) -directives.register_directive('include', Include) +def setup(app): + directives.register_directive('toctree', TocTree) + directives.register_directive('sectionauthor', Author) + directives.register_directive('moduleauthor', Author) + directives.register_directive('codeauthor', Author) + directives.register_directive('index', Index) + directives.register_directive('deprecated', VersionChange) + directives.register_directive('versionadded', VersionChange) + directives.register_directive('versionchanged', VersionChange) + directives.register_directive('seealso', SeeAlso) + directives.register_directive('tabularcolumns', TabularColumns) + directives.register_directive('centered', Centered) + directives.register_directive('acks', Acks) + directives.register_directive('hlist', HList) + directives.register_directive('only', Only) + directives.register_directive('include', Include) -# register the standard rst class directive under a different name -# only for backwards compatibility now -directives.register_directive('cssclass', Class) -# new standard name when default-domain with "class" is in effect -directives.register_directive('rst-class', Class) + # register the standard rst class directive under a different name + # only for backwards compatibility now + directives.register_directive('cssclass', Class) + # new standard name when default-domain with "class" is in effect + directives.register_directive('rst-class', Class) diff --git a/sphinx/directives/patches.py b/sphinx/directives/patches.py index 4f6f3729f..a4a046917 100644 --- a/sphinx/directives/patches.py +++ b/sphinx/directives/patches.py @@ -35,4 +35,5 @@ class Figure(images.Figure): return [figure_node] -directives.register_directive('figure', Figure) +def setup(app): + directives.register_directive('figure', Figure) diff --git a/sphinx/roles.py b/sphinx/roles.py index a6583a6ea..6e8de3b4a 100644 --- a/sphinx/roles.py +++ b/sphinx/roles.py @@ -13,7 +13,6 @@ import re from six import iteritems from docutils import nodes, utils -from docutils.parsers.rst import roles from sphinx import addnodes from sphinx.locale import _ @@ -36,11 +35,6 @@ generic_docroles = { '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 ---------------------------------------------- @@ -344,5 +338,14 @@ specific_docroles = { '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)