From 144d346b56045c12159783564070b6cfe66d39b2 Mon Sep 17 00:00:00 2001 From: Adam Turner <9087854+aa-turner@users.noreply.github.com> Date: Sat, 25 Jun 2022 22:32:43 +0100 Subject: [PATCH 1/7] Use Docutils 0.19 footnote styles --- sphinx/util/docutils.py | 33 ++++++++++++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/sphinx/util/docutils.py b/sphinx/util/docutils.py index e1fd780963b..63e8f384773 100644 --- a/sphinx/util/docutils.py +++ b/sphinx/util/docutils.py @@ -18,6 +18,7 @@ from docutils.parsers.rst.states import Inliner from docutils.statemachine import State, StateMachine, StringList from docutils.utils import Reporter, unescape +from docutils.writers._html_base import HTMLTranslator # NoQA from sphinx.deprecation import RemovedInSphinx70Warning, deprecated_alias from sphinx.errors import SphinxError @@ -182,10 +183,40 @@ def using_user_docutils_conf(confdir: Optional[str]) -> Generator[None, None, No os.environ['DOCUTILSCONFIG'] = docutilsconfig +def du19_footnotes() -> Generator[None, None, None]: + def visit_footnote(self, node): + label_style = self.settings.footnote_references + if not isinstance(node.previous_sibling(), type(node)): + self.body.append(f'\n') + if not isinstance(node.next_node(descend=False, siblings=True), + type(node)): + self.body.append('\n') + + old_visit_footnote = HTMLTranslator.visit_footnote + old_depart_footnote = HTMLTranslator.depart_footnote + + if docutils.__version_info__[:2] < (0, 19): + HTMLTranslator.visit_footnote = visit_footnote + HTMLTranslator.depart_footnote = depart_footnote + + try: + yield + finally: + if docutils.__version_info__[:2] < (0, 19): + HTMLTranslator.visit_footnote = old_visit_footnote + HTMLTranslator.depart_footnote = old_depart_footnote + + @contextmanager def patch_docutils(confdir: Optional[str] = None) -> Generator[None, None, None]: """Patch to docutils temporarily.""" - with patched_get_language(), patched_rst_get_language(), using_user_docutils_conf(confdir): + with patched_get_language(), patched_rst_get_language(), using_user_docutils_conf(confdir), du19_footnotes(): yield From 7ad4f793ee7e84d3cf9566ca81902148e522a64c Mon Sep 17 00:00:00 2001 From: Adam Turner <9087854+aa-turner@users.noreply.github.com> Date: Sat, 25 Jun 2022 22:35:07 +0100 Subject: [PATCH 2/7] cm --- sphinx/util/docutils.py | 1 + 1 file changed, 1 insertion(+) diff --git a/sphinx/util/docutils.py b/sphinx/util/docutils.py index 63e8f384773..3d4fbc8be79 100644 --- a/sphinx/util/docutils.py +++ b/sphinx/util/docutils.py @@ -183,6 +183,7 @@ def using_user_docutils_conf(confdir: Optional[str]) -> Generator[None, None, No os.environ['DOCUTILSCONFIG'] = docutilsconfig +@contextmanager def du19_footnotes() -> Generator[None, None, None]: def visit_footnote(self, node): label_style = self.settings.footnote_references From 8ba212825c35f777322860c0d9cec85269b930e6 Mon Sep 17 00:00:00 2001 From: Adam Turner <9087854+aa-turner@users.noreply.github.com> Date: Sat, 25 Jun 2022 22:42:27 +0100 Subject: [PATCH 3/7] Move styles to conditional block --- sphinx/themes/basic/static/basic.css_t | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/sphinx/themes/basic/static/basic.css_t b/sphinx/themes/basic/static/basic.css_t index d8f3fe74626..b51451ead64 100644 --- a/sphinx/themes/basic/static/basic.css_t +++ b/sphinx/themes/basic/static/basic.css_t @@ -629,7 +629,7 @@ ul.simple p { margin-bottom: 0; } -/* Docutils 0.17 and older (footnotes & citations) */ +{%- if docutils_version_info[:2] < (0, 18) %} dl.footnote > dt, dl.citation > dt { float: left; @@ -646,8 +646,7 @@ dl.citation > dd:after { content: ""; clear: both; } - -/* Docutils 0.18+ (footnotes & citations) */ +{%- elif docutils_version_info[:2] >= (0, 18) %} aside.footnote > span, div.citation > span { float: left; @@ -671,8 +670,7 @@ div.citation > p:last-of-type:after { content: ""; clear: both; } - -/* Footnotes & citations ends */ +{%- endif %} dl.field-list { display: grid; From 4710693f7b41f681666cea8aad1375423bc9e6ad Mon Sep 17 00:00:00 2001 From: Adam Turner <9087854+aa-turner@users.noreply.github.com> Date: Sun, 26 Jun 2022 19:13:52 +0100 Subject: [PATCH 4/7] Docutils 0.18 only --- sphinx/util/docutils.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/sphinx/util/docutils.py b/sphinx/util/docutils.py index 3d4fbc8be79..9698649b434 100644 --- a/sphinx/util/docutils.py +++ b/sphinx/util/docutils.py @@ -202,14 +202,16 @@ def depart_footnote(self, node): old_visit_footnote = HTMLTranslator.visit_footnote old_depart_footnote = HTMLTranslator.depart_footnote - if docutils.__version_info__[:2] < (0, 19): + # Only apply on Docutils 0.18 or 0.18.1, as 0.17 and earlier used a
based + # approach, and 0.19 and later use the fixed approach by default. + if docutils.__version_info__[:2] == (0, 18): HTMLTranslator.visit_footnote = visit_footnote HTMLTranslator.depart_footnote = depart_footnote try: yield finally: - if docutils.__version_info__[:2] < (0, 19): + if docutils.__version_info__[:2] == (0, 18): HTMLTranslator.visit_footnote = old_visit_footnote HTMLTranslator.depart_footnote = old_depart_footnote From 6cbb7c492c716a9e420fdd3a95a33d4c761b3947 Mon Sep 17 00:00:00 2001 From: Adam Turner <9087854+aa-turner@users.noreply.github.com> Date: Sun, 26 Jun 2022 19:18:23 +0100 Subject: [PATCH 5/7] Break with clause --- sphinx/util/docutils.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/sphinx/util/docutils.py b/sphinx/util/docutils.py index 9698649b434..3db7ce44144 100644 --- a/sphinx/util/docutils.py +++ b/sphinx/util/docutils.py @@ -219,7 +219,10 @@ def depart_footnote(self, node): @contextmanager def patch_docutils(confdir: Optional[str] = None) -> Generator[None, None, None]: """Patch to docutils temporarily.""" - with patched_get_language(), patched_rst_get_language(), using_user_docutils_conf(confdir), du19_footnotes(): + with patched_get_language(), \ + patched_rst_get_language(), \ + using_user_docutils_conf(confdir), \ + du19_footnotes(): yield From 6156aa2fd9ebc82532caf17d9fc8abb9eb8d816e Mon Sep 17 00:00:00 2001 From: Adam Turner <9087854+aa-turner@users.noreply.github.com> Date: Sun, 26 Jun 2022 19:19:52 +0100 Subject: [PATCH 6/7] make mypy happy --- sphinx/util/docutils.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/sphinx/util/docutils.py b/sphinx/util/docutils.py index 3db7ce44144..6179ee51591 100644 --- a/sphinx/util/docutils.py +++ b/sphinx/util/docutils.py @@ -205,15 +205,15 @@ def depart_footnote(self, node): # Only apply on Docutils 0.18 or 0.18.1, as 0.17 and earlier used a
based # approach, and 0.19 and later use the fixed approach by default. if docutils.__version_info__[:2] == (0, 18): - HTMLTranslator.visit_footnote = visit_footnote - HTMLTranslator.depart_footnote = depart_footnote + HTMLTranslator.visit_footnote = visit_footnote # type: ignore[assignment] + HTMLTranslator.depart_footnote = depart_footnote # type: ignore[assignment] try: yield finally: if docutils.__version_info__[:2] == (0, 18): - HTMLTranslator.visit_footnote = old_visit_footnote - HTMLTranslator.depart_footnote = old_depart_footnote + HTMLTranslator.visit_footnote = old_visit_footnote # type: ignore[assignment] + HTMLTranslator.depart_footnote = old_depart_footnote # type: ignore[assignment] @contextmanager From b5757142e4a299e0659cc216835ec3b7ae8f5022 Mon Sep 17 00:00:00 2001 From: Adam Turner <9087854+aa-turner@users.noreply.github.com> Date: Sun, 3 Jul 2022 12:37:40 +0100 Subject: [PATCH 7/7] CHANGES --- CHANGES | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGES b/CHANGES index 4a2059d18e5..cf77f523d07 100644 --- a/CHANGES +++ b/CHANGES @@ -24,6 +24,9 @@ Features added making whitespace issues easier to identify. * #10571: quickstart: Reduce content in the generated ``conf.py`` file. Patch by Pradyun Gedam. +* #10599: HTML Theme: Wrap consecutive footnotes in an ``