Refactor publishment

This commit is contained in:
Takeshi KOMIYA 2017-10-31 23:04:24 +09:00
parent 07220140ac
commit d23f29f301
2 changed files with 15 additions and 9 deletions

View File

@ -33,7 +33,9 @@ from docutils.parsers.rst.languages import en as english
from docutils.frontend import OptionParser from docutils.frontend import OptionParser
from sphinx import addnodes from sphinx import addnodes
from sphinx.io import SphinxStandaloneReader, SphinxDummyWriter, SphinxFileInput from sphinx.io import (
SphinxStandaloneReader, SphinxDummySourceClass, SphinxDummyWriter, SphinxFileInput
)
from sphinx.util import logging from sphinx.util import logging
from sphinx.util import get_matching_docs, FilenameUniqDict, status_iterator from sphinx.util import get_matching_docs, FilenameUniqDict, status_iterator
from sphinx.util.nodes import is_translatable from sphinx.util.nodes import is_translatable
@ -713,17 +715,16 @@ class BuildEnvironment(object):
# publish manually # publish manually
reader = SphinxStandaloneReader(self.app, reader = SphinxStandaloneReader(self.app,
parsers=self.app.registry.get_source_parsers()) parsers=self.app.registry.get_source_parsers())
pub = Publisher(reader=reader,
writer=SphinxDummyWriter(),
destination_class=NullOutput)
pub.set_components(None, 'restructuredtext', None)
pub.process_programmatic_settings(None, self.settings, None)
src_path = self.doc2path(docname) src_path = self.doc2path(docname)
source = SphinxFileInput(app, self, source=None, source_path=src_path, source = SphinxFileInput(app, self, source=None, source_path=src_path,
encoding=self.config.source_encoding) encoding=self.config.source_encoding)
pub.source = source pub = Publisher(reader=reader,
pub.settings._source = src_path writer=SphinxDummyWriter(),
pub.set_destination(None, None) source_class=SphinxDummySourceClass,
destination=NullOutput())
pub.set_components(None, 'restructuredtext', None)
pub.process_programmatic_settings(None, self.settings, None)
pub.set_source(source, src_path)
pub.publish() pub.publish()
doctree = pub.document doctree = pub.document

View File

@ -143,6 +143,11 @@ class SphinxDummyWriter(UnfilteredWriter):
pass pass
def SphinxDummySourceClass(source, *args, **kwargs):
"""Bypass source object as is to cheat Publisher."""
return source
class SphinxFileInput(FileInput): class SphinxFileInput(FileInput):
def __init__(self, app, env, *args, **kwds): def __init__(self, app, env, *args, **kwds):
# type: (Sphinx, BuildEnvironment, Any, Any) -> None # type: (Sphinx, BuildEnvironment, Any, Any) -> None