Source code for ipypublish.sphinx.gls.roles

from sphinx.roles import XRefRole

from ipypublish.bib2glossary import BibGlossDB
from ipypublish.sphinx.gls.bibgloss import docutils_citation_ref_node


[docs]class GLSRole(XRefRole): """Class for processing the `gls` role."""
[docs] def result_nodes(self, document, env, node, is_ref): """Transform reference node into a citation reference, and note that the reference was cited. """ keys = node["reftarget"].split(",") # Note that at this point, usually, env.bibgloss_cache.bibfiles # is still empty because the bibliography directive may not # have been processed yet, so we cannot get the actual entry. # Instead, we simply fake an entry with the desired key, and # fix the label at doctree-resolved time. This happens in # process_citation_references. refnodes = [ docutils_citation_ref_node( BibGlossDB.get_fake_entry_obj(key), document, classes=["bibglossary"] ) for key in keys ] for key in keys: env.bibgloss_cache.add_cited(key, env.docname) return refnodes, []
[docs]class GLSCapitalRole(XRefRole): """Class for processing the `glsc` role."""
[docs] def result_nodes(self, document, env, node, is_ref): """Transform reference node into a citation reference, and note that the reference was cited. """ keys = node["reftarget"].split(",") # Note that at this point, usually, env.bibgloss_cache.bibfiles # is still empty because the bibliography directive may not # have been processed yet, so we cannot get the actual entry. # Instead, we simply fake an entry with the desired key, and # fix the label at doctree-resolved time. This happens in # process_citation_references. refnodes = [ docutils_citation_ref_node( BibGlossDB.get_fake_entry_obj(key), document, classes=["bibglossary", "bibgcapital"], ) for key in keys ] for key in keys: env.bibgloss_cache.add_cited(key, env.docname) return refnodes, []
[docs]class GLSPluralRole(XRefRole): """Class for processing the `glspl` role."""
[docs] def result_nodes(self, document, env, node, is_ref): """Transform reference node into a citation reference, and note that the reference was cited. """ keys = node["reftarget"].split(",") # Note that at this point, usually, env.bibgloss_cache.bibfiles # is still empty because the bibliography directive may not # have been processed yet, so we cannot get the actual entry. # Instead, we simply fake an entry with the desired key, and # fix the label at doctree-resolved time. This happens in # process_citation_references. refnodes = [ docutils_citation_ref_node( BibGlossDB.get_fake_entry_obj(key), document, classes=["bibglossary", "bibgplural"], ) for key in keys ] for key in keys: env.bibgloss_cache.add_cited(key, env.docname) return refnodes, []
[docs]class GLSPluralCapitalRole(XRefRole): """Class for processing the `glscpl` role."""
[docs] def result_nodes(self, document, env, node, is_ref): """Transform reference node into a citation reference, and note that the reference was cited. """ keys = node["reftarget"].split(",") # Note that at this point, usually, env.bibgloss_cache.bibfiles # is still empty because the bibliography directive may not # have been processed yet, so we cannot get the actual entry. # Instead, we simply fake an entry with the desired key, and # fix the label at doctree-resolved time. This happens in # process_citation_references. refnodes = [ docutils_citation_ref_node( BibGlossDB.get_fake_entry_obj(key), document, classes=["bibglossary", "bibgplural", "bibgcapital"], ) for key in keys ] for key in keys: env.bibgloss_cache.add_cited(key, env.docname) return refnodes, []