diff options
| author | Adam Turner <9087854+aa-turner@users.noreply.github.com> | 2022-05-22 21:09:39 +0100 |
|---|---|---|
| committer | Adam Turner <9087854+AA-Turner@users.noreply.github.com> | 2022-09-27 18:31:47 +0100 |
| commit | bb62d2a2ee7d6d4b79b269c837ebf8d57aee0795 (patch) | |
| tree | 1ff11cd7b3291a5004c5b8bf0ba83394331ebfd9 /sphinx | |
| parent | 080517ce55119a6358337b5f939b3942e4de63b4 (diff) | |
| download | sphinx-git-bb62d2a2ee7d6d4b79b269c837ebf8d57aee0795.tar.gz | |
Increase minimum Docutils to 0.18
Diffstat (limited to 'sphinx')
| -rw-r--r-- | sphinx/addnodes.py | 29 | ||||
| -rw-r--r-- | sphinx/directives/patches.py | 28 | ||||
| -rw-r--r-- | sphinx/environment/__init__.py | 3 | ||||
| -rw-r--r-- | sphinx/search/__init__.py | 4 | ||||
| -rw-r--r-- | sphinx/themes/basic/static/basic.css_t | 45 | ||||
| -rw-r--r-- | sphinx/themes/bizstyle/static/bizstyle.css_t | 2 | ||||
| -rw-r--r-- | sphinx/themes/classic/static/classic.css_t | 2 | ||||
| -rw-r--r-- | sphinx/themes/epub/static/epub.css_t | 2 | ||||
| -rw-r--r-- | sphinx/themes/nature/static/nature.css_t | 2 | ||||
| -rw-r--r-- | sphinx/themes/nonav/static/nonav.css_t | 2 | ||||
| -rw-r--r-- | sphinx/themes/pyramid/static/epub.css_t | 2 | ||||
| -rw-r--r-- | sphinx/themes/pyramid/static/pyramid.css_t | 2 | ||||
| -rw-r--r-- | sphinx/themes/sphinxdoc/static/sphinxdoc.css_t | 2 | ||||
| -rw-r--r-- | sphinx/themes/traditional/static/traditional.css_t | 2 | ||||
| -rw-r--r-- | sphinx/transforms/i18n.py | 9 | ||||
| -rw-r--r-- | sphinx/util/docutils.py | 10 | ||||
| -rw-r--r-- | sphinx/util/nodes.py | 26 |
17 files changed, 20 insertions, 152 deletions
diff --git a/sphinx/addnodes.py b/sphinx/addnodes.py index 4abddf205..fea9c0edd 100644 --- a/sphinx/addnodes.py +++ b/sphinx/addnodes.py @@ -2,19 +2,24 @@ from typing import TYPE_CHECKING, Any, Dict, List, Optional, Sequence -import docutils from docutils import nodes from docutils.nodes import Element +from sphinx.deprecation import RemovedInSphinx70Warning, deprecated_alias + if TYPE_CHECKING: from sphinx.application import Sphinx -try: - from docutils.nodes import meta as docutils_meta # type: ignore -except ImportError: - # docutils-0.17 - from docutils.parsers.rst.directives.html import MetaBody - docutils_meta = MetaBody.meta +deprecated_alias('sphinx.addnodes', + { + 'meta': nodes.meta, # type: ignore + 'docutils_meta': nodes.meta, # type: ignore + }, + RemovedInSphinx70Warning, + { + 'meta': 'docutils.nodes.meta', + 'docutils_meta': 'docutils.nodes.meta', + }) class document(nodes.document): @@ -424,13 +429,6 @@ class tabular_col_spec(nodes.Element): """Node for specifying tabular columns, used for LaTeX output.""" -class meta(nodes.Special, nodes.PreBibliographic, nodes.Element): - """Node for meta directive -- same as docutils' standard meta node, - but pickleable. - """ - rawcontent = None - - # inline nodes class pending_xref(nodes.Inline, nodes.Element): @@ -557,9 +555,6 @@ def setup(app: "Sphinx") -> Dict[str, Any]: app.add_node(literal_strong) app.add_node(manpage) - if docutils.__version_info__ < (0, 18): - app.add_node(meta) - return { 'version': 'builtin', 'parallel_read_safe': True, diff --git a/sphinx/directives/patches.py b/sphinx/directives/patches.py index a0bf26262..833a9ff0b 100644 --- a/sphinx/directives/patches.py +++ b/sphinx/directives/patches.py @@ -1,14 +1,14 @@ import os from os import path -from typing import TYPE_CHECKING, Any, Dict, List, Sequence, cast +from typing import TYPE_CHECKING, Any, Dict, List, cast from docutils import nodes from docutils.nodes import Node, make_id from docutils.parsers.rst import directives from docutils.parsers.rst.directives import images, tables +from docutils.parsers.rst.directives.misc import Meta # type: ignore[attr-defined] from docutils.parsers.rst.roles import set_classes -from sphinx import addnodes from sphinx.directives import optional_int from sphinx.domains.math import MathDomain from sphinx.locale import __ @@ -18,30 +18,6 @@ from sphinx.util.nodes import set_source_info from sphinx.util.osutil import SEP, os_path, relpath from sphinx.util.typing import OptionSpec -try: - from docutils.parsers.rst.directives.misc import Meta as Meta # type: ignore -except ImportError: - # docutils-0.17 - from docutils.parsers.rst.directives.html import Meta as MetaBase - - class Meta(MetaBase, SphinxDirective): # type: ignore - def run(self) -> Sequence[Node]: # type: ignore - result = super().run() - for node in result: - # for docutils-0.17. Since docutils-0.18, patching is no longer needed - # because it uses picklable node; ``docutils.nodes.meta``. - if (isinstance(node, nodes.pending) and - isinstance(node.details['nodes'][0], addnodes.docutils_meta)): - meta = node.details['nodes'][0] - meta.source = self.env.doc2path(self.env.docname) - meta.line = self.lineno - meta.rawcontent = meta['content'] - - # docutils' meta nodes aren't picklable because the class is nested - meta.__class__ = addnodes.meta - - return result - if TYPE_CHECKING: from sphinx.application import Sphinx diff --git a/sphinx/environment/__init__.py b/sphinx/environment/__init__.py index 59904e26f..6c956ecdd 100644 --- a/sphinx/environment/__init__.py +++ b/sphinx/environment/__init__.py @@ -9,7 +9,6 @@ from os import path from typing import (TYPE_CHECKING, Any, Callable, Dict, Generator, Iterator, List, Optional, Set, Tuple, Union) -import docutils from docutils import nodes from docutils.nodes import Node @@ -52,8 +51,6 @@ default_settings: Dict[str, Any] = { 'file_insertion_enabled': True, 'smartquotes_locales': [], } -if docutils.__version_info__[:2] <= (0, 17): - default_settings['embed_images'] = False # This is increased every time an environment attribute is added # or changed to properly invalidate pickle files. diff --git a/sphinx/search/__init__.py b/sphinx/search/__init__.py index 5330d7e7c..45d938949 100644 --- a/sphinx/search/__init__.py +++ b/sphinx/search/__init__.py @@ -189,8 +189,8 @@ class WordCollector(nodes.NodeVisitor): self.lang = lang def is_meta_keywords(self, node: Element) -> bool: - if (isinstance(node, (addnodes.meta, addnodes.docutils_meta)) and - node.get('name') == 'keywords'): + if (isinstance(node, nodes.meta) # type: ignore + and node.get('name') == 'keywords'): meta_lang = node.get('lang') if meta_lang is None: # lang not specified return True diff --git a/sphinx/themes/basic/static/basic.css_t b/sphinx/themes/basic/static/basic.css_t index 2effcd963..401824a5c 100644 --- a/sphinx/themes/basic/static/basic.css_t +++ b/sphinx/themes/basic/static/basic.css_t @@ -237,18 +237,6 @@ a.headerlink { visibility: hidden; } -{%- if docutils_version_info[:2] < (0, 18) %} -a.brackets:before, -span.brackets > a:before{ - content: "["; -} - -a.brackets:after, -span.brackets > a:after { - content: "]"; -} -{% endif %} - h1:hover > a.headerlink, h2:hover > a.headerlink, h3:hover > a.headerlink, @@ -337,20 +325,16 @@ p.sidebar-title { font-weight: bold; } -{%- if docutils_version_info[:2] >= (0, 18) %} nav.contents, aside.topic, -{%- endif %} div.admonition, div.topic, blockquote { clear: left; } /* -- topics ---------------------------------------------------------------- */ -{%- if docutils_version_info[:2] >= (0, 18) %} nav.contents, aside.topic, -{%- endif %} div.topic { border: 1px solid #ccc; padding: 7px; @@ -389,10 +373,8 @@ div.body p.centered { div.sidebar > :last-child, aside.sidebar > :last-child, -{%- if docutils_version_info[:2] >= (0, 18) %} nav.contents > :last-child, aside.topic > :last-child, -{%- endif %} div.topic > :last-child, div.admonition > :last-child { margin-bottom: 0; @@ -400,10 +382,8 @@ div.admonition > :last-child { div.sidebar::after, aside.sidebar::after, -{%- if docutils_version_info[:2] >= (0, 18) %} nav.contents::after, aside.topic::after, -{%- endif %} div.topic::after, div.admonition::after, blockquote::after { @@ -629,24 +609,6 @@ ul.simple p { margin-bottom: 0; } -{%- if docutils_version_info[:2] < (0, 18) %} -dl.footnote > dt, -dl.citation > dt { - float: left; - margin-right: 0.5em; -} - -dl.footnote > dd, -dl.citation > dd { - margin-bottom: 0em; -} - -dl.footnote > dd:after, -dl.citation > dd:after { - content: ""; - clear: both; -} -{%- elif docutils_version_info[:2] >= (0, 18) %} aside.footnote > span, div.citation > span { float: left; @@ -670,7 +632,6 @@ div.citation > p:last-of-type:after { content: ""; clear: both; } -{%- endif %} dl.field-list { display: grid; @@ -684,12 +645,6 @@ dl.field-list > dt { padding-right: 5px; } -{%- if docutils_version_info[:2] < (0, 18) %} -dl.field-list > dt:after { - content: ":"; -} -{% endif %} - dl.field-list > dd { padding-left: 0.5em; margin-top: 0em; diff --git a/sphinx/themes/bizstyle/static/bizstyle.css_t b/sphinx/themes/bizstyle/static/bizstyle.css_t index a524345f9..a96aef577 100644 --- a/sphinx/themes/bizstyle/static/bizstyle.css_t +++ b/sphinx/themes/bizstyle/static/bizstyle.css_t @@ -306,10 +306,8 @@ div.quotebar { border: 1px solid #ccc; } -{%- if docutils_version_info[:2] >= (0, 18) %} nav.contents, aside.topic, -{% endif %} div.topic { background-color: #f8f8f8; } diff --git a/sphinx/themes/classic/static/classic.css_t b/sphinx/themes/classic/static/classic.css_t index 789bec811..a15e7eeae 100644 --- a/sphinx/themes/classic/static/classic.css_t +++ b/sphinx/themes/classic/static/classic.css_t @@ -290,10 +290,8 @@ div.seealso { border: 1px solid #ff6; } -{%- if docutils_version_info[:2] >= (0, 18) %} nav.contents, aside.topic, -{% endif %} div.topic { background-color: #eee; } diff --git a/sphinx/themes/epub/static/epub.css_t b/sphinx/themes/epub/static/epub.css_t index a30344431..245582f61 100644 --- a/sphinx/themes/epub/static/epub.css_t +++ b/sphinx/themes/epub/static/epub.css_t @@ -245,10 +245,8 @@ p.sidebar-title { /* -- topics ---------------------------------------------------------------- */ -{%- if docutils_version_info[:2] >= (0, 18) %} nav.contents, aside.topic, -{% endif %} div.topic { border: 1px solid #ccc; padding: 7px 7px 0 7px; diff --git a/sphinx/themes/nature/static/nature.css_t b/sphinx/themes/nature/static/nature.css_t index 93f9a5944..57e1ba7cf 100644 --- a/sphinx/themes/nature/static/nature.css_t +++ b/sphinx/themes/nature/static/nature.css_t @@ -194,10 +194,8 @@ div.seealso { border: 1px solid #ff6; } -{%- if docutils_version_info[:2] >= (0, 18) %} nav.contents, aside.topic, -{% endif %} div.topic { background-color: #eee; } diff --git a/sphinx/themes/nonav/static/nonav.css_t b/sphinx/themes/nonav/static/nonav.css_t index 933365e07..c66ae99ad 100644 --- a/sphinx/themes/nonav/static/nonav.css_t +++ b/sphinx/themes/nonav/static/nonav.css_t @@ -234,10 +234,8 @@ p.sidebar-title { /* -- topics ---------------------------------------------------------------- */ -{%- if docutils_version_info[:2] >= (0, 18) %} nav.contents, aside.topic, -{% endif %} div.topic { border: 1px solid #ccc; padding: 7px 7px 0 7px; diff --git a/sphinx/themes/pyramid/static/epub.css_t b/sphinx/themes/pyramid/static/epub.css_t index 98741d0b8..12cb97487 100644 --- a/sphinx/themes/pyramid/static/epub.css_t +++ b/sphinx/themes/pyramid/static/epub.css_t @@ -254,10 +254,8 @@ div.seealso { border: 1px solid #ff6; } -{%- if docutils_version_info[:2] >= (0, 18) %} nav.contents, aside.topic, -{% endif %} div.topic { background-color: #eee; } diff --git a/sphinx/themes/pyramid/static/pyramid.css_t b/sphinx/themes/pyramid/static/pyramid.css_t index 0ced6b29f..46b613c2b 100644 --- a/sphinx/themes/pyramid/static/pyramid.css_t +++ b/sphinx/themes/pyramid/static/pyramid.css_t @@ -245,10 +245,8 @@ div.seealso { padding: 10px 20px 10px 60px; } -{%- if docutils_version_info[:2] >= (0, 18) %} nav.contents, aside.topic, -{% endif %} div.topic { background: #eeeeee; border: 2px solid #C6C9CB; diff --git a/sphinx/themes/sphinxdoc/static/sphinxdoc.css_t b/sphinx/themes/sphinxdoc/static/sphinxdoc.css_t index 1817c48bc..cfd16e317 100644 --- a/sphinx/themes/sphinxdoc/static/sphinxdoc.css_t +++ b/sphinx/themes/sphinxdoc/static/sphinxdoc.css_t @@ -266,10 +266,8 @@ div.quotebar { border: 1px solid #ccc; } -{%- if docutils_version_info[:2] >= (0, 18) %} nav.contents, aside.topic, -{% endif %} div.topic { background-color: #f8f8f8; } diff --git a/sphinx/themes/traditional/static/traditional.css_t b/sphinx/themes/traditional/static/traditional.css_t index 8a2f0712f..2202ba807 100644 --- a/sphinx/themes/traditional/static/traditional.css_t +++ b/sphinx/themes/traditional/static/traditional.css_t @@ -506,10 +506,8 @@ p.rubric { /* "Topics" */ -{%- if docutils_version_info[:2] >= (0, 18) %} nav.contents, aside.topic, -{% endif %} div.topic { background-color: #eee; border: 1px solid #ccc; diff --git a/sphinx/transforms/i18n.py b/sphinx/transforms/i18n.py index fd32f0dc1..188655845 100644 --- a/sphinx/transforms/i18n.py +++ b/sphinx/transforms/i18n.py @@ -19,7 +19,7 @@ from sphinx.transforms import SphinxTransform from sphinx.util import get_filetype, logging, split_index_msg from sphinx.util.i18n import docname_to_domain from sphinx.util.nodes import (IMAGE_TYPE_NODES, LITERAL_TYPE_NODES, NodeMatcher, - extract_messages, is_pending_meta, traverse_translatable_index) + extract_messages, traverse_translatable_index) if TYPE_CHECKING: from sphinx.application import Sphinx @@ -254,12 +254,7 @@ class Locale(SphinxTransform): continue # update meta nodes - if isinstance(node, nodes.pending) and is_pending_meta(node): - # docutils-0.17 - node.details['nodes'][0]['content'] = msgstr - continue - elif isinstance(node, addnodes.docutils_meta): - # docutils-0.18+ + if isinstance(node, nodes.meta): # type: ignore node['content'] = msgstr continue diff --git a/sphinx/util/docutils.py b/sphinx/util/docutils.py index 63c9a06ef..d27ad6ba0 100644 --- a/sphinx/util/docutils.py +++ b/sphinx/util/docutils.py @@ -588,16 +588,6 @@ class SphinxTranslator(nodes.NodeVisitor): logger.warning(__('unknown node type: %r'), node, location=node) -# Node.findall() is a new interface to traverse a doctree since docutils-0.18. -# This applies a patch to docutils up to 0.18 inclusive to provide Node.findall() -# method to use it from our codebase. -if docutils.__version_info__[:2] <= (0, 17): - def findall(self, *args, **kwargs): - return iter(self.traverse(*args, **kwargs)) - - Node.findall = findall # type: ignore - - # cache a vanilla instance of nodes.document # Used in new_document() function __document_cache__: Tuple["Values", Reporter] diff --git a/sphinx/util/nodes.py b/sphinx/util/nodes.py index fdbf94fe6..3549dd190 100644 --- a/sphinx/util/nodes.py +++ b/sphinx/util/nodes.py @@ -182,14 +182,6 @@ IGNORED_NODES = ( ) -def is_pending_meta(node: Node) -> bool: - if (isinstance(node, nodes.pending) and - isinstance(node.details.get('nodes', [None])[0], addnodes.meta)): - return True - else: - return False - - def is_translatable(node: Node) -> bool: if isinstance(node, addnodes.translatable): return True @@ -225,11 +217,7 @@ def is_translatable(node: Node) -> bool: return False return True - if is_pending_meta(node) or isinstance(node, addnodes.meta): - # docutils-0.17 - return True - elif isinstance(node, addnodes.docutils_meta): - # docutils-0.18+ + if isinstance(node, nodes.meta): # type: ignore return True return False @@ -244,9 +232,6 @@ LITERAL_TYPE_NODES = ( IMAGE_TYPE_NODES = ( nodes.image, ) -META_TYPE_NODES = ( - addnodes.meta, -) def extract_messages(doctree: Element) -> Iterable[Tuple[Element, str]]: @@ -267,14 +252,7 @@ def extract_messages(doctree: Element) -> Iterable[Tuple[Element, str]]: msg = '.. image:: %s' % node['uri'] else: msg = '' - elif isinstance(node, META_TYPE_NODES): - # docutils-0.17 - msg = node.rawcontent - elif isinstance(node, nodes.pending) and is_pending_meta(node): - # docutils-0.17 - msg = node.details['nodes'][0].rawcontent - elif isinstance(node, addnodes.docutils_meta): - # docutils-0.18+ + elif isinstance(node, nodes.meta): # type: ignore msg = node["content"] else: msg = node.rawsource.replace('\n', ' ').strip() |
