Merge pull request #5791 from tk0miya/refactor_io

Move `source-read` event to SphinxStandaloneReader
This commit is contained in:
Takeshi KOMIYA 2018-12-16 22:27:46 +09:00 committed by GitHub
commit 7bdbf50ee9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -42,6 +42,7 @@ if False:
# For type annotation # For type annotation
from typing import Any, Dict, List, Tuple, Type, Union # NOQA from typing import Any, Dict, List, Tuple, Type, Union # NOQA
from docutils import nodes # NOQA from docutils import nodes # NOQA
from docutils.frontend import Values # NOQA
from docutils.io import Input # NOQA from docutils.io import Input # NOQA
from docutils.parsers import Parser # NOQA from docutils.parsers import Parser # NOQA
from docutils.transforms import Transform # NOQA from docutils.transforms import Transform # NOQA
@ -64,6 +65,7 @@ class SphinxBaseReader(standalone.Reader):
def __init__(self, app, *args, **kwargs): def __init__(self, app, *args, **kwargs):
# type: (Sphinx, Any, Any) -> None # type: (Sphinx, Any, Any) -> None
self.app = app
self.env = app.env self.env = app.env
super().__init__(*args, **kwargs) super().__init__(*args, **kwargs)
@ -106,6 +108,26 @@ class SphinxStandaloneReader(SphinxBaseReader):
self.transforms = self.transforms + app.registry.get_transforms() self.transforms = self.transforms + app.registry.get_transforms()
super().__init__(app, *args, **kwargs) super().__init__(app, *args, **kwargs)
def read(self, source, parser, settings):
# type: (Input, Parser, Values) -> nodes.document
self.source = source
if not self.parser:
self.parser = parser
self.settings = settings
self.input = self.read_source()
self.parse()
return self.document
def read_source(self):
# type: () -> str
"""Read content from source and do post-process."""
content = self.source.read()
# emit "source-read" event
arg = [content]
self.app.emit('source-read', self.env.docname, arg)
return arg[0]
class SphinxI18nReader(SphinxBaseReader): class SphinxI18nReader(SphinxBaseReader):
""" """
@ -156,8 +178,7 @@ def SphinxDummySourceClass(source, *args, **kwargs):
class SphinxBaseFileInput(FileInput): class SphinxBaseFileInput(FileInput):
"""A base class of SphinxFileInput. """A base class of SphinxFileInput.
It supports to replace unknown Unicode characters to '?'. And it also emits It supports to replace unknown Unicode characters to '?'.
Sphinx events :event:`source-read` on reading.
""" """
def __init__(self, app, env, *args, **kwds): def __init__(self, app, env, *args, **kwds):
@ -168,19 +189,6 @@ class SphinxBaseFileInput(FileInput):
kwds['error_handler'] = 'sphinx' # py3: handle error on open. kwds['error_handler'] = 'sphinx' # py3: handle error on open.
super().__init__(*args, **kwds) super().__init__(*args, **kwds)
def read(self):
# type: () -> str
"""Reads the contents from file.
After reading, it emits Sphinx event ``source-read``.
"""
data = super().read()
# emit source-read event
arg = [data]
self.app.emit('source-read', self.env.docname, arg)
return arg[0]
def warn_and_replace(self, error): def warn_and_replace(self, error):
# type: (Any) -> Tuple # type: (Any) -> Tuple
warnings.warn('SphinxBaseFileInput.warn_and_replace() is deprecated. ' warnings.warn('SphinxBaseFileInput.warn_and_replace() is deprecated. '