Source code for ipypublish.sphinx.gls.extension

from ipypublish import __version__
from ipypublish.sphinx.utils import import_sphinx

from ipypublish.sphinx.gls import processing as bibproc
from ipypublish.sphinx.gls.directives import BibGlossaryDirective
from ipypublish.sphinx.gls.roles import (
    GLSRole,
    GLSCapitalRole,
    GLSPluralRole,
    GLSPluralCapitalRole,
)
from ipypublish.sphinx.gls.nodes import BibGlossaryNode
from ipypublish.sphinx.gls.transforms import (
    BibGlossaryTransform,
    OverrideCitationReferences,
    HandleMissingCitesTransform,
)

try:
    from sphinx.application import Sphinx  # noqa: F401
except ImportError:
    pass


[docs]def setup(app): # type: (Sphinx) -> dict """Initialize Sphinx extension. """ # delayed import of sphinx sphinx = import_sphinx() try: transforms = app.registry.get_transforms() except AttributeError: # Sphinx < 1.7 from sphinx.io import SphinxStandaloneReader transforms = SphinxStandaloneReader.transforms def add_transform(transform, post=False): if transform not in transforms: if post: app.add_post_transform(transform) else: app.add_transform(transform) # BibGlossary functionality app.connect("builder-inited", bibproc.init_bibgloss_cache) app.connect("doctree-resolved", bibproc.process_citations) app.connect("doctree-resolved", bibproc.process_citation_references) app.connect("env-purge-doc", bibproc.purge_bibgloss_cache) # app.connect("env-updated", bibproc.check_duplicate_labels) app.add_config_value("bibgloss_convert_latex", True, rebuild="html") app.add_config_value("bibgloss_default_style", "list", rebuild="html") app.add_directive("bibglossary", BibGlossaryDirective) # Note: because docutils.parsers.rst.roles.role(role_name) # applies role_name.lower(), you can't have unique gls and Gls roles app.add_role("gls", GLSRole()) app.add_role("glsc", GLSCapitalRole()) app.add_role("glspl", GLSPluralRole()) app.add_role("glscpl", GLSPluralCapitalRole()) app.add_node(BibGlossaryNode, override=True) add_transform(BibGlossaryTransform) # these patches have been fixed (by me!) upstream if sphinx.version_info < (2,): add_transform(OverrideCitationReferences) add_transform(HandleMissingCitesTransform, post=True) # Parallel read is not safe at the moment: in the current design, # the document that contains references must be read last for all # references to be resolved. parallel_read_safe = False return { "version": __version__, "parallel_read_safe": parallel_read_safe, "parallel_write_safe": True, "env_version": 1, }