mirror of
https://github.com/sphinx-doc/sphinx.git
synced 2025-02-25 18:55:22 -06:00
Add default_role contextmanager to enable default-role temporarily
This commit is contained in:
parent
1200ab48e1
commit
f7dd8e94e2
@ -26,13 +26,11 @@ from six.moves import cPickle as pickle
|
||||
|
||||
from docutils.utils import Reporter, get_source_line, normalize_language_tag
|
||||
from docutils.utils.smartquotes import smartchars
|
||||
from docutils.parsers.rst import roles
|
||||
from docutils.parsers.rst.languages import en as english
|
||||
from docutils.frontend import OptionParser
|
||||
|
||||
from sphinx import addnodes
|
||||
from sphinx.io import read_doc
|
||||
from sphinx.util import logging
|
||||
from sphinx.util import logging, rst
|
||||
from sphinx.util import get_matching_docs, FilenameUniqDict, status_iterator
|
||||
from sphinx.util.nodes import is_translatable
|
||||
from sphinx.util.osutil import SEP, ensuredir
|
||||
@ -80,8 +78,6 @@ default_settings = {
|
||||
ENV_VERSION = 52 + (sys.version_info[0] - 2)
|
||||
|
||||
|
||||
dummy_reporter = Reporter('', 4, 4)
|
||||
|
||||
versioning_conditions = {
|
||||
'none': False,
|
||||
'text': is_translatable,
|
||||
@ -696,16 +692,7 @@ class BuildEnvironment(object):
|
||||
if path.isfile(docutilsconf):
|
||||
self.note_dependency(docutilsconf)
|
||||
|
||||
with sphinx_domains(self):
|
||||
if self.config.default_role:
|
||||
role_fn, messages = roles.role(self.config.default_role, english,
|
||||
0, dummy_reporter)
|
||||
if role_fn:
|
||||
roles._roles[''] = role_fn
|
||||
else:
|
||||
logger.warning('default role %s not found', self.config.default_role,
|
||||
location=docname)
|
||||
|
||||
with sphinx_domains(self), rst.default_role(docname, self.config.default_role):
|
||||
codecs.register_error('sphinx', self.warn_and_replace) # type: ignore
|
||||
doctree = read_doc(self.app, self, self.doc2path(docname))
|
||||
|
||||
@ -745,7 +732,6 @@ class BuildEnvironment(object):
|
||||
# cleanup
|
||||
self.temp_data.clear()
|
||||
self.ref_context.clear()
|
||||
roles._roles.pop('', None) # if a document has set a local default role
|
||||
|
||||
self.write_doctree(docname, doctree)
|
||||
|
||||
|
@ -8,12 +8,37 @@
|
||||
:copyright: Copyright 2007-2017 by the Sphinx team, see AUTHORS.
|
||||
:license: BSD, see LICENSE for details.
|
||||
"""
|
||||
from __future__ import absolute_import
|
||||
|
||||
import re
|
||||
from contextlib import contextmanager
|
||||
|
||||
from docutils.parsers.rst import roles
|
||||
from docutils.parsers.rst.languages import en as english
|
||||
from docutils.utils import Reporter
|
||||
|
||||
from sphinx.util import logging
|
||||
|
||||
symbols_re = re.compile(r'([!-/:-@\[-`{-~])')
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
def escape(text):
|
||||
# type: (unicode) -> unicode
|
||||
return symbols_re.sub(r'\\\1', text) # type: ignore
|
||||
|
||||
|
||||
@contextmanager
|
||||
def default_role(docname, name):
|
||||
# type: (unicode, unicode) -> None
|
||||
if name:
|
||||
dummy_reporter = Reporter('', 4, 4)
|
||||
role_fn, _ = roles.role(name, english, 0, dummy_reporter)
|
||||
if role_fn:
|
||||
roles._roles[''] = role_fn
|
||||
else:
|
||||
logger.warning('default role %s not found', name, location=docname)
|
||||
|
||||
yield
|
||||
|
||||
roles._roles.pop('', None) # if a document has set a local default role
|
||||
|
Loading…
Reference in New Issue
Block a user