This repository provides User Manual for setting up a Docker environment tailored for testing DGTD code.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

64 lines
2.3 KiB

8 months ago
"""
.. autoclass:: FootBibliographyDirective
.. automethod:: run
"""
from typing import TYPE_CHECKING, cast
from docutils.parsers.rst import Directive
from .bibfile import _make_ids
if TYPE_CHECKING:
from sphinx.environment import BuildEnvironment
from .domain import BibtexDomain
from .foot_domain import BibtexFootDomain
class FootBibliographyDirective(Directive):
"""Class for processing the :rst:dir:`footbibliography` directive."""
required_arguments = 0
optional_arguments = 0
has_content = False
def run(self):
"""Set file dependencies, and insert the footnotes that were created
earlier by :meth:`.foot_roles.FootCiteRole.result_nodes`.
"""
env = cast("BuildEnvironment", self.state.document.settings.env)
foot_old_refs = env.temp_data.setdefault("bibtex_foot_old_refs", set())
foot_new_refs = env.temp_data.setdefault("bibtex_foot_new_refs", set())
footbibliography_count = env.temp_data["bibtex_footbibliography_count"] = (
env.temp_data.get("bibtex_footbibliography_count", 0) + 1
)
if not foot_new_refs:
return []
else:
foot_old_refs |= foot_new_refs
foot_new_refs.clear()
# bibliography stored in env.temp_data["bibtex_foot_bibliography"]
foot_domain = cast("BibtexFootDomain", env.get_domain("footcite"))
foot_bibliography, env.temp_data["bibtex_foot_bibliography"] = (
env.temp_data["bibtex_foot_bibliography"],
foot_domain.bibliography_header.deepcopy(),
)
domain = cast("BibtexDomain", env.get_domain("cite"))
for bibfile in domain.bibdata.bibfiles:
env.note_dependency(bibfile)
foot_bibliography["ids"] += _make_ids(
docname=env.docname,
lineno=self.lineno,
ids=set(self.state.document.ids.keys()),
raw_id=env.app.config.bibtex_footbibliography_id.format(
footbibliography_count=footbibliography_count
),
)
self.state.document.note_explicit_target(
foot_bibliography, foot_bibliography
)
return [foot_bibliography]