Source code for sphinxcontrib.bibtex.foot_domain

"""
    Domain for footnote citations.

    .. autoclass:: BibtexFootDomain
        :members:
"""

from typing import TYPE_CHECKING, List, Dict, Tuple

import docutils.nodes
import docutils.utils

import sphinxcontrib.bibtex.plugin
import sphinx.util

from sphinx.domains import Domain, ObjType
from sphinx.locale import _

from .foot_roles import FootCiteRole
from .domain import parse_header
from .style.referencing import BaseReferenceStyle

if TYPE_CHECKING:
    from sphinx.environment import BuildEnvironment
    from sphinx.addnodes import pending_xref
    from sphinx.builders import Builder

logger = sphinx.util.logging.getLogger(__name__)


[docs]class BibtexFootDomain(Domain): """Sphinx domain for footnote citations.""" name = 'footcite' label = 'BibTeX Footnote Citations' data_version = 0 initial_data = dict( bibliography_header=docutils.nodes.container(), ) reference_style: BaseReferenceStyle @property def bibliography_header(self) -> docutils.nodes.Element: return self.data['bibliography_header'] def __init__(self, env: "BuildEnvironment"): # set up referencing style style = sphinxcontrib.bibtex.plugin.find_plugin( 'sphinxcontrib.bibtex.style.referencing', env.app.config.bibtex_foot_reference_style) self.reference_style = style() # set up object types and roles for referencing style role_names = self.reference_style.role_names() self.object_types = dict( citation=ObjType(_('citation'), *role_names, searchprio=-1), ) self.roles = dict((name, FootCiteRole()) for name in role_names) # initialize the domain super().__init__(env) # parse bibliography header header = getattr(env.app.config, "bibtex_footbibliography_header") if header: self.data["bibliography_header"] += \ parse_header(header, "foot_bibliography_header")
[docs] def merge_domaindata(self, docnames: List[str], otherdata: Dict) -> None: """Merge in data regarding *docnames* from domain data inventory *otherdata*. As there is no document specific data for this domain, this function does nothing. """ pass
[docs] def resolve_any_xref(self, env: "BuildEnvironment", fromdocname: str, builder: "Builder", target: str, node: "pending_xref", contnode: docutils.nodes.Element ) -> List[Tuple[str, docutils.nodes.Element]]: """Resolve the pending reference *node* with the given *target*, where the reference comes from an "any" role. Since citation references are resolved to regular citations, and not to footnote citations, this implementation simply returns an empty list. """ return []