2008-03-18 13:19:21 -05:00
|
|
|
.. highlight:: rest
|
|
|
|
|
2008-03-12 16:37:22 -05:00
|
|
|
Extension API
|
|
|
|
=============
|
|
|
|
|
2008-04-13 13:16:55 -05:00
|
|
|
.. currentmodule:: sphinx.application
|
|
|
|
|
2008-03-12 16:37:22 -05:00
|
|
|
Each Sphinx extension is a Python module with at least a :func:`setup` function.
|
|
|
|
This function is called at initialization time with one argument, the
|
|
|
|
application object representing the Sphinx process. This application object has
|
|
|
|
the following public API:
|
|
|
|
|
2008-03-21 09:06:04 -05:00
|
|
|
.. method:: Sphinx.add_builder(builder)
|
2008-03-12 16:37:22 -05:00
|
|
|
|
|
|
|
Register a new builder. *builder* must be a class that inherits from
|
2008-11-29 13:04:11 -06:00
|
|
|
:class:`~sphinx.builders.Builder`.
|
2008-03-12 16:37:22 -05:00
|
|
|
|
2008-03-21 09:06:04 -05:00
|
|
|
.. method:: Sphinx.add_config_value(name, default, rebuild_env)
|
2008-03-12 16:37:22 -05:00
|
|
|
|
|
|
|
Register a configuration value. This is necessary for Sphinx to recognize
|
|
|
|
new values and set default values accordingly. The *name* should be prefixed
|
|
|
|
with the extension name, to avoid clashes. The *default* value can be any
|
|
|
|
Python object. The boolean value *rebuild_env* must be ``True`` if a change
|
|
|
|
in the setting only takes effect when a document is parsed -- this means that
|
|
|
|
the whole environment must be rebuilt.
|
|
|
|
|
2008-05-24 13:03:56 -05:00
|
|
|
.. versionchanged:: 0.4
|
|
|
|
If the *default* value is a callable, it will be called with the config
|
|
|
|
object as its argument in order to get the default value. This can be
|
|
|
|
used to implement config values whose default depends on other values.
|
|
|
|
|
2008-03-21 09:06:04 -05:00
|
|
|
.. method:: Sphinx.add_event(name)
|
2008-03-12 16:37:22 -05:00
|
|
|
|
|
|
|
Register an event called *name*.
|
|
|
|
|
2008-08-05 05:25:40 -05:00
|
|
|
.. method:: Sphinx.add_node(node, **kwds)
|
2008-03-12 16:37:22 -05:00
|
|
|
|
|
|
|
Register a Docutils node class. This is necessary for Docutils internals.
|
|
|
|
It may also be used in the future to validate nodes in the parsed documents.
|
|
|
|
|
2008-08-05 05:25:40 -05:00
|
|
|
Node visitor functions for the Sphinx HTML, LaTeX and text writers can be
|
|
|
|
given as keyword arguments: the keyword must be one or more of ``'html'``,
|
|
|
|
``'latex'``, ``'text'``, the value a 2-tuple of ``(visit, depart)`` methods.
|
|
|
|
``depart`` can be ``None`` if the ``visit`` function raises
|
|
|
|
:exc:`docutils.nodes.SkipNode`. Example::
|
|
|
|
|
|
|
|
class math(docutils.nodes.Element)
|
|
|
|
|
|
|
|
def visit_math_html(self, node):
|
|
|
|
self.body.append(self.starttag(node, 'math'))
|
|
|
|
def depart_math_html(self, node):
|
|
|
|
self.body.append('</math>')
|
|
|
|
|
|
|
|
app.add_node(math, html=(visit_math_html, depart_math_html))
|
|
|
|
|
|
|
|
Obviously, translators for which you don't specify visitor methods will choke
|
|
|
|
on the node when encountered in a document to translate.
|
|
|
|
|
|
|
|
.. versionchanged:: 0.5
|
|
|
|
Added the support for keyword arguments giving visit functions.
|
|
|
|
|
2008-11-23 10:08:19 -06:00
|
|
|
.. method:: Sphinx.add_directive(name, func, content, arguments, **options)
|
2008-03-12 16:37:22 -05:00
|
|
|
|
|
|
|
Register a Docutils directive. *name* must be the prospective directive
|
2008-03-18 13:19:21 -05:00
|
|
|
name, *func* the directive function for details about the signature and
|
|
|
|
return value. *content*, *arguments* and *options* are set as attributes on
|
|
|
|
the function and determine whether the directive has content, arguments and
|
|
|
|
options, respectively. For their exact meaning, please consult the Docutils
|
|
|
|
documentation.
|
|
|
|
|
2008-11-23 10:08:19 -06:00
|
|
|
For example, the (already existing) :dir:`literalinclude` directive would be
|
|
|
|
added like this::
|
|
|
|
|
|
|
|
from docutils.parsers.rst import directives
|
|
|
|
add_directive('literalinclude', literalinclude_directive,
|
|
|
|
content = 0, arguments = (1, 0, 0),
|
|
|
|
linenos = directives.flag,
|
|
|
|
language = direcitves.unchanged,
|
|
|
|
encoding = directives.encoding)
|
|
|
|
|
2008-03-18 13:19:21 -05:00
|
|
|
.. XXX once we target docutils 0.5, update this
|
2008-05-24 13:03:56 -05:00
|
|
|
|
2008-03-21 09:06:04 -05:00
|
|
|
.. method:: Sphinx.add_role(name, role)
|
2008-03-12 16:37:22 -05:00
|
|
|
|
|
|
|
Register a Docutils role. *name* must be the role name that occurs in the
|
2008-03-18 13:19:21 -05:00
|
|
|
source, *role* the role function (see the `Docutils documentation
|
|
|
|
<http://docutils.sourceforge.net/docs/howto/rst-roles.html>`_ on details).
|
2008-03-12 16:37:22 -05:00
|
|
|
|
2008-03-28 13:45:32 -05:00
|
|
|
.. method:: Sphinx.add_description_unit(directivename, rolename, indextemplate='', parse_node=None, ref_nodeclass=None)
|
2008-03-12 16:37:22 -05:00
|
|
|
|
2008-03-18 13:19:21 -05:00
|
|
|
This method is a very convenient way to add a new type of information that
|
|
|
|
can be cross-referenced. It will do this:
|
|
|
|
|
|
|
|
* Create a new directive (called *directivename*) for a :term:`description
|
2008-03-28 13:45:32 -05:00
|
|
|
unit`. It will automatically add index entries if *indextemplate* is
|
|
|
|
nonempty; if given, it must contain exactly one instance of ``%s``. See
|
|
|
|
the example below for how the template will be interpreted.
|
2008-03-18 13:19:21 -05:00
|
|
|
* Create a new role (called *rolename*) to cross-reference to these
|
|
|
|
description units.
|
|
|
|
* If you provide *parse_node*, it must be a function that takes a string and
|
|
|
|
a docutils node, and it must populate the node with children parsed from
|
2008-03-21 09:06:04 -05:00
|
|
|
the string. It must then return the name of the item to be used in
|
|
|
|
cross-referencing and index entries. See the :file:`ext.py` file in the
|
|
|
|
source for this documentation for an example.
|
2008-03-18 13:19:21 -05:00
|
|
|
|
|
|
|
For example, if you have this call in a custom Sphinx extension::
|
|
|
|
|
2008-03-28 13:45:32 -05:00
|
|
|
app.add_description_unit('directive', 'dir', 'pair: %s; directive')
|
2008-03-18 13:19:21 -05:00
|
|
|
|
|
|
|
you can use this markup in your documents::
|
|
|
|
|
|
|
|
.. directive:: function
|
|
|
|
|
|
|
|
Document a function.
|
|
|
|
|
|
|
|
<...>
|
|
|
|
|
|
|
|
See also the :dir:`function` directive.
|
|
|
|
|
2008-03-28 13:45:32 -05:00
|
|
|
For the directive, an index entry will be generated as if you had prepended ::
|
|
|
|
|
|
|
|
.. index:: pair: function; directive
|
|
|
|
|
|
|
|
The reference node will be of class ``literal`` (so it will be rendered in a
|
|
|
|
proportional font, as appropriate for code) unless you give the *ref_nodeclass*
|
|
|
|
argument, which must be a docutils node class (most useful are
|
|
|
|
``docutils.nodes.emphasis`` or ``docutils.nodes.strong`` -- you can also use
|
|
|
|
``docutils.nodes.generated`` if you want no further text decoration).
|
|
|
|
|
2008-03-18 13:19:21 -05:00
|
|
|
For the role content, you have the same options as for standard Sphinx roles
|
|
|
|
(see :ref:`xref-syntax`).
|
2008-03-12 16:37:22 -05:00
|
|
|
|
2008-03-28 13:45:32 -05:00
|
|
|
.. method:: Sphinx.add_crossref_type(directivename, rolename, indextemplate='', ref_nodeclass=None)
|
|
|
|
|
|
|
|
This method is very similar to :meth:`add_description_unit` except that the
|
|
|
|
directive it generates must be empty, and will produce no output.
|
|
|
|
|
|
|
|
That means that you can add semantic targets to your sources, and refer to
|
|
|
|
them using custom roles instead of generic ones (like :role:`ref`). Example
|
|
|
|
call::
|
|
|
|
|
|
|
|
app.add_crossref_type('topic', 'topic', 'single: %s', docutils.nodes.emphasis)
|
|
|
|
|
|
|
|
Example usage::
|
|
|
|
|
|
|
|
.. topic:: application API
|
|
|
|
|
|
|
|
The application API
|
|
|
|
-------------------
|
|
|
|
|
|
|
|
<...>
|
|
|
|
|
|
|
|
See also :topic:`this section <application API>`.
|
|
|
|
|
|
|
|
(Of course, the element following the ``topic`` directive needn't be a
|
|
|
|
section.)
|
|
|
|
|
2008-04-13 03:20:11 -05:00
|
|
|
.. method:: Sphinx.add_transform(transform)
|
|
|
|
|
|
|
|
Add the standard docutils :class:`Transform` subclass *transform* to the list
|
|
|
|
of transforms that are applied after Sphinx parses a reST document.
|
|
|
|
|
2008-08-06 08:04:14 -05:00
|
|
|
.. method:: Sphinx.add_javascript(filename)
|
|
|
|
|
|
|
|
Add *filename* to the list of JavaScript files that the default HTML template
|
|
|
|
will include. The filename must be relative to the HTML static path, see
|
|
|
|
:confval:`the docs for the config value <html_static_path>`.
|
|
|
|
|
|
|
|
.. versionadded:: 0.5
|
2008-11-30 12:58:29 -06:00
|
|
|
|
|
|
|
.. method:: Sphinx.add_lexer(alias, lexer)
|
|
|
|
|
|
|
|
Use *lexer*, which must be an instance of a Pygments lexer class, to
|
|
|
|
highlight code blocks with the given language *alias*.
|
|
|
|
|
|
|
|
.. versionadded:: 0.6
|
2008-08-06 08:04:14 -05:00
|
|
|
|
2008-03-21 09:06:04 -05:00
|
|
|
.. method:: Sphinx.connect(event, callback)
|
2008-03-12 16:37:22 -05:00
|
|
|
|
|
|
|
Register *callback* to be called when *event* is emitted. For details on
|
|
|
|
available core events and the arguments of callback functions, please see
|
|
|
|
:ref:`events`.
|
|
|
|
|
|
|
|
The method returns a "listener ID" that can be used as an argument to
|
|
|
|
:meth:`disconnect`.
|
|
|
|
|
2008-03-21 09:06:04 -05:00
|
|
|
.. method:: Sphinx.disconnect(listener_id)
|
2008-03-12 16:37:22 -05:00
|
|
|
|
|
|
|
Unregister callback *listener_id*.
|
|
|
|
|
2008-03-21 09:06:04 -05:00
|
|
|
.. method:: Sphinx.emit(event, *arguments)
|
2008-03-12 16:37:22 -05:00
|
|
|
|
2008-08-04 04:54:45 -05:00
|
|
|
Emit *event* and pass *arguments* to the callback functions. Return the
|
|
|
|
return values of all callbacks as a list. Do not emit core Sphinx events
|
|
|
|
in extensions!
|
|
|
|
|
|
|
|
.. method:: Sphinx.emit_firstresult(event, *arguments)
|
|
|
|
|
|
|
|
Emit *event* and pass *arguments* to the callback functions. Return the
|
|
|
|
result of the first callback that doesn't return ``None`` (and don't call
|
|
|
|
the rest of the callbacks).
|
|
|
|
|
|
|
|
.. versionadded:: 0.5
|
2008-03-12 16:37:22 -05:00
|
|
|
|
|
|
|
|
|
|
|
.. exception:: ExtensionError
|
|
|
|
|
|
|
|
All these functions raise this exception if something went wrong with the
|
|
|
|
extension API.
|
|
|
|
|
|
|
|
Examples of using the Sphinx extension API can be seen in the :mod:`sphinx.ext`
|
|
|
|
package.
|
|
|
|
|
|
|
|
|
|
|
|
.. _events:
|
|
|
|
|
|
|
|
Sphinx core events
|
|
|
|
------------------
|
|
|
|
|
2008-06-22 16:02:50 -05:00
|
|
|
These events are known to the core. The arguments shown are given to the
|
2008-05-31 11:14:36 -05:00
|
|
|
registered event handlers.
|
|
|
|
|
2008-06-22 16:02:50 -05:00
|
|
|
.. event:: builder-inited (app)
|
2008-05-31 11:14:36 -05:00
|
|
|
|
2008-08-04 04:54:45 -05:00
|
|
|
Emitted when the builder object has been created. It is available as
|
|
|
|
``app.builder``.
|
2008-05-31 11:14:36 -05:00
|
|
|
|
2008-11-09 04:56:40 -06:00
|
|
|
.. event:: env-purge-doc (app, env, docname)
|
|
|
|
|
|
|
|
Emitted when all traces of a source file should be cleaned from the
|
|
|
|
environment, that is, if the source file is removed or before it is freshly
|
|
|
|
read. This is for extensions that keep their own caches in attributes of the
|
|
|
|
environment.
|
|
|
|
|
|
|
|
For example, there is a cache of all modules on the environment. When a
|
|
|
|
source file has been changed, the cache's entries for the file are cleared,
|
|
|
|
since the module declarations could have been removed from the file.
|
|
|
|
|
|
|
|
.. versionadded:: 0.5
|
|
|
|
|
2008-10-16 14:04:45 -05:00
|
|
|
.. 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.
|
|
|
|
|
2008-11-09 04:56:40 -06:00
|
|
|
For example, if you want to use ``$`` signs to delimit inline math, like in
|
|
|
|
LaTeX, you can use a regular expression to replace ``$...$`` by
|
|
|
|
``:math:`...```.
|
|
|
|
|
2008-10-16 14:04:45 -05:00
|
|
|
.. versionadded:: 0.5
|
|
|
|
|
2008-06-22 16:02:50 -05:00
|
|
|
.. event:: doctree-read (app, doctree)
|
2008-05-31 11:14:36 -05:00
|
|
|
|
|
|
|
Emitted when a doctree has been parsed and read by the environment, and is
|
2008-08-04 04:54:45 -05:00
|
|
|
about to be pickled. The *doctree* can be modified in-place.
|
|
|
|
|
|
|
|
.. event:: missing-reference (app, env, node, contnode)
|
2008-05-31 11:14:36 -05:00
|
|
|
|
2008-08-04 04:54:45 -05:00
|
|
|
Emitted when a cross-reference to a Python module or object cannot be
|
|
|
|
resolved. If the event handler can resolve the reference, it should return a
|
|
|
|
new docutils node to be inserted in the document tree in place of the node
|
|
|
|
*node*. Usually this node is a :class:`reference` node containing *contnode*
|
|
|
|
as a child.
|
|
|
|
|
|
|
|
:param env: The build environment (``app.builder.env``).
|
|
|
|
:param node: The :class:`pending_xref` node to be resolved. Its attributes
|
|
|
|
``reftype``, ``reftarget``, ``modname`` and ``classname`` attributes
|
|
|
|
determine the type and target of the reference.
|
|
|
|
:param contnode: The node that carries the text and formatting inside the
|
|
|
|
future reference and should be a child of the returned reference node.
|
|
|
|
|
|
|
|
.. versionadded:: 0.5
|
|
|
|
|
2008-06-22 16:02:50 -05:00
|
|
|
.. event:: doctree-resolved (app, doctree, docname)
|
2008-05-31 11:14:36 -05:00
|
|
|
|
|
|
|
Emitted when a doctree has been "resolved" by the environment, that is, all
|
2008-11-09 04:56:40 -06:00
|
|
|
references have been resolved and TOCs have been inserted. The *doctree* can
|
|
|
|
be modified in place.
|
|
|
|
|
|
|
|
Here is the place to replace custom nodes that don't have visitor methods in
|
|
|
|
the writers, so that they don't cause errors when the writers encounter them.
|
2008-08-04 04:54:45 -05:00
|
|
|
|
|
|
|
.. event:: env-updated (app, env)
|
|
|
|
|
|
|
|
Emitted when the :meth:`update` method of the build environment has
|
|
|
|
completed, that is, the environment and all doctrees are now up-to-date.
|
2008-05-31 11:14:36 -05:00
|
|
|
|
2008-08-04 04:54:45 -05:00
|
|
|
.. versionadded:: 0.5
|
|
|
|
|
2008-06-22 16:02:50 -05:00
|
|
|
.. event:: page-context (app, pagename, templatename, context, doctree)
|
2008-05-31 11:14:36 -05:00
|
|
|
|
|
|
|
Emitted when the HTML builder has created a context dictionary to render a
|
|
|
|
template with -- this can be used to add custom elements to the context.
|
|
|
|
|
|
|
|
The *pagename* argument is the canonical name of the page being rendered,
|
|
|
|
that is, without ``.html`` suffix and using slashes as path separators. The
|
|
|
|
*templatename* is the name of the template to render, this will be
|
|
|
|
``'page.html'`` for all pages from reST documents.
|
|
|
|
|
|
|
|
The *context* argument is a dictionary of values that are given to the
|
|
|
|
template engine to render the page and can be modified to include custom
|
|
|
|
values. Keys must be strings.
|
|
|
|
|
|
|
|
The *doctree* argument will be a doctree when the page is created from a reST
|
|
|
|
documents; it will be ``None`` when the page is created from an HTML template
|
|
|
|
alone.
|
|
|
|
|
|
|
|
.. versionadded:: 0.4
|
|
|
|
|
2008-08-06 08:04:14 -05:00
|
|
|
.. event:: build-finished (app, exception)
|
|
|
|
|
|
|
|
Emitted when a build has finished, before Sphinx exits, usually used for
|
|
|
|
cleanup. This event is emitted even when the build process raised an
|
|
|
|
exception, given as the *exception* argument. The exception is reraised in
|
|
|
|
the application after the event handlers have run. If the build process
|
|
|
|
raised no exception, *exception* will be ``None``. This allows to customize
|
|
|
|
cleanup actions depending on the exception status.
|
|
|
|
|
|
|
|
.. versionadded:: 0.5
|
|
|
|
|
2008-04-13 13:16:55 -05:00
|
|
|
|
|
|
|
.. _template-bridge:
|
|
|
|
|
|
|
|
The template bridge
|
|
|
|
-------------------
|
|
|
|
|
|
|
|
.. autoclass:: TemplateBridge
|
|
|
|
:members:
|