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 io import StringIO
|
||||||
from os import path
|
from os import path
|
||||||
|
|
||||||
from docutils.parsers.rst import Directive, directives, roles
|
from docutils.parsers.rst import Directive, roles
|
||||||
|
|
||||||
import sphinx
|
import sphinx
|
||||||
from sphinx import package_dir, locale
|
from sphinx import package_dir, locale
|
||||||
@ -651,15 +651,15 @@ class Sphinx:
|
|||||||
"""
|
"""
|
||||||
logger.debug('[app] adding directive: %r',
|
logger.debug('[app] adding directive: %r',
|
||||||
(name, obj, content, arguments, options))
|
(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'),
|
logger.warning(__('directive %r is already registered, it will be overridden'),
|
||||||
name, type='app', subtype='add_directive')
|
name, type='app', subtype='add_directive')
|
||||||
|
|
||||||
if not isclass(obj) or not issubclass(obj, Directive):
|
if not isclass(obj) or not issubclass(obj, Directive):
|
||||||
directive = directive_helper(obj, content, arguments, **options)
|
directive = directive_helper(obj, content, arguments, **options)
|
||||||
directives.register_directive(name, directive)
|
docutils.register_directive(name, directive)
|
||||||
else:
|
else:
|
||||||
directives.register_directive(name, obj)
|
docutils.register_directive(name, obj)
|
||||||
|
|
||||||
def add_role(self, name, role, override=False):
|
def add_role(self, name, role, override=False):
|
||||||
# type: (unicode, Any, bool) -> None
|
# type: (unicode, Any, bool) -> None
|
||||||
|
@ -67,6 +67,22 @@ def docutils_namespace():
|
|||||||
additional_nodes.discard(node)
|
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):
|
def is_role_registered(name):
|
||||||
# type: (unicode) -> bool
|
# type: (unicode) -> bool
|
||||||
"""Check the *name* role is already registered."""
|
"""Check the *name* role is already registered."""
|
||||||
|
Loading…
Reference in New Issue
Block a user