Add "source-read" event.

This commit is contained in:
Georg Brandl 2008-10-16 19:04:45 +00:00
parent 39c3121344
commit d7e2a48555
4 changed files with 22 additions and 3 deletions

View File

@ -81,8 +81,8 @@ New features added
- Added ``Sphinx.add_javascript()`` that adds scripts to load in the - Added ``Sphinx.add_javascript()`` that adds scripts to load in the
default HTML template. default HTML template.
- Added new events: ``env-updated``, ``missing-reference``, - Added new events: ``source-read``, ``env-updated``,
``build-finished``. ``missing-reference``, ``build-finished``.
* Other changes: * Other changes:

View File

@ -208,6 +208,14 @@ registered event handlers.
Emitted when the builder object has been created. It is available as Emitted when the builder object has been created. It is available as
``app.builder``. ``app.builder``.
.. event:: source-read (app, docname, source)
Emitted when a source file has been read. The *source* argument is a list
whose single element is the contents of the source file. You can process the
contents and replace this item to implement source-level transformations.
.. versionadded:: 0.5
.. event:: doctree-read (app, doctree) .. event:: doctree-read (app, doctree)
Emitted when a doctree has been parsed and read by the environment, and is Emitted when a doctree has been parsed and read by the environment, and is

View File

@ -58,6 +58,7 @@ class ExtensionError(SphinxError):
# List of all known core events. Maps name to arguments description. # List of all known core events. Maps name to arguments description.
events = { events = {
'builder-inited': '', 'builder-inited': '',
'source-read': 'docname, source text',
'doctree-read': 'the doctree before being pickled', 'doctree-read': 'the doctree before being pickled',
'missing-reference': 'env, node, contnode', 'missing-reference': 'env, node, contnode',
'doctree-resolved': 'doctree, docname', 'doctree-resolved': 'doctree, docname',

View File

@ -485,8 +485,18 @@ class BuildEnvironment:
else: else:
self.warn(docname, 'default role %s not found' % self.warn(docname, 'default role %s not found' %
self.config.default_role) self.config.default_role)
class SphinxSourceClass(FileInput):
def read(self):
data = FileInput.read(self)
if app:
arg = [data]
app.emit('source-read', docname, arg)
data = arg[0]
return data
self.docname = docname self.docname = docname
doctree = publish_doctree(None, src_path, FileInput, doctree = publish_doctree(None, src_path, SphinxSourceClass,
settings_overrides=self.settings, settings_overrides=self.settings,
reader=SphinxStandaloneReader()) reader=SphinxStandaloneReader())
self.filter_messages(doctree) self.filter_messages(doctree)