mirror of
https://github.com/sphinx-doc/sphinx.git
synced 2025-02-25 18:55:22 -06:00
Add role manipulator directives to sphinx.util.docutils
This commit is contained in:
parent
e294b8e036
commit
bfd35c6ce1
@ -21,7 +21,7 @@ from inspect import isclass
|
||||
from io import StringIO
|
||||
from os import path
|
||||
|
||||
from docutils.parsers.rst import Directive, directives, roles
|
||||
from docutils.parsers.rst import Directive, roles
|
||||
|
||||
import sphinx
|
||||
from sphinx import package_dir, locale
|
||||
@ -651,15 +651,15 @@ class Sphinx:
|
||||
"""
|
||||
logger.debug('[app] adding directive: %r',
|
||||
(name, obj, content, arguments, options))
|
||||
if name in directives._directives and not override:
|
||||
if not override and docutils.is_directive_registered(name):
|
||||
logger.warning(__('directive %r is already registered, it will be overridden'),
|
||||
name, type='app', subtype='add_directive')
|
||||
|
||||
if not isclass(obj) or not issubclass(obj, Directive):
|
||||
directive = directive_helper(obj, content, arguments, **options)
|
||||
directives.register_directive(name, directive)
|
||||
docutils.register_directive(name, directive)
|
||||
else:
|
||||
directives.register_directive(name, obj)
|
||||
docutils.register_directive(name, obj)
|
||||
|
||||
def add_role(self, name, role, override=False):
|
||||
# type: (unicode, Any, bool) -> None
|
||||
|
@ -67,6 +67,22 @@ def docutils_namespace():
|
||||
additional_nodes.discard(node)
|
||||
|
||||
|
||||
def is_directive_registered(name):
|
||||
# type: (unicode) -> bool
|
||||
"""Check the *name* directive is already registered."""
|
||||
return name in directives._directives
|
||||
|
||||
|
||||
def register_directive(name, directive):
|
||||
# type: (unicode, Type[Directive]) -> None
|
||||
"""Register a directive to docutils.
|
||||
|
||||
This modifies global state of docutils. So it is better to use this
|
||||
inside ``docutils_namespace()`` to prevent side-effects.
|
||||
"""
|
||||
directives.register_directive(name, directive)
|
||||
|
||||
|
||||
def is_role_registered(name):
|
||||
# type: (unicode) -> bool
|
||||
"""Check the *name* role is already registered."""
|
||||
|
Loading…
Reference in New Issue
Block a user