Skip to content

Commit d2f4266

Browse files
authored
Require Docutils 0.20 or greater (#12555)
1 parent 063c973 commit d2f4266

File tree

6 files changed

+13
-55
lines changed

6 files changed

+13
-55
lines changed

.github/workflows/main.yml

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -38,14 +38,12 @@ jobs:
3838
- "3.12"
3939
- "3.13-dev"
4040
docutils:
41-
- "0.18"
41+
- "0.20"
4242
- "0.21"
43-
include:
44-
# test every supported Docutils version for the latest supported Python
45-
- python: "3.12"
46-
docutils: "0.19"
47-
- python: "3.12"
48-
docutils: "0.20"
43+
# include:
44+
# # test every supported Docutils version for the latest supported Python
45+
# - python: "3.12"
46+
# docutils: "0.20"
4947

5048
steps:
5149
- uses: actions/checkout@v4

CHANGES.rst

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@ Release 7.4.0 (in development)
44
Dependencies
55
------------
66

7+
* #12555: Drop Docutils 0.18.1 and Docutils 0.19 support.
8+
Patch by Adam Turner
9+
710
Incompatible changes
811
--------------------
912

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ dependencies = [
6464
"sphinxcontrib-qthelp",
6565
"Jinja2>=3.0",
6666
"Pygments>=2.14",
67-
"docutils>=0.18.1,<0.22",
67+
"docutils>=0.20,<0.22",
6868
"snowballstemmer>=2.0",
6969
"babel>=2.9",
7070
"alabaster~=0.7.14",

sphinx/builders/html/__init__.py

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -209,11 +209,7 @@ def __init__(self, app: Sphinx, env: BuildEnvironment) -> None:
209209
source_class=DocTreeInput,
210210
destination=StringOutput(encoding='unicode'),
211211
)
212-
if docutils.__version_info__[:2] >= (0, 19):
213-
pub.get_settings(output_encoding='unicode', traceback=True)
214-
else:
215-
op = pub.setup_option_parser(output_encoding='unicode', traceback=True)
216-
pub.settings = op.get_default_values()
212+
pub.get_settings(output_encoding='unicode', traceback=True)
217213
self._publisher = pub
218214

219215
def init(self) -> None:

sphinx/io.py

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,6 @@
44

55
from typing import TYPE_CHECKING, Any
66

7-
import docutils
8-
from docutils import nodes
97
from docutils.core import Publisher
108
from docutils.io import FileInput, Input, NullOutput
119
from docutils.readers import standalone
@@ -25,6 +23,7 @@
2523
from sphinx.versioning import UIDTransform
2624

2725
if TYPE_CHECKING:
26+
from docutils import nodes
2827
from docutils.frontend import Values
2928
from docutils.parsers import Parser
3029
from docutils.transforms import Transform
@@ -191,8 +190,5 @@ def create_publisher(app: Sphinx, filetype: str) -> Publisher:
191190
# Propagate exceptions by default when used programmatically:
192191
defaults = {'traceback': True, **app.env.settings}
193192
# Set default settings
194-
if docutils.__version_info__[:2] >= (0, 19):
195-
pub.get_settings(**defaults)
196-
else:
197-
pub.settings = pub.setup_option_parser(**defaults).get_default_values()
193+
pub.get_settings(**defaults)
198194
return pub

sphinx/util/docutils.py

Lines changed: 1 addition & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717
from docutils.parsers.rst.states import Inliner # NoQA: TCH002
1818
from docutils.statemachine import State, StateMachine, StringList
1919
from docutils.utils import Reporter, unescape
20-
from docutils.writers._html_base import HTMLTranslator
2120

2221
from sphinx.errors import SphinxError
2322
from sphinx.locale import _, __
@@ -181,46 +180,12 @@ def using_user_docutils_conf(confdir: str | None) -> Iterator[None]:
181180
os.environ['DOCUTILSCONFIG'] = docutilsconfig
182181

183182

184-
@contextmanager
185-
def du19_footnotes() -> Iterator[None]:
186-
def visit_footnote(self: HTMLTranslator, node: Element) -> None:
187-
label_style = self.settings.footnote_references
188-
if not isinstance(node.previous_sibling(), type(node)):
189-
self.body.append(f'<aside class="footnote-list {label_style}">\n')
190-
self.body.append(self.starttag(node, 'aside',
191-
classes=[node.tagname, label_style],
192-
role="note"))
193-
194-
def depart_footnote(self: HTMLTranslator, node: Element) -> None:
195-
self.body.append('</aside>\n')
196-
if not isinstance(node.next_node(descend=False, siblings=True),
197-
type(node)):
198-
self.body.append('</aside>\n')
199-
200-
old_visit_footnote = HTMLTranslator.visit_footnote
201-
old_depart_footnote = HTMLTranslator.depart_footnote
202-
203-
# Only apply on Docutils 0.18 or 0.18.1, as 0.17 and earlier used a <dl> based
204-
# approach, and 0.19 and later use the fixed approach by default.
205-
if docutils.__version_info__[:2] == (0, 18):
206-
HTMLTranslator.visit_footnote = visit_footnote # type: ignore[method-assign]
207-
HTMLTranslator.depart_footnote = depart_footnote # type: ignore[method-assign]
208-
209-
try:
210-
yield
211-
finally:
212-
if docutils.__version_info__[:2] == (0, 18):
213-
HTMLTranslator.visit_footnote = old_visit_footnote # type: ignore[method-assign]
214-
HTMLTranslator.depart_footnote = old_depart_footnote # type: ignore[method-assign]
215-
216-
217183
@contextmanager
218184
def patch_docutils(confdir: str | None = None) -> Iterator[None]:
219185
"""Patch to docutils temporarily."""
220186
with patched_get_language(), \
221187
patched_rst_get_language(), \
222-
using_user_docutils_conf(confdir), \
223-
du19_footnotes():
188+
using_user_docutils_conf(confdir):
224189
yield
225190

226191

0 commit comments

Comments
 (0)