diff --git a/pep2html.py b/pep2html.py index aabb0e1465a..24b7c16fe2f 100755 --- a/pep2html.py +++ b/pep2html.py @@ -53,7 +53,7 @@ from docutils import core, nodes, utils from docutils.readers import standalone -from docutils.transforms import frontmatter, misc, peps, Transform +from docutils.transforms import frontmatter, peps, Transform from docutils.parsers import rst class DataError(Exception): @@ -442,37 +442,23 @@ class PEPFooter(Transform): default_priority = 520 def apply(self): - pep_source_path = Path(self.document["source"]) - if not pep_source_path.match("pep-*"): + pep_source_path = Path(self.document['source']) + if not pep_source_path.match('pep-*'): return # not a PEP file, exit early - doc = self.document - reference_section = None - # Iterate through sections from the end of the document - for i, section in enumerate(reversed(doc)): + for section in reversed(self.document): if not isinstance(section, nodes.section): continue title_words = section[0].astext().lower().split() - if "references" in title_words: - reference_section = section + if 'references' in title_words: + # Remove references section if there are no displayed + # footnotes (it only has title & link target nodes) + if all(isinstance(ref_node, (nodes.title, nodes.target)) + for ref_node in section): + section.parent.remove(section) break - # Remove references section if there are no displayed footnotes - if reference_section: - pending = nodes.pending( - misc.CallBack, details={"callback": _cleanup_callback}) - reference_section.append(pending) - self.document.note_pending(pending, priority=1) - - -def _cleanup_callback(pending): - """Remove an empty "References" section.""" - for footer_node in pending.parent: - if isinstance(footer_node, (nodes.title, nodes.target, nodes.pending)): - return - pending.parent.parent.remove(pending.parent) - class PEPReader(standalone.Reader): diff --git a/pep_sphinx_extensions/pep_processor/transforms/pep_footer.py b/pep_sphinx_extensions/pep_processor/transforms/pep_footer.py index 5b8cc47dd5a..39dad0404b2 100644 --- a/pep_sphinx_extensions/pep_processor/transforms/pep_footer.py +++ b/pep_sphinx_extensions/pep_processor/transforms/pep_footer.py @@ -4,7 +4,6 @@ from docutils import nodes from docutils import transforms -from docutils.transforms import misc from pep_sphinx_extensions import config @@ -29,40 +28,25 @@ def apply(self) -> None: if not pep_source_path.match("pep-*"): return # not a PEP file, exit early - doc = self.document[0] - reference_section = None - # Iterate through sections from the end of the document - for i, section in enumerate(reversed(doc)): + for section in reversed(self.document[0]): if not isinstance(section, nodes.section): continue title_words = section[0].astext().lower().split() if "references" in title_words: - reference_section = section + # Remove references section if there are no displayed + # footnotes (it only has title & link target nodes) + if all(isinstance(ref_node, (nodes.title, nodes.target)) + for ref_node in section): + section.parent.remove(section) break - # Remove references section if there are no displayed footnotes - if reference_section: - pending = nodes.pending(misc.CallBack, details={"callback": _cleanup_callback}) - reference_section.append(pending) - self.document.note_pending(pending, priority=1) - # Add link to source text and last modified date if pep_source_path.stem != "pep-0000": self.document += _add_source_link(pep_source_path) self.document += _add_commit_history_info(pep_source_path) -def _cleanup_callback(pending: nodes.pending) -> None: - """Remove an empty "References" section.""" - for ref_node in pending.parent: - # Don't remove section if has more than title, link targets and pending - if not isinstance( - ref_node, (nodes.title, nodes.target, nodes.pending)): - return - pending.parent.parent.remove(pending.parent) - - def _add_source_link(pep_source_path: Path) -> nodes.paragraph: """Add link to source text on VCS (GitHub)""" source_link = config.pep_vcs_url + pep_source_path.name