<pre style='margin:0'>
Joshua Root (jmroot) pushed a commit to branch master
in repository macports-ports.

</pre>
<p><a href="https://github.com/macports/macports-ports/commit/08e7ffa0af66b1019e23e58d5c8e9606456af8d5">https://github.com/macports/macports-ports/commit/08e7ffa0af66b1019e23e58d5c8e9606456af8d5</a></p>
<pre style="white-space: pre; background: #F8F8F8"><span style='display:block; white-space:pre;color:#808000;'>commit 08e7ffa0af66b1019e23e58d5c8e9606456af8d5
</span>Author: Kirill A. Korinsky <kirill@korins.ky>
AuthorDate: Fri Nov 12 00:24:05 2021 +0100

<span style='display:block; white-space:pre;color:#404040;'>    py-sphinx: update to 4.3.0 (py36+), 3.5.4 (py35)
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    Also backported support of docutils-0.18 for py35
</span>---
 python/py-sphinx/Portfile                          |  29 +-
 ...ocutils-0.18.patch => docutils-0.18-v345.patch} | 457 +++++++++++----------
 python/py-sphinx/files/py310-sphinx                |   4 +
 3 files changed, 254 insertions(+), 236 deletions(-)

<span style='display:block; white-space:pre;color:#808080;'>diff --git a/python/py-sphinx/Portfile b/python/py-sphinx/Portfile
</span><span style='display:block; white-space:pre;color:#808080;'>index 1c2e8980645..08a309f10d0 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/python/py-sphinx/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/python/py-sphinx/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -5,8 +5,8 @@ PortGroup           python 1.0
</span> PortGroup           select 1.0
 
 name                py-sphinx
<span style='display:block; white-space:pre;background:#ffe0e0;'>-version             4.2.0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-revision            1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+version             4.3.0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+revision            0
</span> categories-append   textproc devel
 license             BSD
 maintainers         {jmr @jmroot} openmaintainer
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -24,11 +24,12 @@ supported_archs     noarch
</span> homepage            https://www.sphinx-doc.org/
 python.rootname     Sphinx
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-checksums           md5 6af34550e36dd6d58a496e47ec67280f \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    rmd160 e8b1ad48affa2bfbd0499cc8ea1c894d2de428c9 \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    sha256 94078db9184491e15bce0a56d9186e0aec95f16ac20b12d00e06d4e36f1058a6
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+checksums           md5 bf115873619a996897415c3b499787db \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    rmd160 f66f80b9d1bf7d16055b62c7d7871341eec7314c \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    sha256 6d051ab6e0d06cba786c4656b0fe67ba259fe058410f49e95bee6e49c4052cbf \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    size 6657624
</span> 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-python.versions     27 35 36 37 38 39
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+python.versions     27 35 36 37 38 39 310
</span> 
 if {$subport ne $name} {
     depends_lib     port:py${python.version}-docutils \
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -43,15 +44,19 @@ if {$subport ne $name} {
</span>                     port:py${python.version}-snowballstemmer \
                     port:sphinx_select
     if {${python.version} > 35} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        patchfiles-append   setup.py.patch \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                            docutils-0.18.patch
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        patchfiles-append   setup.py.patch
</span>     }
     if {${python.version} == 35} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        version     3.5.2
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        version     3.5.4
</span>         revision    0
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        checksums   md5 87f26fa3d3cf3ab8c05d1c2c62a0229e \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    rmd160 bc2b9ba340f2af963bc0b7acfae002cd32bfbd80 \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    sha256 672cfcc24b6b69235c97c750cb190a44ecd72696b4452acaf75c2d9cc78ca5ff
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        checksums   md5 dd46088ebc01f6f721ee7618df680d68 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    rmd160 70102258335337eff3cc16526e84e9a95c625018 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    sha256 19010b7b9fa0dc7756a6e105b2aacd3a80f798af3c25c273be64d7beeb482cb1 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    size 5911093
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        patch.pre_args      -p1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        # Source of patch: https://github.com/catap/sphinx/tree/docutils-1.8-v354
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        patchfiles-append   docutils-0.18-v345.patch
</span>     }
     if {${python.version} == 27} {
         version     1.8.5
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/python/py-sphinx/files/docutils-0.18.patch b/python/py-sphinx/files/docutils-0.18-v345.patch
</span>similarity index 66%
rename from python/py-sphinx/files/docutils-0.18.patch
rename to python/py-sphinx/files/docutils-0.18-v345.patch
<span style='display:block; white-space:pre;color:#808080;'>index 54aabf2f2aa..fdf75acf27a 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/python/py-sphinx/files/docutils-0.18.patch
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/python/py-sphinx/files/docutils-0.18-v345.patch
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1,28 +1,33 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-From 335f95afdee2dfb03e85b466a4eff66c236b384b Mon Sep 17 00:00:00 2001
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From 5c39bece6da259752396f3881a5bb17694c0f7f4 Mon Sep 17 00:00:00 2001
</span> From: Takeshi KOMIYA <i.tkomiya@gmail.com>
 Date: Sun, 3 Oct 2021 18:32:39 +0900
<span style='display:block; white-space:pre;background:#ffe0e0;'>-Subject: [PATCH] Support docutils-0.18; Meta directive and meta node has moved
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Subject: [PATCH 1/6] Support docutils-0.18; Meta directive and meta node has
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ moved
</span> 
 ---
<span style='display:block; white-space:pre;background:#ffe0e0;'>- sphinx/addnodes.py           |  6 +++++-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ sphinx/addnodes.py           |  8 ++++++--
</span>  sphinx/directives/patches.py | 19 ++++++++++++++-----
  tests/test_versioning.py     |  9 +++++++--
<span style='display:block; white-space:pre;background:#ffe0e0;'>- 3 files changed, 26 insertions(+), 8 deletions(-)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 3 files changed, 27 insertions(+), 9 deletions(-)
</span> 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-diff --git sphinx/addnodes.py sphinx/addnodes.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-index 8a020b02ef..b43aa81529 100644
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- sphinx/addnodes.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ sphinx/addnodes.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -13,6 +13,8 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- from docutils import nodes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- from docutils.nodes import Element
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/sphinx/addnodes.py b/sphinx/addnodes.py
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 5f371e46b..048001990 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/sphinx/addnodes.py
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/sphinx/addnodes.py
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -16,9 +16,11 @@ from docutils.nodes import Element, Node
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ from sphinx.deprecation import RemovedInSphinx40Warning
</span>  
 +from sphinx.util import docutils
 +
<span style='display:block; white-space:pre;background:#ffe0e0;'>- if TYPE_CHECKING:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if False:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    # For type annotation
</span>      from sphinx.application import Sphinx
<span style='display:block; white-space:pre;background:#e0ffe0;'>++    # For type annotation
</span>  
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -563,7 +565,6 @@ def setup(app: "Sphinx") -> Dict[str, Any]:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ class document(nodes.document):
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -412,7 +414,6 @@ def setup(app: "Sphinx") -> Dict[str, Any]:
</span>      app.add_node(start_of_file)
      app.add_node(highlightlang)
      app.add_node(tabular_col_spec)
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -30,7 +35,7 @@ index 8a020b02ef..b43aa81529 100644
</span>      app.add_node(pending_xref)
      app.add_node(number_reference)
      app.add_node(download_reference)
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -571,6 +572,9 @@ def setup(app: "Sphinx") -> Dict[str, Any]:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -420,6 +421,9 @@ def setup(app: "Sphinx") -> Dict[str, Any]:
</span>      app.add_node(literal_strong)
      app.add_node(manpage)
  
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -40,11 +45,11 @@ index 8a020b02ef..b43aa81529 100644
</span>      return {
          'version': 'builtin',
          'parallel_read_safe': True,
<span style='display:block; white-space:pre;background:#ffe0e0;'>-diff --git sphinx/directives/patches.py sphinx/directives/patches.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-index 9a3034daea..a7b77c750b 100644
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- sphinx/directives/patches.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ sphinx/directives/patches.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -14,7 +14,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/sphinx/directives/patches.py b/sphinx/directives/patches.py
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 1eae6d0c8..4ad5ce8fd 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/sphinx/directives/patches.py
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/sphinx/directives/patches.py
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -11,7 +11,7 @@ from typing import Any, Dict, List, Tuple, cast
</span>  from docutils import nodes
  from docutils.nodes import Node, make_id, system_message
  from docutils.parsers.rst import directives
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -52,10 +57,10 @@ index 9a3034daea..a7b77c750b 100644
</span> +from docutils.parsers.rst.directives import images, tables
  
  from sphinx import addnodes
<span style='display:block; white-space:pre;background:#ffe0e0;'>- from sphinx.deprecation import RemovedInSphinx60Warning
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -27,6 +27,15 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- from sphinx.util.osutil import SEP, os_path, relpath
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- from sphinx.util.typing import OptionSpec
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ from sphinx.directives import optional_int
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -19,6 +19,15 @@ from sphinx.domains.math import MathDomain
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ from sphinx.util.docutils import SphinxDirective
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ from sphinx.util.nodes import set_source_info
</span>  
 +try:
 +    from docutils.nodes import meta as meta_node  # type: ignore
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -66,10 +71,10 @@ index 9a3034daea..a7b77c750b 100644
</span> +    from docutils.parsers.rst.directives.html import MetaBody
 +    meta_node = MetaBody.meta
 +
<span style='display:block; white-space:pre;background:#ffe0e0;'>- if TYPE_CHECKING:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if False:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     # For type annotation
</span>      from sphinx.application import Sphinx
<span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -60,19 +69,19 @@ def run(self) -> List[Node]:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -50,19 +59,19 @@ class Figure(images.Figure):
</span>          return [figure_node]
  
  
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -93,10 +98,10 @@ index 9a3034daea..a7b77c750b 100644
</span>  
          return result
  
<span style='display:block; white-space:pre;background:#ffe0e0;'>-diff --git tests/test_versioning.py tests/test_versioning.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-index 33fb045ce5..8ec1405adb 100644
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- tests/test_versioning.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ tests/test_versioning.py
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/tests/test_versioning.py b/tests/test_versioning.py
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 33fb045ce..8ec1405ad 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/tests/test_versioning.py
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/tests/test_versioning.py
</span> @@ -11,12 +11,17 @@
  import pickle
  
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -125,19 +130,39 @@ index 33fb045ce5..8ec1405adb 100644
</span>          metanode.__class__ = addnodes.meta
      loaded = pickle.loads(pickle.dumps(copy, pickle.HIGHEST_PROTOCOL))
      assert all(getattr(n, 'uid', False) for n in loaded.traverse(is_paragraph))
<span style='display:block; white-space:pre;background:#ffe0e0;'>-diff --git sphinx/environment/__init__.py sphinx/environment/__init__.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-index 15653a3fed..527e81dff6 100644
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- sphinx/environment/__init__.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ sphinx/environment/__init__.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -45,6 +45,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-- 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+2.33.1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From b43f35286a374890cabc52ce95f7d4f496a337af Mon Sep 17 00:00:00 2001
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From: Takeshi KOMIYA <i.tkomiya@gmail.com>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Date: Sun, 3 Oct 2021 18:44:37 +0900
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Subject: [PATCH 2/6] Support docutils-0.18; Disable embed_images and
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ section_self_link
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+embed_images:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    HTML Builder always use non-embeded (linked) images.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+section_self_link:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    HTML Builder controls hyperlink generation for each section via
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    `html_permalinks` option.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+---
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ sphinx/environment/__init__.py | 2 ++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 1 file changed, 2 insertions(+)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/sphinx/environment/__init__.py b/sphinx/environment/__init__.py
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 6b2acab9f..b7b0a2433 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/sphinx/environment/__init__.py
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/sphinx/environment/__init__.py
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -44,6 +44,7 @@ if False:
</span>  logger = logging.getLogger(__name__)
  
<span style='display:block; white-space:pre;background:#ffe0e0;'>- default_settings: Dict[str, Any] = {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ default_settings = {
</span> +    'embed_images': False,
      'embed_stylesheet': False,
      'cloak_email_addresses': True,
      'pep_base_url': 'https://www.python.org/dev/peps/',
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -54,6 +55,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -53,6 +54,7 @@ default_settings = {
</span>      'input_encoding': 'utf-8-sig',
      'doctitle_xform': False,
      'sectsubtitle_xform': False,
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -145,10 +170,15 @@ index 15653a3fed..527e81dff6 100644
</span>      'halt_level': 5,
      'file_insertion_enabled': True,
      'smartquotes_locales': [],
<span style='display:block; white-space:pre;background:#ffe0e0;'>-From 179e0bf8a22d7199907a405e18028011779d5f15 Mon Sep 17 00:00:00 2001
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-- 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+2.33.1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From b7416673fe78c2b55a9bfd11f70cc5043f979eb0 Mon Sep 17 00:00:00 2001
</span> From: Takeshi KOMIYA <i.tkomiya@gmail.com>
 Date: Sun, 10 Oct 2021 15:24:12 +0900
<span style='display:block; white-space:pre;background:#ffe0e0;'>-Subject: [PATCH] refactor: Node.traverse() will returns generator since 0.18
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Subject: [PATCH 3/6] refactor: Node.traverse() will returns generator since
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 0.18
</span> 
 ---
  sphinx/transforms/i18n.py | 10 +++++-----
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -157,47 +187,47 @@ Subject: [PATCH] refactor: Node.traverse() will returns generator since 0.18
</span>  tests/test_util_nodes.py  | 14 +++++++-------
  4 files changed, 14 insertions(+), 14 deletions(-)
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-diff --git sphinx/transforms/i18n.py sphinx/transforms/i18n.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-index 3145379cb7..d28376becb 100644
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- sphinx/transforms/i18n.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ sphinx/transforms/i18n.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -298,7 +298,7 @@ def list_replace_or_append(lst: List[N], old: N, new: N) -> None:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/sphinx/transforms/i18n.py b/sphinx/transforms/i18n.py
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 6bea6c6ee..a345b819d 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/sphinx/transforms/i18n.py
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/sphinx/transforms/i18n.py
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -297,7 +297,7 @@ class Locale(SphinxTransform):
</span>              is_autofootnote_ref = NodeMatcher(nodes.footnote_reference, auto=Any)
<span style='display:block; white-space:pre;background:#ffe0e0;'>-             old_foot_refs: List[nodes.footnote_reference] = node.traverse(is_autofootnote_ref)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             new_foot_refs: List[nodes.footnote_reference] = patch.traverse(is_autofootnote_ref)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             old_foot_refs = node.traverse(is_autofootnote_ref)  # type: List[nodes.footnote_reference]  # NOQA
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             new_foot_refs = patch.traverse(is_autofootnote_ref)  # type: List[nodes.footnote_reference]  # NOQA
</span> -            if len(old_foot_refs) != len(new_foot_refs):
 +            if len(list(old_foot_refs)) != len(list(new_foot_refs)):
                  old_foot_ref_rawsources = [ref.rawsource for ref in old_foot_refs]
                  new_foot_ref_rawsources = [ref.rawsource for ref in new_foot_refs]
                  logger.warning(__('inconsistent footnote references in translated message.' +
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -341,7 +341,7 @@ def list_replace_or_append(lst: List[N], old: N, new: N) -> None:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -340,7 +340,7 @@ class Locale(SphinxTransform):
</span>              is_refnamed_ref = NodeMatcher(nodes.reference, refname=Any)
<span style='display:block; white-space:pre;background:#ffe0e0;'>-             old_refs: List[nodes.reference] = node.traverse(is_refnamed_ref)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             new_refs: List[nodes.reference] = patch.traverse(is_refnamed_ref)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             old_refs = node.traverse(is_refnamed_ref)  # type: List[nodes.reference]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             new_refs = patch.traverse(is_refnamed_ref)  # type: List[nodes.reference]
</span> -            if len(old_refs) != len(new_refs):
 +            if len(list(old_refs)) != len(list(new_refs)):
                  old_ref_rawsources = [ref.rawsource for ref in old_refs]
                  new_ref_rawsources = [ref.rawsource for ref in new_refs]
                  logger.warning(__('inconsistent references in translated message.' +
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -369,7 +369,7 @@ def list_replace_or_append(lst: List[N], old: N, new: N) -> None:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -368,7 +368,7 @@ class Locale(SphinxTransform):
</span>              old_foot_refs = node.traverse(is_refnamed_footnote_ref)
              new_foot_refs = patch.traverse(is_refnamed_footnote_ref)
<span style='display:block; white-space:pre;background:#ffe0e0;'>-             refname_ids_map: Dict[str, List[str]] = {}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             refname_ids_map = {}  # type: Dict[str, List[str]]
</span> -            if len(old_foot_refs) != len(new_foot_refs):
 +            if len(list(old_foot_refs)) != len(list(new_foot_refs)):
                  old_foot_ref_rawsources = [ref.rawsource for ref in old_foot_refs]
                  new_foot_ref_rawsources = [ref.rawsource for ref in new_foot_refs]
                  logger.warning(__('inconsistent footnote references in translated message.' +
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -388,7 +388,7 @@ def list_replace_or_append(lst: List[N], old: N, new: N) -> None:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             old_cite_refs: List[nodes.citation_reference] = node.traverse(is_citation_ref)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             new_cite_refs: List[nodes.citation_reference] = patch.traverse(is_citation_ref)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -387,7 +387,7 @@ class Locale(SphinxTransform):
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             old_cite_refs = node.traverse(is_citation_ref)  # type: List[nodes.citation_reference]  # NOQA
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             new_cite_refs = patch.traverse(is_citation_ref)  # type: List[nodes.citation_reference]  # NOQA
</span>              refname_ids_map = {}
 -            if len(old_cite_refs) != len(new_cite_refs):
 +            if len(list(old_cite_refs)) != len(list(new_cite_refs)):
                  old_cite_ref_rawsources = [ref.rawsource for ref in old_cite_refs]
                  new_cite_ref_rawsources = [ref.rawsource for ref in new_cite_refs]
                  logger.warning(__('inconsistent citation references in translated message.' +
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -408,7 +408,7 @@ def list_replace_or_append(lst: List[N], old: N, new: N) -> None:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -407,7 +407,7 @@ class Locale(SphinxTransform):
</span>              old_xrefs = node.traverse(addnodes.pending_xref)
              new_xrefs = patch.traverse(addnodes.pending_xref)
              xref_reftarget_map = {}
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -206,24 +236,24 @@ index 3145379cb7..d28376becb 100644
</span>                  old_xref_rawsources = [xref.rawsource for xref in old_xrefs]
                  new_xref_rawsources = [xref.rawsource for xref in new_xrefs]
                  logger.warning(__('inconsistent term references in translated message.' +
<span style='display:block; white-space:pre;background:#ffe0e0;'>-diff --git sphinx/writers/latex.py sphinx/writers/latex.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-index a1b1defd72..25c82940c3 100644
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- sphinx/writers/latex.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ sphinx/writers/latex.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -1011,7 +1011,7 @@ def visit_entry(self, node: Element) -> None:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             context = (r'\par' + CR + r'\vskip-\baselineskip'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                        r'\vbox{\hbox{\strut}}\end{varwidth}%' + CR + context)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/sphinx/writers/latex.py b/sphinx/writers/latex.py
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 247a7dfb5..4dd8eedd3 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/sphinx/writers/latex.py
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/sphinx/writers/latex.py
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1001,7 +1001,7 @@ class LaTeXTranslator(SphinxTranslator):
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             context = ('\\par' + CR + '\\vskip-\\baselineskip'
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                        '\\vbox{\\hbox{\\strut}}\\end{varwidth}%' + CR + context)
</span>              self.needs_linetrimming = 1
 -        if len(node.traverse(nodes.paragraph)) >= 2:
 +        if len(list(node.traverse(nodes.paragraph))) >= 2:
              self.table.has_oldproblematic = True
          if isinstance(node.parent.parent, nodes.thead) or (cell.col in self.table.stubs):
              if len(node) == 1 and isinstance(node[0], nodes.paragraph) and node.astext() == '':
<span style='display:block; white-space:pre;background:#ffe0e0;'>-diff --git sphinx/writers/text.py sphinx/writers/text.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-index bd0ffa063d..ba310e072e 100644
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- sphinx/writers/text.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ sphinx/writers/text.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -850,7 +850,7 @@ def depart_list_item(self, node: Element) -> None:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/sphinx/writers/text.py b/sphinx/writers/text.py
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index c0ebe32a2..ec5debd84 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/sphinx/writers/text.py
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/sphinx/writers/text.py
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -834,7 +834,7 @@ class TextTranslator(SphinxTranslator):
</span>              self.end_state(first='%s. ' % self.list_counter[-1])
  
      def visit_definition_list_item(self, node: Element) -> None:
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -232,10 +262,10 @@ index bd0ffa063d..ba310e072e 100644
</span>  
      def depart_definition_list_item(self, node: Element) -> None:
          pass
<span style='display:block; white-space:pre;background:#ffe0e0;'>-diff --git tests/test_util_nodes.py tests/test_util_nodes.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-index cb2ae70a82..421930cf5a 100644
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- tests/test_util_nodes.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ tests/test_util_nodes.py
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/tests/test_util_nodes.py b/tests/test_util_nodes.py
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index cb2ae70a8..421930cf5 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/tests/test_util_nodes.py
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/tests/test_util_nodes.py
</span> @@ -60,31 +60,31 @@ def test_NodeMatcher():
  
      # search by node class
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -275,35 +305,15 @@ index cb2ae70a82..421930cf5a 100644
</span>  
  
  @pytest.mark.parametrize(
<span style='display:block; white-space:pre;background:#ffe0e0;'>-From f9a33d2b3af40af4996b9c3064c117551cdcf4a2 Mon Sep 17 00:00:00 2001
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-From: Takeshi KOMIYA <i.tkomiya@gmail.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Date: Mon, 11 Oct 2021 01:52:04 +0900
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Subject: [PATCH] Support docutils-0.18: Set auto_id_prefix explicitly
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-- 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+2.33.1
</span> 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-Since docutils-0.18, auto_id_prefix setting will be changed to `'%'`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-from `'id'`.  To keep backward compatibility of node IDs, this sets
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-`'id'` to settings explicitly.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>----
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- sphinx/environment/__init__.py | 1 +
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 1 file changed, 1 insertion(+)
</span> 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-diff --git sphinx/environment/__init__.py sphinx/environment/__init__.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-index 527e81dff6..dc494add12 100644
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- sphinx/environment/__init__.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ sphinx/environment/__init__.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -45,6 +45,7 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- logger = logging.getLogger(__name__)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- default_settings: Dict[str, Any] = {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    'auto_id_prefix': 'id',
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     'embed_images': False,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     'embed_stylesheet': False,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     'cloak_email_addresses': True,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-From 8118f979dc09f1ed027810dbb5abb8a982d7cf23 Mon Sep 17 00:00:00 2001
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From 893776f280fed8a7b8d1f8c89dd4830f006060f1 Mon Sep 17 00:00:00 2001
</span> From: Takeshi KOMIYA <i.tkomiya@gmail.com>
 Date: Mon, 11 Oct 2021 01:23:29 +0900
<span style='display:block; white-space:pre;background:#ffe0e0;'>-Subject: [PATCH] Support docutils-0.18: allow PreBibliographic nodes before
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- docinfo
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Subject: [PATCH 4/6] Support docutils-0.18: allow PreBibliographic nodes
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ before docinfo
</span> 
 Since 0.18, `meta` directive inserts meta node into the top of the
 document.  It confuses MetadataCollector.
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -314,11 +324,11 @@ node.
</span>  sphinx/environment/collectors/metadata.py | 9 ++++++---
  1 file changed, 6 insertions(+), 3 deletions(-)
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-diff --git sphinx/environment/collectors/metadata.py sphinx/environment/collectors/metadata.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-index c684e4a4fd..c3a0aa2f48 100644
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- sphinx/environment/collectors/metadata.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ sphinx/environment/collectors/metadata.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -33,9 +33,12 @@ def process_doc(self, app: Sphinx, doctree: nodes.document) -> None:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/sphinx/environment/collectors/metadata.py b/sphinx/environment/collectors/metadata.py
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 7b3628c9a..d04d80595 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/sphinx/environment/collectors/metadata.py
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/sphinx/environment/collectors/metadata.py
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -33,9 +33,12 @@ class MetadataCollector(EnvironmentCollector):
</span>  
          Keep processing minimal -- just return what docutils says.
          """
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -333,7 +343,7 @@ index c684e4a4fd..c3a0aa2f48 100644
</span>                  # nodes are multiply inherited...
                  if isinstance(node, nodes.authors):
                      authors = cast(List[nodes.author], node)
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -58,7 +61,7 @@ def process_doc(self, app: Sphinx, doctree: nodes.document) -> None:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -58,7 +61,7 @@ class MetadataCollector(EnvironmentCollector):
</span>                          value = 0
                      md[name] = value
  
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -342,10 +352,15 @@ index c684e4a4fd..c3a0aa2f48 100644
</span>  
  
  def setup(app: Sphinx) -> Dict[str, Any]:
<span style='display:block; white-space:pre;background:#ffe0e0;'>-From 13803a79e7179f40a27f46d5a5a05f1eebbcbb63 Mon Sep 17 00:00:00 2001
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-- 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+2.33.1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From f63b487b899ccefccd69a0ec0c6ad52c64361b04 Mon Sep 17 00:00:00 2001
</span> From: Takeshi KOMIYA <i.tkomiya@gmail.com>
 Date: Wed, 27 Oct 2021 01:49:57 +0900
<span style='display:block; white-space:pre;background:#ffe0e0;'>-Subject: [PATCH] Support docutils-0.18: Consume iterator of Element.traverse()
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Subject: [PATCH 5/6] Support docutils-0.18: Consume iterator of
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ Element.traverse()
</span> 
 Since 0.18, Element.traverse() returns an iterator instead of
 intermediate object.  As a result, the return value is always considered
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -369,11 +384,11 @@ doctree on the loop.
</span>  sphinx/writers/manpage.py                 |  4 ++--
  15 files changed, 27 insertions(+), 27 deletions(-)
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-diff --git sphinx/builders/_epub_base.py sphinx/builders/_epub_base.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-index 2dfc35ecd3..672ce72425 100644
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- sphinx/builders/_epub_base.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ sphinx/builders/_epub_base.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -323,14 +323,14 @@ def footnote_spot(tree: nodes.document) -> Tuple[Element, int]:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/sphinx/builders/_epub_base.py b/sphinx/builders/_epub_base.py
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 7df3f8df5..5de83c672 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/sphinx/builders/_epub_base.py
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/sphinx/builders/_epub_base.py
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -318,14 +318,14 @@ class EpubBuilder(StandaloneHTMLBuilder):
</span>              # a) place them after the last existing footnote
              # b) place them after an (empty) Footnotes rubric
              # c) create an empty Footnotes rubric at the end of the document
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -390,7 +405,7 @@ index 2dfc35ecd3..672ce72425 100644
</span>              rub = nodes.rubric()
              rub.append(nodes.Text(FOOTNOTES_RUBRIC_NAME))
              doc.append(rub)
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -339,10 +339,10 @@ def footnote_spot(tree: nodes.document) -> Tuple[Element, int]:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -334,10 +334,10 @@ class EpubBuilder(StandaloneHTMLBuilder):
</span>          if show_urls == 'no':
              return
          if show_urls == 'footnote':
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -403,10 +418,10 @@ index 2dfc35ecd3..672ce72425 100644
</span>              uri = node.get('refuri', '')
              if (uri.startswith('http:') or uri.startswith('https:') or
                      uri.startswith('ftp:')) and uri not in node.astext():
<span style='display:block; white-space:pre;background:#ffe0e0;'>-diff --git sphinx/builders/latex/transforms.py sphinx/builders/latex/transforms.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-index a07393690d..b85a9827c7 100644
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- sphinx/builders/latex/transforms.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ sphinx/builders/latex/transforms.py
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/sphinx/builders/latex/transforms.py b/sphinx/builders/latex/transforms.py
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 0a74eded4..97baf467a 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/sphinx/builders/latex/transforms.py
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/sphinx/builders/latex/transforms.py
</span> @@ -45,7 +45,7 @@ class SubstitutionDefinitionsRemover(SphinxPostTransform):
      formats = ('latex',)
  
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -416,7 +431,7 @@ index a07393690d..b85a9827c7 100644
</span>              node.parent.remove(node)
  
  
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -81,7 +81,7 @@ def expand_show_urls(self) -> None:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -81,7 +81,7 @@ class ShowUrlsTransform(SphinxPostTransform):
</span>          if show_urls is False or show_urls == 'no':
              return
  
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -446,11 +461,11 @@ index a07393690d..b85a9827c7 100644
</span>                      # move the index node next to the section title
                      node.remove(index)
                      node.parent.insert(i + 1, index)
<span style='display:block; white-space:pre;background:#ffe0e0;'>-diff --git sphinx/domains/index.py sphinx/domains/index.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-index 9ecfae439c..975ab7000f 100644
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- sphinx/domains/index.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ sphinx/domains/index.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -48,7 +48,7 @@ def merge_domaindata(self, docnames: Iterable[str], otherdata: Dict) -> None:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/sphinx/domains/index.py b/sphinx/domains/index.py
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 4a91d6ad1..ba4ba4515 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/sphinx/domains/index.py
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/sphinx/domains/index.py
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -48,7 +48,7 @@ class IndexDomain(Domain):
</span>      def process_doc(self, env: BuildEnvironment, docname: str, document: Node) -> None:
          """Process a document after it is read by the environment."""
          entries = self.entries.setdefault(env.docname, [])
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -459,11 +474,11 @@ index 9ecfae439c..975ab7000f 100644
</span>              try:
                  for entry in node['entries']:
                      split_index_msg(entry[0], entry[1])
<span style='display:block; white-space:pre;background:#ffe0e0;'>-diff --git sphinx/domains/python.py sphinx/domains/python.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-index 1a3bd60c7b..9bb9a1e723 100644
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- sphinx/domains/python.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ sphinx/domains/python.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -328,7 +328,7 @@ def make_xref(self, rolename: str, domain: str, target: str,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/sphinx/domains/python.py b/sphinx/domains/python.py
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 552742bb8..baae1b819 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/sphinx/domains/python.py
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/sphinx/domains/python.py
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -287,7 +287,7 @@ class PyXrefMixin:
</span>                  text = target[1:]
              elif prefix == '~':
                  text = target.split('.')[-1]
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -471,12 +486,12 @@ index 1a3bd60c7b..9bb9a1e723 100644
</span> +            for node in list(result.traverse(nodes.Text)):
                  node.parent[node.parent.index(node)] = nodes.Text(text)
                  break
<span style='display:block; white-space:pre;background:#ffe0e0;'>-         elif isinstance(result, pending_xref) and env.config.python_use_unqualified_type_names:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-diff --git sphinx/environment/adapters/toctree.py sphinx/environment/adapters/toctree.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-index a62e951d7e..53328e8127 100644
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- sphinx/environment/adapters/toctree.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ sphinx/environment/adapters/toctree.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -193,13 +193,13 @@ def _entries_from_toctree(toctreenode: addnodes.toctree, parents: List[str],
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         return result
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/sphinx/environment/adapters/toctree.py b/sphinx/environment/adapters/toctree.py
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index f0a37ab7f..49454be0f 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/sphinx/environment/adapters/toctree.py
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/sphinx/environment/adapters/toctree.py
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -194,13 +194,13 @@ class TocTree:
</span>                          for toplevel in children:
                              # nodes with length 1 don't have any children anyway
                              if len(toplevel) > 1:
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -492,11 +507,11 @@ index a62e951d7e..53328e8127 100644
</span>                          if not (subtocnode.get('hidden', False) and
                                  not includehidden):
                              i = subtocnode.parent.index(subtocnode) + 1
<span style='display:block; white-space:pre;background:#ffe0e0;'>-diff --git sphinx/ext/autosummary/__init__.py sphinx/ext/autosummary/__init__.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-index 8bd3d50cd2..478b5c9f33 100644
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- sphinx/ext/autosummary/__init__.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ sphinx/ext/autosummary/__init__.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -583,7 +583,7 @@ def parse(doc: List[str], settings: Any) -> nodes.document:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/sphinx/ext/autosummary/__init__.py b/sphinx/ext/autosummary/__init__.py
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index b268127d0..a71f1b6ac 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/sphinx/ext/autosummary/__init__.py
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/sphinx/ext/autosummary/__init__.py
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -564,7 +564,7 @@ def extract_summary(doc: List[str], document: Any) -> str:
</span>                  node = parse(doc, document.settings)
                  if summary.endswith(WELL_KNOWN_ABBREVIATIONS):
                      pass
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -505,10 +520,10 @@ index 8bd3d50cd2..478b5c9f33 100644
</span>                      # considered as that splitting by period does not break inline markups
                      break
  
<span style='display:block; white-space:pre;background:#ffe0e0;'>-diff --git sphinx/ext/linkcode.py sphinx/ext/linkcode.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-index 6aaea0e9e5..e88ba4c960 100644
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- sphinx/ext/linkcode.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ sphinx/ext/linkcode.py
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/sphinx/ext/linkcode.py b/sphinx/ext/linkcode.py
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 5c118a9fb..495bb5073 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/sphinx/ext/linkcode.py
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/sphinx/ext/linkcode.py
</span> @@ -39,7 +39,7 @@ def doctree_read(app: Sphinx, doctree: Node) -> None:
          'js': ['object', 'fullname'],
      }
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -516,26 +531,26 @@ index 6aaea0e9e5..e88ba4c960 100644
</span> -    for objnode in doctree.traverse(addnodes.desc):
 +    for objnode in list(doctree.traverse(addnodes.desc)):
          domain = objnode.get('domain')
<span style='display:block; white-space:pre;background:#ffe0e0;'>-         uris: Set[str] = set()
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         uris = set()  # type: Set[str]
</span>          for signode in objnode:
<span style='display:block; white-space:pre;background:#ffe0e0;'>-diff --git sphinx/ext/todo.py sphinx/ext/todo.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-index 6b7c1b73b8..beab0976d3 100644
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- sphinx/ext/todo.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ sphinx/ext/todo.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -131,7 +131,7 @@ def __init__(self, app: Sphinx, doctree: nodes.document, docname: str) -> None:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/sphinx/ext/todo.py b/sphinx/ext/todo.py
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index a73dea84d..16d157164 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/sphinx/ext/todo.py
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/sphinx/ext/todo.py
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -160,7 +160,7 @@ class TodoListProcessor:
</span>  
      def process(self, doctree: nodes.document, docname: str) -> None:
<span style='display:block; white-space:pre;background:#ffe0e0;'>-         todos: List[todo_node] = sum(self.domain.todos.values(), [])
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         todos = sum(self.domain.todos.values(), [])  # type: List[todo_node]
</span> -        for node in doctree.traverse(todolist):
 +        for node in list(doctree.traverse(todolist)):
              if not self.config.todo_include_todos:
                  node.parent.remove(node)
                  continue
<span style='display:block; white-space:pre;background:#ffe0e0;'>-diff --git sphinx/ext/viewcode.py sphinx/ext/viewcode.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-index 5728f60776..bd1346daab 100644
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- sphinx/ext/viewcode.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ sphinx/ext/viewcode.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -108,7 +108,7 @@ def has_tag(modname: str, fullname: str, docname: str, refname: str) -> bool:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/sphinx/ext/viewcode.py b/sphinx/ext/viewcode.py
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 6bedf2e1c..d2341810c 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/sphinx/ext/viewcode.py
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/sphinx/ext/viewcode.py
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -108,7 +108,7 @@ def doctree_read(app: Sphinx, doctree: Node) -> None:
</span>  
          return False
  
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -543,8 +558,8 @@ index 5728f60776..bd1346daab 100644
</span> +    for objnode in list(doctree.traverse(addnodes.desc)):
          if objnode.get('domain') != 'py':
              continue
<span style='display:block; white-space:pre;background:#ffe0e0;'>-         names: Set[str] = set()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -191,7 +191,7 @@ def convert_viewcode_anchors(self) -> None:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         names = set()  # type: Set[str]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -183,7 +183,7 @@ class ViewcodeAnchorTransform(SphinxPostTransform):
</span>              node.replace_self(refnode)
  
      def remove_viewcode_anchors(self) -> None:
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -553,10 +568,10 @@ index 5728f60776..bd1346daab 100644
</span>              node.parent.remove(node)
  
  
<span style='display:block; white-space:pre;background:#ffe0e0;'>-diff --git sphinx/transforms/__init__.py sphinx/transforms/__init__.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-index ade46363a4..1347409292 100644
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- sphinx/transforms/__init__.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ sphinx/transforms/__init__.py
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/sphinx/transforms/__init__.py b/sphinx/transforms/__init__.py
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 45640308f..4512053c7 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/sphinx/transforms/__init__.py
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/sphinx/transforms/__init__.py
</span> @@ -128,7 +128,7 @@ class MoveModuleTargets(SphinxTransform):
      default_priority = 210
  
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -566,7 +581,7 @@ index ade46363a4..1347409292 100644
</span>              if not node['ids']:
                  continue
              if ('ismod' in node and
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -303,7 +303,7 @@ class FilterSystemMessages(SphinxTransform):
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -298,7 +298,7 @@ class FilterSystemMessages(SphinxTransform):
</span>  
      def apply(self, **kwargs: Any) -> None:
          filterlevel = 2 if self.config.keep_warnings else 5
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -575,11 +590,11 @@ index ade46363a4..1347409292 100644
</span>              if node['level'] < filterlevel:
                  logger.debug('%s [filtered system message]', node.astext())
                  node.parent.remove(node)
<span style='display:block; white-space:pre;background:#ffe0e0;'>-diff --git sphinx/transforms/i18n.py sphinx/transforms/i18n.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-index d28376becb..d0bc8af5d5 100644
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- sphinx/transforms/i18n.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ sphinx/transforms/i18n.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -488,7 +488,7 @@ def apply(self, **kwargs: Any) -> None:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/sphinx/transforms/i18n.py b/sphinx/transforms/i18n.py
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index a345b819d..ccc14c23f 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/sphinx/transforms/i18n.py
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/sphinx/transforms/i18n.py
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -486,7 +486,7 @@ class RemoveTranslatableInline(SphinxTransform):
</span>              return
  
          matcher = NodeMatcher(nodes.inline, translatable=Any)
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -588,11 +603,11 @@ index d28376becb..d0bc8af5d5 100644
</span>              inline.parent.remove(inline)
              inline.parent += inline.children
  
<span style='display:block; white-space:pre;background:#ffe0e0;'>-diff --git sphinx/transforms/post_transforms/code.py sphinx/transforms/post_transforms/code.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-index 52bca8e12d..3c4c0ebab6 100644
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- sphinx/transforms/post_transforms/code.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ sphinx/transforms/post_transforms/code.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -42,7 +42,7 @@ def apply(self, **kwargs: Any) -> None:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/sphinx/transforms/post_transforms/code.py b/sphinx/transforms/post_transforms/code.py
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 20df1db3c..59fa115e5 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/sphinx/transforms/post_transforms/code.py
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/sphinx/transforms/post_transforms/code.py
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -40,7 +40,7 @@ class HighlightLanguageTransform(SphinxTransform):
</span>                                             self.config.highlight_language)
          self.document.walkabout(visitor)
  
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -601,11 +616,11 @@ index 52bca8e12d..3c4c0ebab6 100644
</span>              node.parent.remove(node)
  
  
<span style='display:block; white-space:pre;background:#ffe0e0;'>-diff --git sphinx/util/nodes.py sphinx/util/nodes.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-index 78663e4c70..bc16e44c10 100644
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- sphinx/util/nodes.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ sphinx/util/nodes.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -343,7 +343,7 @@ def clean_astext(node: Element) -> str:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/sphinx/util/nodes.py b/sphinx/util/nodes.py
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index d5e43e716..06af8bedd 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/sphinx/util/nodes.py
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/sphinx/util/nodes.py
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -349,7 +349,7 @@ def clean_astext(node: Element) -> str:
</span>      node = node.deepcopy()
      for img in node.traverse(nodes.image):
          img['alt'] = ''
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -614,7 +629,7 @@ index 78663e4c70..bc16e44c10 100644
</span>          raw.parent.remove(raw)
      return node.astext()
  
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -408,7 +408,7 @@ def inline_all_toctrees(builder: "Builder", docnameset: Set[str], docname: str,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -413,7 +413,7 @@ def inline_all_toctrees(builder: "Builder", docnameset: Set[str], docname: str,
</span>      Record all docnames in *docnameset*, and output docnames with *colorfunc*.
      """
      tree = cast(nodes.document, tree.deepcopy())
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -623,11 +638,11 @@ index 78663e4c70..bc16e44c10 100644
</span>          newnodes = []
          includefiles = map(str, toctreenode['includefiles'])
          for includefile in includefiles:
<span style='display:block; white-space:pre;background:#ffe0e0;'>-diff --git sphinx/writers/latex.py sphinx/writers/latex.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-index 869759ee51..3f032e6164 100644
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- sphinx/writers/latex.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ sphinx/writers/latex.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -651,7 +651,7 @@ def visit_title(self, node: Element) -> None:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/sphinx/writers/latex.py b/sphinx/writers/latex.py
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 4dd8eedd3..b0878efe5 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/sphinx/writers/latex.py
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/sphinx/writers/latex.py
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -658,7 +658,7 @@ class LaTeXTranslator(SphinxTranslator):
</span>                  raise nodes.SkipNode
              else:
                  short = ''
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -636,11 +651,11 @@ index 869759ee51..3f032e6164 100644
</span>                      short = ('[%s]' % self.escape(' '.join(clean_astext(node).split())))
  
                  try:
<span style='display:block; white-space:pre;background:#ffe0e0;'>-diff --git sphinx/writers/manpage.py sphinx/writers/manpage.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-index 12fc31281b..da5f4c2412 100644
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- sphinx/writers/manpage.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ sphinx/writers/manpage.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -56,7 +56,7 @@ def __init__(self, document: nodes.document) -> None:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/sphinx/writers/manpage.py b/sphinx/writers/manpage.py
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 9ef429ba3..e2d3f3b38 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/sphinx/writers/manpage.py
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/sphinx/writers/manpage.py
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -58,7 +58,7 @@ class NestedInlineTransform:
</span>  
      def apply(self, **kwargs: Any) -> None:
          matcher = NodeMatcher(nodes.literal, nodes.emphasis, nodes.strong)
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -648,8 +663,8 @@ index 12fc31281b..da5f4c2412 100644
</span> +        for node in list(self.document.traverse(matcher)):  # type: TextElement
              if any(matcher(subnode) for subnode in node):
                  pos = node.parent.index(node)
<span style='display:block; white-space:pre;background:#ffe0e0;'>-                 for subnode in reversed(list(node)):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -227,7 +227,7 @@ def depart_versionmodified(self, node: Element) -> None:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                 for subnode in reversed(node[1:]):
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -214,7 +214,7 @@ class ManualPageTranslator(SphinxTranslator, BaseTranslator):
</span>  
      # overwritten -- don't make whole of term bold if it includes strong node
      def visit_term(self, node: Element) -> None:
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -658,77 +673,68 @@ index 12fc31281b..da5f4c2412 100644
</span>              self.body.append('\n')
          else:
              super().visit_term(node)
<span style='display:block; white-space:pre;background:#ffe0e0;'>-From 3f3de7d29abefe4c87e03f527a8d5b9e136d3645 Mon Sep 17 00:00:00 2001
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-- 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+2.33.1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From ae4a354aadb5782733cd87bd4cddd430e44b34a7 Mon Sep 17 00:00:00 2001
</span> From: Takeshi KOMIYA <i.tkomiya@gmail.com>
 Date: Sun, 31 Oct 2021 01:33:16 +0900
<span style='display:block; white-space:pre;background:#ffe0e0;'>-Subject: [PATCH] Support docutils-0.18: Consume generator of
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Subject: [PATCH 6/6] Support docutils-0.18: Consume generator of
</span>  Element.traverse()
 
 The last fix in i18n module was incorrect because it compares the
 "already consumed" generators.  It should compares the lists of nodes.
 ---
<span style='display:block; white-space:pre;background:#ffe0e0;'>- sphinx/transforms/i18n.py | 30 +++++++++++++++---------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 1 file changed, 15 insertions(+), 15 deletions(-)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ sphinx/transforms/i18n.py | 18 +++++++++---------
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 1 file changed, 9 insertions(+), 9 deletions(-)
</span> 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-diff --git sphinx/transforms/i18n.py sphinx/transforms/i18n.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-index d0bc8af5d5..8ef7987f9a 100644
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- sphinx/transforms/i18n.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ sphinx/transforms/i18n.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -296,9 +296,9 @@ def list_replace_or_append(lst: List[N], old: N, new: N) -> None:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                     lst.append(new)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/sphinx/transforms/i18n.py b/sphinx/transforms/i18n.py
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index ccc14c23f..ffb316126 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/sphinx/transforms/i18n.py
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/sphinx/transforms/i18n.py
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -297,7 +297,7 @@ class Locale(SphinxTransform):
</span>              is_autofootnote_ref = NodeMatcher(nodes.footnote_reference, auto=Any)
<span style='display:block; white-space:pre;background:#ffe0e0;'>--            old_foot_refs: List[nodes.footnote_reference] = node.traverse(is_autofootnote_ref)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--            new_foot_refs: List[nodes.footnote_reference] = patch.traverse(is_autofootnote_ref)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             old_foot_refs = node.traverse(is_autofootnote_ref)  # type: List[nodes.footnote_reference]  # NOQA
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             new_foot_refs = patch.traverse(is_autofootnote_ref)  # type: List[nodes.footnote_reference]  # NOQA
</span> -            if len(list(old_foot_refs)) != len(list(new_foot_refs)):
<span style='display:block; white-space:pre;background:#ffe0e0;'>-+            old_foot_refs: List[nodes.footnote_reference] = list(node.traverse(is_autofootnote_ref))  # NOQA
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+            new_foot_refs: List[nodes.footnote_reference] = list(patch.traverse(is_autofootnote_ref))  # NOQA
</span> +            if len(old_foot_refs) != len(new_foot_refs):
                  old_foot_ref_rawsources = [ref.rawsource for ref in old_foot_refs]
                  new_foot_ref_rawsources = [ref.rawsource for ref in new_foot_refs]
                  logger.warning(__('inconsistent footnote references in translated message.' +
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -339,9 +339,9 @@ def list_replace_or_append(lst: List[N], old: N, new: N) -> None:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             # * use translated refname for section refname.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             # * inline reference "`Python <...>`_" has no 'refname'.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -340,7 +340,7 @@ class Locale(SphinxTransform):
</span>              is_refnamed_ref = NodeMatcher(nodes.reference, refname=Any)
<span style='display:block; white-space:pre;background:#ffe0e0;'>--            old_refs: List[nodes.reference] = node.traverse(is_refnamed_ref)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--            new_refs: List[nodes.reference] = patch.traverse(is_refnamed_ref)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             old_refs = node.traverse(is_refnamed_ref)  # type: List[nodes.reference]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             new_refs = patch.traverse(is_refnamed_ref)  # type: List[nodes.reference]
</span> -            if len(list(old_refs)) != len(list(new_refs)):
<span style='display:block; white-space:pre;background:#ffe0e0;'>-+            old_refs: List[nodes.reference] = list(node.traverse(is_refnamed_ref))
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+            new_refs: List[nodes.reference] = list(patch.traverse(is_refnamed_ref))
</span> +            if len(old_refs) != len(new_refs):
                  old_ref_rawsources = [ref.rawsource for ref in old_refs]
                  new_ref_rawsources = [ref.rawsource for ref in new_refs]
                  logger.warning(__('inconsistent references in translated message.' +
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -366,10 +366,10 @@ def list_replace_or_append(lst: List[N], old: N, new: N) -> None:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             # refnamed footnote should use original 'ids'.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             is_refnamed_footnote_ref = NodeMatcher(nodes.footnote_reference, refname=Any)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--            old_foot_refs = node.traverse(is_refnamed_footnote_ref)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--            new_foot_refs = patch.traverse(is_refnamed_footnote_ref)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+            old_foot_refs = list(node.traverse(is_refnamed_footnote_ref))
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+            new_foot_refs = list(patch.traverse(is_refnamed_footnote_ref))
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             refname_ids_map: Dict[str, List[str]] = {}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -368,7 +368,7 @@ class Locale(SphinxTransform):
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             old_foot_refs = node.traverse(is_refnamed_footnote_ref)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             new_foot_refs = patch.traverse(is_refnamed_footnote_ref)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             refname_ids_map = {}  # type: Dict[str, List[str]]
</span> -            if len(list(old_foot_refs)) != len(list(new_foot_refs)):
 +            if len(old_foot_refs) != len(new_foot_refs):
                  old_foot_ref_rawsources = [ref.rawsource for ref in old_foot_refs]
                  new_foot_ref_rawsources = [ref.rawsource for ref in new_foot_refs]
                  logger.warning(__('inconsistent footnote references in translated message.' +
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -385,10 +385,10 @@ def list_replace_or_append(lst: List[N], old: N, new: N) -> None:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -384,10 +384,10 @@ class Locale(SphinxTransform):
</span>  
              # citation should use original 'ids'.
              is_citation_ref = NodeMatcher(nodes.citation_reference, refname=Any)
<span style='display:block; white-space:pre;background:#ffe0e0;'>--            old_cite_refs: List[nodes.citation_reference] = node.traverse(is_citation_ref)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--            new_cite_refs: List[nodes.citation_reference] = patch.traverse(is_citation_ref)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+            old_cite_refs: List[nodes.citation_reference] = list(node.traverse(is_citation_ref))  # NOQA
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+            new_cite_refs: List[nodes.citation_reference] = list(patch.traverse(is_citation_ref))  # NOQA
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-            old_cite_refs = node.traverse(is_citation_ref)  # type: List[nodes.citation_reference]  # NOQA
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-            new_cite_refs = patch.traverse(is_citation_ref)  # type: List[nodes.citation_reference]  # NOQA
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            old_cite_refs = list(node.traverse(is_citation_ref))  # type: List[nodes.citation_reference]  # NOQA
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            new_cite_refs = list(patch.traverse(is_citation_ref))  # type: List[nodes.citation_reference]  # NOQA
</span>              refname_ids_map = {}
 -            if len(list(old_cite_refs)) != len(list(new_cite_refs)):
 +            if len(old_cite_refs) != len(new_cite_refs):
                  old_cite_ref_rawsources = [ref.rawsource for ref in old_cite_refs]
                  new_cite_ref_rawsources = [ref.rawsource for ref in new_cite_refs]
                  logger.warning(__('inconsistent citation references in translated message.' +
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -405,10 +405,10 @@ def list_replace_or_append(lst: List[N], old: N, new: N) -> None:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -404,10 +404,10 @@ class Locale(SphinxTransform):
</span>              # Original pending_xref['reftarget'] contain not-translated
              # target name, new pending_xref must use original one.
              # This code restricts to change ref-targets in the translation.
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -742,3 +748,6 @@ index d0bc8af5d5..8ef7987f9a 100644
</span>                  old_xref_rawsources = [xref.rawsource for xref in old_xrefs]
                  new_xref_rawsources = [xref.rawsource for xref in new_xrefs]
                  logger.warning(__('inconsistent term references in translated message.' +
<span style='display:block; white-space:pre;background:#e0ffe0;'>+-- 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+2.33.1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/python/py-sphinx/files/py310-sphinx b/python/py-sphinx/files/py310-sphinx
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..9ea1df8118c
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/python/py-sphinx/files/py310-sphinx
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,4 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+${frameworks_dir}/Python.framework/Versions/3.10/bin/sphinx-apidoc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+${frameworks_dir}/Python.framework/Versions/3.10/bin/sphinx-quickstart
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+${frameworks_dir}/Python.framework/Versions/3.10/bin/sphinx-autogen
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+${frameworks_dir}/Python.framework/Versions/3.10/bin/sphinx-build
</span></pre><pre style='margin:0'>

</pre>