mirror of
https://github.com/sphinx-doc/sphinx.git
synced 2025-02-25 18:55:22 -06:00
docutils bridge
This commit is contained in:
parent
85dcd7baa8
commit
fb227f24cb
@ -24,6 +24,7 @@ from sphinx.transforms.i18n import (
|
|||||||
PreserveTranslatableMessages, Locale, RemoveTranslatableInline,
|
PreserveTranslatableMessages, Locale, RemoveTranslatableInline,
|
||||||
)
|
)
|
||||||
from sphinx.util import import_object, split_docinfo
|
from sphinx.util import import_object, split_docinfo
|
||||||
|
from sphinx.util.docutils import LoggingReporter
|
||||||
|
|
||||||
if False:
|
if False:
|
||||||
# For type annotation
|
# For type annotation
|
||||||
@ -73,6 +74,14 @@ class SphinxBaseReader(standalone.Reader):
|
|||||||
# type: () -> List[Transform]
|
# type: () -> List[Transform]
|
||||||
return standalone.Reader.get_transforms(self) + self.transforms
|
return standalone.Reader.get_transforms(self) + self.transforms
|
||||||
|
|
||||||
|
def new_document(self):
|
||||||
|
document = standalone.Reader.new_document(self)
|
||||||
|
reporter = document.reporter
|
||||||
|
document.reporter = LoggingReporter(reporter.source, reporter.report_level,
|
||||||
|
reporter.halt_level, reporter.debug_flag,
|
||||||
|
reporter.error_handler)
|
||||||
|
return document
|
||||||
|
|
||||||
|
|
||||||
class SphinxStandaloneReader(SphinxBaseReader):
|
class SphinxStandaloneReader(SphinxBaseReader):
|
||||||
"""
|
"""
|
||||||
|
@ -10,12 +10,20 @@
|
|||||||
"""
|
"""
|
||||||
from __future__ import absolute_import
|
from __future__ import absolute_import
|
||||||
|
|
||||||
|
import re
|
||||||
from copy import copy
|
from copy import copy
|
||||||
from contextlib import contextmanager
|
from contextlib import contextmanager
|
||||||
|
|
||||||
import docutils
|
import docutils
|
||||||
|
from docutils.utils import Reporter
|
||||||
from docutils.parsers.rst import directives, roles
|
from docutils.parsers.rst import directives, roles
|
||||||
|
|
||||||
|
from sphinx.util import logging
|
||||||
|
|
||||||
|
logger = logging.getLogger(__name__)
|
||||||
|
report_re = re.compile('^(.+?:\d+): \((DEBUG|INFO|WARNING|ERROR|SEVERE)/(\d+)?\) (.+?)\n?$')
|
||||||
|
|
||||||
|
|
||||||
if False:
|
if False:
|
||||||
# For type annotation
|
# For type annotation
|
||||||
from typing import Any, Callable, Iterator, Tuple # NOQA
|
from typing import Any, Callable, Iterator, Tuple # NOQA
|
||||||
@ -113,3 +121,36 @@ class sphinx_domains(object):
|
|||||||
return self.lookup_domain_element('role', name)
|
return self.lookup_domain_element('role', name)
|
||||||
except ElementLookupError:
|
except ElementLookupError:
|
||||||
return self.role_func(name, lang_module, lineno, reporter)
|
return self.role_func(name, lang_module, lineno, reporter)
|
||||||
|
|
||||||
|
|
||||||
|
class WarningStream(object):
|
||||||
|
level_mapping = {
|
||||||
|
'DEBUG': logger.debug,
|
||||||
|
'INFO': logger.info,
|
||||||
|
'WARNING': logger.warning,
|
||||||
|
'ERROR': logger.error,
|
||||||
|
'SEVERE': logger.critical,
|
||||||
|
}
|
||||||
|
|
||||||
|
def write(self, text):
|
||||||
|
matched = report_re.search(text)
|
||||||
|
if not matched:
|
||||||
|
logger.warning(text.rstrip("\r\n"))
|
||||||
|
else:
|
||||||
|
location, type, level, message = matched.groups()
|
||||||
|
if type in self.level_mapping:
|
||||||
|
logger_method = self.level_mapping.get(type)
|
||||||
|
logger_method(message, location=location)
|
||||||
|
else:
|
||||||
|
logger.warning(text.rstrip("\r\n"))
|
||||||
|
|
||||||
|
|
||||||
|
class LoggingReporter(Reporter):
|
||||||
|
def __init__(self, source, report_level, halt_level,
|
||||||
|
debug=False, error_handler='backslashreplace'):
|
||||||
|
stream = WarningStream()
|
||||||
|
Reporter.__init__(self, source, report_level, halt_level,
|
||||||
|
stream, debug, error_handler=error_handler)
|
||||||
|
|
||||||
|
def set_conditions(self, category, report_level, halt_level, debug=False):
|
||||||
|
Reporter.set_conditions(self, category, report_level, halt_level, debug=debug)
|
||||||
|
Loading…
Reference in New Issue
Block a user