<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/4242160ff197533b1bebdf654f4e4e7858487470">https://github.com/macports/macports-ports/commit/4242160ff197533b1bebdf654f4e4e7858487470</a></p>
<pre style="white-space: pre; background: #F8F8F8"><span style='display:block; white-space:pre;color:#808000;'>commit 4242160ff197533b1bebdf654f4e4e7858487470
</span>Author: Joshua Root <jmr@macports.org>
AuthorDate: Sat May 13 16:17:12 2023 +1000

<span style='display:block; white-space:pre;color:#404040;'>    py35-sphinx: delete
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    No remaining dependents. Also delete deps with no other dependents.
</span>---
 python/py-alabaster/Portfile                     |   2 +-
 python/py-imagesize/Portfile                     |   2 +-
 python/py-jinja2/Portfile                        |   4 +-
 python/py-snowballstemmer/Portfile               |   6 +-
 python/py-sphinx/Portfile                        |  17 +-
 python/py-sphinx/files/docutils-0.18-v345.patch  | 753 -----------------------
 python/py-sphinx/files/py34-sphinx               |   4 -
 python/py-sphinx/files/py35-sphinx               |   4 -
 python/py-sphinxcontrib-devhelp/Portfile         |   7 +-
 python/py-sphinxcontrib-jsmath/Portfile          |   7 +-
 python/py-sphinxcontrib-qthelp/Portfile          |   7 +-
 python/py-sphinxcontrib-serializinghtml/Portfile |   9 +-
 12 files changed, 19 insertions(+), 803 deletions(-)

<span style='display:block; white-space:pre;color:#808080;'>diff --git a/python/py-alabaster/Portfile b/python/py-alabaster/Portfile
</span><span style='display:block; white-space:pre;color:#808080;'>index b00ddef821e..9c910bc365d 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/python/py-alabaster/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/python/py-alabaster/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -17,7 +17,7 @@ checksums           md5 2e05a5f4fe5a8b95e5e576cbf4a5d503 \
</span>                     rmd160 d81f91bd9eb6d873d765e14783a4a936fd6f26a0 \
                     sha256 a27a4a084d5e690e16e01e03ad2b2e552c61a65469419b907243193de1a84ae2
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-python.versions     27 35 36 37 38 39 310 311
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+python.versions     27 36 37 38 39 310 311
</span> 
 if {$subport ne $name} {
     if {${python.version} >= 36} {
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/python/py-imagesize/Portfile b/python/py-imagesize/Portfile
</span><span style='display:block; white-space:pre;color:#808080;'>index e0a78a43a07..12942765285 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/python/py-imagesize/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/python/py-imagesize/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -22,7 +22,7 @@ checksums           md5 5a40586a25c07e1a8f16f6267252c321 \
</span>                     rmd160 ad86267becebc8ea811d77ee46570393629898be \
                     sha256 69150444affb9cb0d5cc5a92b3676f0b2fb7cd9ae39e947a5e11a36b4497cd4a
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-python.versions     27 35 36 37 38 39 310 311
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+python.versions     27 36 37 38 39 310 311
</span> 
 if {$subport ne $name} {
     if {${python.version} >= 36} {
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/python/py-jinja2/Portfile b/python/py-jinja2/Portfile
</span><span style='display:block; white-space:pre;color:#808080;'>index 0a80cdc059d..30b061e776f 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/python/py-jinja2/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/python/py-jinja2/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -25,7 +25,7 @@ checksums           md5 d31148abd89c1df1cdb077a55db27d02 \
</span>                     rmd160 833e083e218d42721449141f03677e29b24b7137 \
                     sha256 31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-python.versions     27 35 36 37 38 39 310 311
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+python.versions     27 36 37 38 39 310 311
</span> 
 if {$subport ne $name} {
     if {${python.version} == 36} {
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -35,7 +35,7 @@ if {$subport ne $name} {
</span>                     rmd160 55e0346653a9baed024bcaf88d19f673ad7437fc \
                     sha256 611bb273cd68f3b993fabdc4064fc858c5b47a973cb5aa7999ec1ba405c87cd7
     }
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    if {${python.version} <= 35} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {${python.version} == 27} {
</span>         version     2.11.3
         revision    0
         checksums   md5 231dc00d34afb2672c497713fa9cdaaa \
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/python/py-snowballstemmer/Portfile b/python/py-snowballstemmer/Portfile
</span><span style='display:block; white-space:pre;color:#808080;'>index 7d085fc2fa2..b84ae8565af 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/python/py-snowballstemmer/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/python/py-snowballstemmer/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -22,12 +22,16 @@ checksums           sha256  09b16deb8547d3412ad7b590689584cd0fe25ec8db3be37788be
</span>                     rmd160  09e0627ddbe30c84f722bfd45e7971e5affcf339 \
                     size    86699
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-python.versions     27 35 36 37 38 39 310 311
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+python.versions     27 36 37 38 39 310 311
</span> 
 if {${subport} ne ${name}} {
     depends_build-append \
                     port:py${python.version}-setuptools
 
<span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {${python.version} >= 36} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        python.pep517   yes
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span>     post-destroot {
         set docdir ${prefix}/share/doc/${subport}
         xinstall -d ${destroot}${docdir}
<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 05c4ef2e35f..9c12484ac3c 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;'>@@ -27,7 +27,7 @@ checksums           md5 ffbafb3bbc0a978813947b183da1c0b5 \
</span>                     rmd160 08743068737f0d5fc171fa7a3fe24faec00aba47 \
                     sha256 6d56a34697bb749ffa0152feafc4b19836c755d90a7c59b72bc7dfd371b9cc6b
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-python.versions     27 35 36 37 38 39 310 311
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+python.versions     27 36 37 38 39 310 311
</span> 
 if {$subport ne $name} {
     depends_lib     port:py${python.version}-docutils
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -49,8 +49,6 @@ if {$subport ne $name} {
</span>         if {${python.version} >= 38} {
             patchfiles-append   pyproject.toml.patch
         }
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        depends_lib-append  port:py${python.version}-setuptools
</span>     }
     if {${python.version} in {36 37}} {
         version     5.3.0
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -60,18 +58,6 @@ if {$subport ne $name} {
</span>                     sha256 51026de0a9ff9fc13c05d74913ad66047e104f56a129ff73e174eb5c3ee794b5
         patchfiles  pyproject.toml-5.3.0.patch
     }
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    if {${python.version} == 35} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        version     3.5.4
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        revision    0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        checksums   md5 dd46088ebc01f6f721ee7618df680d68 \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    rmd160 70102258335337eff3cc16526e84e9a95c625018 \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    sha256 19010b7b9fa0dc7756a6e105b2aacd3a80f798af3c25c273be64d7beeb482cb1 \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    size 5911093
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        patch.pre_args      -p1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        # Source of patch: https://github.com/catap/sphinx/tree/docutils-1.8-v354
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        patchfiles  docutils-0.18-v345.patch
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span>     if {${python.version} == 27} {
         version     1.8.5
         revision    0
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -79,6 +65,7 @@ if {$subport ne $name} {
</span>                     rmd160 a7a38523976288c13a8a7e5bf4a81367db9af462 \
                     sha256 c7658aab75c920288a8cf6f09f244c6cfdae30d82d803ac1634d9f223a80ca08
 
<span style='display:block; white-space:pre;background:#e0ffe0;'>+        depends_lib-append  port:py${python.version}-setuptools
</span>         depends_run-append  port:py${python.version}-six \
                             port:py${python.version}-sphinxcontrib-websupport \
                             port:py${python.version}-typing
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/python/py-sphinx/files/docutils-0.18-v345.patch b/python/py-sphinx/files/docutils-0.18-v345.patch
</span>deleted file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index fdf75acf27a..00000000000
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/python/py-sphinx/files/docutils-0.18-v345.patch
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1,753 +0,0 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-From 5c39bece6da259752396f3881a5bb17694c0f7f4 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: Sun, 3 Oct 2021 18:32:39 +0900
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Subject: [PATCH 1/6] Support docutils-0.18; Meta directive and meta node has
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- moved
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>----
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- sphinx/addnodes.py           |  8 ++++++--
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- sphinx/directives/patches.py | 19 ++++++++++++++-----
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- tests/test_versioning.py     |  9 +++++++--
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 3 files changed, 27 insertions(+), 9 deletions(-)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-diff --git a/sphinx/addnodes.py b/sphinx/addnodes.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-index 5f371e46b..048001990 100644
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- a/sphinx/addnodes.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ b/sphinx/addnodes.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -16,9 +16,11 @@ from docutils.nodes import Element, Node
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- from sphinx.deprecation import RemovedInSphinx40Warning
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+from sphinx.util import docutils
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if False:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--    # For type annotation
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     from sphinx.application import Sphinx
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    # For type annotation
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- class document(nodes.document):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -412,7 +414,6 @@ def setup(app: "Sphinx") -> Dict[str, Any]:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     app.add_node(start_of_file)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     app.add_node(highlightlang)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     app.add_node(tabular_col_spec)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--    app.add_node(meta)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     app.add_node(pending_xref)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     app.add_node(number_reference)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     app.add_node(download_reference)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -420,6 +421,9 @@ def setup(app: "Sphinx") -> Dict[str, Any]:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     app.add_node(literal_strong)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     app.add_node(manpage)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    if docutils.__version_info__ < (0, 18):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        app.add_node(meta)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     return {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         'version': 'builtin',
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         'parallel_read_safe': True,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-diff --git a/sphinx/directives/patches.py b/sphinx/directives/patches.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-index 1eae6d0c8..4ad5ce8fd 100644
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- a/sphinx/directives/patches.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ b/sphinx/directives/patches.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -11,7 +11,7 @@ from typing import Any, Dict, List, Tuple, cast
</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 Node, make_id, system_message
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- from docutils.parsers.rst import directives
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--from docutils.parsers.rst.directives import html, images, tables
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+from docutils.parsers.rst.directives import images, tables
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- from sphinx import addnodes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- from sphinx.directives import optional_int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -19,6 +19,15 @@ from sphinx.domains.math import MathDomain
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- from sphinx.util.docutils import SphinxDirective
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- from sphinx.util.nodes import set_source_info
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+try:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    from docutils.nodes import meta as meta_node  # type: ignore
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    from docutils.parsers.rst.directives.misc import Meta as MetaBase  # type: ignore
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+except ImportError:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    # docutils-0.17 or older
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    from docutils.parsers.rst.directives.html import Meta as MetaBase
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    from docutils.parsers.rst.directives.html import MetaBody
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    meta_node = MetaBody.meta
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if False:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     # For type annotation
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     from sphinx.application import Sphinx
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -50,19 +59,19 @@ class Figure(images.Figure):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         return [figure_node]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--class Meta(html.Meta, SphinxDirective):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+class Meta(MetaBase, SphinxDirective):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     def run(self) -> List[Node]:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         result = super().run()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         for node in result:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             if (isinstance(node, nodes.pending) and
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--               isinstance(node.details['nodes'][0], html.MetaBody.meta)):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+               isinstance(node.details['nodes'][0], meta_node)):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                 meta = node.details['nodes'][0]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                 meta.source = self.env.doc2path(self.env.docname)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                 meta.line = self.lineno
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--                meta.rawcontent = meta['content']  # type: ignore
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+                meta.rawcontent = meta['content']
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                 # docutils' meta nodes aren't picklable because the class is nested
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--                meta.__class__ = addnodes.meta  # type: ignore
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+                meta.__class__ = addnodes.meta
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         return result
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-diff --git a/tests/test_versioning.py b/tests/test_versioning.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-index 33fb045ce..8ec1405ad 100644
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- a/tests/test_versioning.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ b/tests/test_versioning.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -11,12 +11,17 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- import pickle
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- import pytest
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--from docutils.parsers.rst.directives.html import MetaBody
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- from sphinx import addnodes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- from sphinx.testing.util import SphinxTestApp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- from sphinx.versioning import add_uids, get_ratio, merge_doctrees
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+try:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    from docutils.parsers.rst.directives.html import MetaBody
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    meta = MetaBody.meta
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+except ImportError:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    from docutils.nodes import meta
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- app = original = original_uids = None
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -64,7 +69,7 @@ def test_picklablility():
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     copy.settings.warning_stream = None
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     copy.settings.env = None
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     copy.settings.record_dependencies = None
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--    for metanode in copy.traverse(MetaBody.meta):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    for metanode in copy.traverse(meta):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         metanode.__class__ = addnodes.meta
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     loaded = pickle.loads(pickle.dumps(copy, pickle.HIGHEST_PROTOCOL))
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     assert all(getattr(n, 'uid', False) for n in loaded.traverse(is_paragraph))
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2.33.1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-From b43f35286a374890cabc52ce95f7d4f496a337af 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: Sun, 3 Oct 2021 18:44:37 +0900
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Subject: [PATCH 2/6] Support docutils-0.18; Disable embed_images and
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- section_self_link
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-embed_images:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    HTML Builder always use non-embeded (linked) images.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-section_self_link:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    HTML Builder controls hyperlink generation for each section via
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    `html_permalinks` option.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>----
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- sphinx/environment/__init__.py | 2 ++
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 1 file changed, 2 insertions(+)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-diff --git a/sphinx/environment/__init__.py b/sphinx/environment/__init__.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-index 6b2acab9f..b7b0a2433 100644
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- a/sphinx/environment/__init__.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ b/sphinx/environment/__init__.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -44,6 +44,7 @@ if False:
</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 = {
</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;'>-     'pep_base_url': 'https://www.python.org/dev/peps/',
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -53,6 +54,7 @@ default_settings = {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     'input_encoding': 'utf-8-sig',
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     'doctitle_xform': False,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     'sectsubtitle_xform': False,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    'section_self_link': False,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     'halt_level': 5,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     'file_insertion_enabled': True,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     'smartquotes_locales': [],
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2.33.1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-From b7416673fe78c2b55a9bfd11f70cc5043f979eb0 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: Sun, 10 Oct 2021 15:24:12 +0900
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Subject: [PATCH 3/6] refactor: Node.traverse() will returns generator since
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 0.18
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>----
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- sphinx/transforms/i18n.py | 10 +++++-----
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- sphinx/writers/latex.py   |  2 +-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- sphinx/writers/text.py    |  2 +-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- tests/test_util_nodes.py  | 14 +++++++-------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 4 files changed, 14 insertions(+), 14 deletions(-)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-diff --git a/sphinx/transforms/i18n.py b/sphinx/transforms/i18n.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-index 6bea6c6ee..a345b819d 100644
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- a/sphinx/transforms/i18n.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ b/sphinx/transforms/i18n.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -297,7 +297,7 @@ class Locale(SphinxTransform):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             is_autofootnote_ref = NodeMatcher(nodes.footnote_reference, auto=Any)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             old_foot_refs = node.traverse(is_autofootnote_ref)  # type: List[nodes.footnote_reference]  # NOQA
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             new_foot_refs = patch.traverse(is_autofootnote_ref)  # type: List[nodes.footnote_reference]  # NOQA
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--            if len(old_foot_refs) != len(new_foot_refs):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+            if len(list(old_foot_refs)) != len(list(new_foot_refs)):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                 old_foot_ref_rawsources = [ref.rawsource for ref in old_foot_refs]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                 new_foot_ref_rawsources = [ref.rawsource for ref in new_foot_refs]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                 logger.warning(__('inconsistent footnote references in translated message.' +
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -340,7 +340,7 @@ class Locale(SphinxTransform):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             is_refnamed_ref = NodeMatcher(nodes.reference, refname=Any)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             old_refs = node.traverse(is_refnamed_ref)  # type: List[nodes.reference]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             new_refs = patch.traverse(is_refnamed_ref)  # type: List[nodes.reference]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--            if len(old_refs) != len(new_refs):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+            if len(list(old_refs)) != len(list(new_refs)):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                 old_ref_rawsources = [ref.rawsource for ref in old_refs]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                 new_ref_rawsources = [ref.rawsource for ref in new_refs]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                 logger.warning(__('inconsistent references in translated message.' +
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -368,7 +368,7 @@ class Locale(SphinxTransform):
</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;'>-             refname_ids_map = {}  # type: Dict[str, List[str]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--            if len(old_foot_refs) != len(new_foot_refs):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+            if len(list(old_foot_refs)) != len(list(new_foot_refs)):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                 old_foot_ref_rawsources = [ref.rawsource for ref in old_foot_refs]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                 new_foot_ref_rawsources = [ref.rawsource for ref in new_foot_refs]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                 logger.warning(__('inconsistent footnote references in translated message.' +
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -387,7 +387,7 @@ class Locale(SphinxTransform):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             old_cite_refs = node.traverse(is_citation_ref)  # type: List[nodes.citation_reference]  # NOQA
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             new_cite_refs = patch.traverse(is_citation_ref)  # type: List[nodes.citation_reference]  # NOQA
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             refname_ids_map = {}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--            if len(old_cite_refs) != len(new_cite_refs):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+            if len(list(old_cite_refs)) != len(list(new_cite_refs)):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                 old_cite_ref_rawsources = [ref.rawsource for ref in old_cite_refs]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                 new_cite_ref_rawsources = [ref.rawsource for ref in new_cite_refs]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                 logger.warning(__('inconsistent citation references in translated message.' +
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -407,7 +407,7 @@ class Locale(SphinxTransform):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             old_xrefs = node.traverse(addnodes.pending_xref)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             new_xrefs = patch.traverse(addnodes.pending_xref)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             xref_reftarget_map = {}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--            if len(old_xrefs) != len(new_xrefs):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+            if len(list(old_xrefs)) != len(list(new_xrefs)):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                 old_xref_rawsources = [xref.rawsource for xref in old_xrefs]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                 new_xref_rawsources = [xref.rawsource for xref in new_xrefs]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                 logger.warning(__('inconsistent term references in translated message.' +
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-diff --git a/sphinx/writers/latex.py b/sphinx/writers/latex.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-index 247a7dfb5..4dd8eedd3 100644
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- a/sphinx/writers/latex.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ b/sphinx/writers/latex.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -1001,7 +1001,7 @@ class LaTeXTranslator(SphinxTranslator):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             context = ('\\par' + CR + '\\vskip-\\baselineskip'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                        '\\vbox{\\hbox{\\strut}}\\end{varwidth}%' + CR + context)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             self.needs_linetrimming = 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--        if len(node.traverse(nodes.paragraph)) >= 2:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        if len(list(node.traverse(nodes.paragraph))) >= 2:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             self.table.has_oldproblematic = True
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         if isinstance(node.parent.parent, nodes.thead) or (cell.col in self.table.stubs):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             if len(node) == 1 and isinstance(node[0], nodes.paragraph) and node.astext() == '':
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-diff --git a/sphinx/writers/text.py b/sphinx/writers/text.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-index c0ebe32a2..ec5debd84 100644
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- a/sphinx/writers/text.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ b/sphinx/writers/text.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -834,7 +834,7 @@ class TextTranslator(SphinxTranslator):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             self.end_state(first='%s. ' % self.list_counter[-1])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     def visit_definition_list_item(self, node: Element) -> None:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--        self._classifier_count_in_li = len(node.traverse(nodes.classifier))
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        self._classifier_count_in_li = len(list(node.traverse(nodes.classifier)))
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     def depart_definition_list_item(self, node: Element) -> None:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         pass
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-diff --git a/tests/test_util_nodes.py b/tests/test_util_nodes.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-index cb2ae70a8..421930cf5 100644
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- a/tests/test_util_nodes.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ b/tests/test_util_nodes.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -60,31 +60,31 @@ def test_NodeMatcher():
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     # search by node class
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     matcher = NodeMatcher(nodes.paragraph)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--    assert len(doctree.traverse(matcher)) == 3
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    assert len(list(doctree.traverse(matcher))) == 3
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     # search by multiple node classes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     matcher = NodeMatcher(nodes.paragraph, nodes.literal_block)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--    assert len(doctree.traverse(matcher)) == 4
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    assert len(list(doctree.traverse(matcher))) == 4
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     # search by node attribute
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     matcher = NodeMatcher(block=1)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--    assert len(doctree.traverse(matcher)) == 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    assert len(list(doctree.traverse(matcher))) == 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     # search by node attribute (Any)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     matcher = NodeMatcher(block=Any)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--    assert len(doctree.traverse(matcher)) == 3
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    assert len(list(doctree.traverse(matcher))) == 3
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     # search by both class and attribute
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     matcher = NodeMatcher(nodes.paragraph, block=Any)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--    assert len(doctree.traverse(matcher)) == 2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    assert len(list(doctree.traverse(matcher))) == 2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     # mismatched
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     matcher = NodeMatcher(nodes.title)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--    assert len(doctree.traverse(matcher)) == 0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    assert len(list(doctree.traverse(matcher))) == 0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     # search with Any does not match to Text node
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     matcher = NodeMatcher(blah=Any)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--    assert len(doctree.traverse(matcher)) == 0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    assert len(list(doctree.traverse(matcher))) == 0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- @pytest.mark.parametrize(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2.33.1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-From 893776f280fed8a7b8d1f8c89dd4830f006060f1 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:23:29 +0900
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Subject: [PATCH 4/6] Support docutils-0.18: allow PreBibliographic nodes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- before docinfo
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Since 0.18, `meta` directive inserts meta node into the top of the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-document.  It confuses MetadataCollector.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This allows doctree contains PreBibliographic nodes just before docinfo
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-node.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>----
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- sphinx/environment/collectors/metadata.py | 9 ++++++---
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 1 file changed, 6 insertions(+), 3 deletions(-)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-diff --git a/sphinx/environment/collectors/metadata.py b/sphinx/environment/collectors/metadata.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-index 7b3628c9a..d04d80595 100644
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- a/sphinx/environment/collectors/metadata.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ b/sphinx/environment/collectors/metadata.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -33,9 +33,12 @@ class MetadataCollector(EnvironmentCollector):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         Keep processing minimal -- just return what docutils says.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         """
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--        if len(doctree) > 0 and isinstance(doctree[0], nodes.docinfo):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        index = doctree.first_child_not_matching_class(nodes.PreBibliographic)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        if index is None:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+            return
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        elif isinstance(doctree[index], nodes.docinfo):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             md = app.env.metadata[app.env.docname]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--            for node in doctree[0]:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+            for node in doctree[index]:  # type: ignore
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                 # nodes are multiply inherited...
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                 if isinstance(node, nodes.authors):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                     authors = cast(List[nodes.author], node)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -58,7 +61,7 @@ class MetadataCollector(EnvironmentCollector):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                         value = 0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                     md[name] = value
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--            doctree.pop(0)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+            doctree.pop(index)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- def setup(app: Sphinx) -> Dict[str, Any]:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2.33.1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-From f63b487b899ccefccd69a0ec0c6ad52c64361b04 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: Wed, 27 Oct 2021 01:49:57 +0900
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Subject: [PATCH 5/6] Support docutils-0.18: Consume iterator of
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- Element.traverse()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Since 0.18, Element.traverse() returns an iterator instead of
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-intermediate object.  As a result, the return value is always considered
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-as truthy value.  And it becomes fragile when the caller modifies the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-doctree on the loop.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>----
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- sphinx/builders/_epub_base.py             |  8 ++++----
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- sphinx/builders/latex/transforms.py       | 10 +++++-----
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- sphinx/domains/index.py                   |  2 +-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- sphinx/domains/python.py                  |  2 +-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- sphinx/environment/adapters/toctree.py    |  4 ++--
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- sphinx/ext/autosummary/__init__.py        |  2 +-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- sphinx/ext/linkcode.py                    |  2 +-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- sphinx/ext/todo.py                        |  2 +-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- sphinx/ext/viewcode.py                    |  4 ++--
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- sphinx/transforms/__init__.py             |  4 ++--
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- sphinx/transforms/i18n.py                 |  2 +-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- sphinx/transforms/post_transforms/code.py |  2 +-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- sphinx/util/nodes.py                      |  4 ++--
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- sphinx/writers/latex.py                   |  2 +-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- sphinx/writers/manpage.py                 |  4 ++--
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 15 files changed, 27 insertions(+), 27 deletions(-)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-diff --git a/sphinx/builders/_epub_base.py b/sphinx/builders/_epub_base.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-index 7df3f8df5..5de83c672 100644
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- a/sphinx/builders/_epub_base.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ b/sphinx/builders/_epub_base.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -318,14 +318,14 @@ class EpubBuilder(StandaloneHTMLBuilder):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             # a) place them after the last existing footnote
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             # b) place them after an (empty) Footnotes rubric
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             # c) create an empty Footnotes rubric at the end of the document
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--            fns = tree.traverse(nodes.footnote)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+            fns = list(tree.traverse(nodes.footnote))
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             if fns:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                 fn = fns[-1]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                 return fn.parent, fn.parent.index(fn) + 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             for node in tree.traverse(nodes.rubric):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                 if len(node) == 1 and node.astext() == FOOTNOTES_RUBRIC_NAME:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                     return node.parent, node.parent.index(node) + 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--            doc = tree.traverse(nodes.document)[0]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+            doc = list(tree.traverse(nodes.document))[0]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             rub = nodes.rubric()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             rub.append(nodes.Text(FOOTNOTES_RUBRIC_NAME))
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             doc.append(rub)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -334,10 +334,10 @@ class EpubBuilder(StandaloneHTMLBuilder):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         if show_urls == 'no':
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             return
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         if show_urls == 'footnote':
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--            doc = tree.traverse(nodes.document)[0]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+            doc = list(tree.traverse(nodes.document))[0]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             fn_spot, fn_idx = footnote_spot(tree)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             nr = 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--        for node in tree.traverse(nodes.reference):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        for node in list(tree.traverse(nodes.reference)):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             uri = node.get('refuri', '')
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             if (uri.startswith('http:') or uri.startswith('https:') or
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                     uri.startswith('ftp:')) and uri not in node.astext():
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-diff --git a/sphinx/builders/latex/transforms.py b/sphinx/builders/latex/transforms.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-index 0a74eded4..97baf467a 100644
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- a/sphinx/builders/latex/transforms.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ b/sphinx/builders/latex/transforms.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -45,7 +45,7 @@ class SubstitutionDefinitionsRemover(SphinxPostTransform):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     formats = ('latex',)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     def run(self, **kwargs: Any) -> None:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--        for node in self.document.traverse(nodes.substitution_definition):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        for node in list(self.document.traverse(nodes.substitution_definition)):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             node.parent.remove(node)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -81,7 +81,7 @@ class ShowUrlsTransform(SphinxPostTransform):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         if show_urls is False or show_urls == 'no':
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             return
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--        for node in self.document.traverse(nodes.reference):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        for node in list(self.document.traverse(nodes.reference)):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             uri = node.get('refuri', '')
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             if uri.startswith(URI_SCHEMES):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                 if uri.startswith('mailto:'):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -501,7 +501,7 @@ class BibliographyTransform(SphinxPostTransform):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     def run(self, **kwargs: Any) -> None:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         citations = thebibliography()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--        for node in self.document.traverse(nodes.citation):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        for node in list(self.document.traverse(nodes.citation)):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             node.parent.remove(node)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             citations += node
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -602,9 +602,9 @@ class IndexInSectionTitleTransform(SphinxPostTransform):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     formats = ('latex',)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     def run(self, **kwargs: Any) -> None:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--        for node in self.document.traverse(nodes.title):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        for node in list(self.document.traverse(nodes.title)):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             if isinstance(node.parent, nodes.section):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--                for i, index in enumerate(node.traverse(addnodes.index)):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+                for i, index in enumerate(list(node.traverse(addnodes.index))):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                     # move the index node next to the section title
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                     node.remove(index)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                     node.parent.insert(i + 1, index)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-diff --git a/sphinx/domains/index.py b/sphinx/domains/index.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-index 4a91d6ad1..ba4ba4515 100644
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- a/sphinx/domains/index.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ b/sphinx/domains/index.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -48,7 +48,7 @@ class IndexDomain(Domain):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     def process_doc(self, env: BuildEnvironment, docname: str, document: Node) -> None:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         """Process a document after it is read by the environment."""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         entries = self.entries.setdefault(env.docname, [])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--        for node in document.traverse(addnodes.index):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        for node in list(document.traverse(addnodes.index)):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             try:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                 for entry in node['entries']:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                     split_index_msg(entry[0], entry[1])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-diff --git a/sphinx/domains/python.py b/sphinx/domains/python.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-index 552742bb8..baae1b819 100644
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- a/sphinx/domains/python.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ b/sphinx/domains/python.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -287,7 +287,7 @@ class PyXrefMixin:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                 text = target[1:]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             elif prefix == '~':
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                 text = target.split('.')[-1]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--            for node in result.traverse(nodes.Text):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+            for node in list(result.traverse(nodes.Text)):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                 node.parent[node.parent.index(node)] = nodes.Text(text)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                 break
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         return result
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-diff --git a/sphinx/environment/adapters/toctree.py b/sphinx/environment/adapters/toctree.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-index f0a37ab7f..49454be0f 100644
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- a/sphinx/environment/adapters/toctree.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ b/sphinx/environment/adapters/toctree.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -194,13 +194,13 @@ class TocTree:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                         for toplevel in children:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                             # nodes with length 1 don't have any children anyway
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                             if len(toplevel) > 1:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--                                subtrees = toplevel.traverse(addnodes.toctree)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+                                subtrees = list(toplevel.traverse(addnodes.toctree))
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                                 if subtrees:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                                     toplevel[1][:] = subtrees  # type: ignore
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                                 else:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                                     toplevel.pop(1)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                     # resolve all sub-toctrees
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--                    for subtocnode in toc.traverse(addnodes.toctree):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+                    for subtocnode in list(toc.traverse(addnodes.toctree)):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                         if not (subtocnode.get('hidden', False) and
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                                 not includehidden):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                             i = subtocnode.parent.index(subtocnode) + 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-diff --git a/sphinx/ext/autosummary/__init__.py b/sphinx/ext/autosummary/__init__.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-index b268127d0..a71f1b6ac 100644
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- a/sphinx/ext/autosummary/__init__.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ b/sphinx/ext/autosummary/__init__.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -564,7 +564,7 @@ def extract_summary(doc: List[str], document: Any) -> str:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                 node = parse(doc, document.settings)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                 if summary.endswith(WELL_KNOWN_ABBREVIATIONS):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                     pass
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--                elif not node.traverse(nodes.system_message):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+                elif not list(node.traverse(nodes.system_message)):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                     # considered as that splitting by period does not break inline markups
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                     break
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-diff --git a/sphinx/ext/linkcode.py b/sphinx/ext/linkcode.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-index 5c118a9fb..495bb5073 100644
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- a/sphinx/ext/linkcode.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ b/sphinx/ext/linkcode.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -39,7 +39,7 @@ def doctree_read(app: Sphinx, doctree: Node) -> None:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         'js': ['object', 'fullname'],
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--    for objnode in doctree.traverse(addnodes.desc):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    for objnode in list(doctree.traverse(addnodes.desc)):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         domain = objnode.get('domain')
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         uris = set()  # type: Set[str]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         for signode in objnode:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-diff --git a/sphinx/ext/todo.py b/sphinx/ext/todo.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-index a73dea84d..16d157164 100644
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- a/sphinx/ext/todo.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ b/sphinx/ext/todo.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -160,7 +160,7 @@ class TodoListProcessor:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     def process(self, doctree: nodes.document, docname: str) -> None:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         todos = sum(self.domain.todos.values(), [])  # type: List[todo_node]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--        for node in doctree.traverse(todolist):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        for node in list(doctree.traverse(todolist)):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             if not self.config.todo_include_todos:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                 node.parent.remove(node)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                 continue
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-diff --git a/sphinx/ext/viewcode.py b/sphinx/ext/viewcode.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-index 6bedf2e1c..d2341810c 100644
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- a/sphinx/ext/viewcode.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ b/sphinx/ext/viewcode.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -108,7 +108,7 @@ def doctree_read(app: Sphinx, doctree: Node) -> None:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         return False
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--    for objnode in doctree.traverse(addnodes.desc):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    for objnode in list(doctree.traverse(addnodes.desc)):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         if objnode.get('domain') != 'py':
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             continue
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         names = set()  # type: Set[str]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -183,7 +183,7 @@ class ViewcodeAnchorTransform(SphinxPostTransform):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             node.replace_self(refnode)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     def remove_viewcode_anchors(self) -> None:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--        for node in self.document.traverse(viewcode_anchor):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        for node in list(self.document.traverse(viewcode_anchor)):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             node.parent.remove(node)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-diff --git a/sphinx/transforms/__init__.py b/sphinx/transforms/__init__.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-index 45640308f..4512053c7 100644
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- a/sphinx/transforms/__init__.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ b/sphinx/transforms/__init__.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -128,7 +128,7 @@ class MoveModuleTargets(SphinxTransform):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     default_priority = 210
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     def apply(self, **kwargs: Any) -> None:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--        for node in self.document.traverse(nodes.target):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        for node in list(self.document.traverse(nodes.target)):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             if not node['ids']:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                 continue
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             if ('ismod' in node and
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -298,7 +298,7 @@ class FilterSystemMessages(SphinxTransform):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     def apply(self, **kwargs: Any) -> None:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         filterlevel = 2 if self.config.keep_warnings else 5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--        for node in self.document.traverse(nodes.system_message):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        for node in list(self.document.traverse(nodes.system_message)):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             if node['level'] < filterlevel:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                 logger.debug('%s [filtered system message]', node.astext())
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                 node.parent.remove(node)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-diff --git a/sphinx/transforms/i18n.py b/sphinx/transforms/i18n.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-index a345b819d..ccc14c23f 100644
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- a/sphinx/transforms/i18n.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ b/sphinx/transforms/i18n.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -486,7 +486,7 @@ class RemoveTranslatableInline(SphinxTransform):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             return
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         matcher = NodeMatcher(nodes.inline, translatable=Any)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--        for inline in self.document.traverse(matcher):  # type: nodes.inline
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        for inline in list(self.document.traverse(matcher)):  # type: nodes.inline
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             inline.parent.remove(inline)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             inline.parent += inline.children
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-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:#ffe0e0;'>-index 20df1db3c..59fa115e5 100644
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- a/sphinx/transforms/post_transforms/code.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ b/sphinx/transforms/post_transforms/code.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -40,7 +40,7 @@ class HighlightLanguageTransform(SphinxTransform):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                                            self.config.highlight_language)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         self.document.walkabout(visitor)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--        for node in self.document.traverse(addnodes.highlightlang):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        for node in list(self.document.traverse(addnodes.highlightlang)):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             node.parent.remove(node)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-diff --git a/sphinx/util/nodes.py b/sphinx/util/nodes.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-index d5e43e716..06af8bedd 100644
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- a/sphinx/util/nodes.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ b/sphinx/util/nodes.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -349,7 +349,7 @@ def clean_astext(node: Element) -> str:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     node = node.deepcopy()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     for img in node.traverse(nodes.image):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         img['alt'] = ''
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--    for raw in node.traverse(nodes.raw):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    for raw in list(node.traverse(nodes.raw)):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         raw.parent.remove(raw)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     return node.astext()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -413,7 +413,7 @@ def inline_all_toctrees(builder: "Builder", docnameset: Set[str], docname: str,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     Record all docnames in *docnameset*, and output docnames with *colorfunc*.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     """
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     tree = cast(nodes.document, tree.deepcopy())
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--    for toctreenode in tree.traverse(addnodes.toctree):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    for toctreenode in list(tree.traverse(addnodes.toctree)):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         newnodes = []
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         includefiles = map(str, toctreenode['includefiles'])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         for includefile in includefiles:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-diff --git a/sphinx/writers/latex.py b/sphinx/writers/latex.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-index 4dd8eedd3..b0878efe5 100644
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- a/sphinx/writers/latex.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ b/sphinx/writers/latex.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -658,7 +658,7 @@ class LaTeXTranslator(SphinxTranslator):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                 raise nodes.SkipNode
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             else:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                 short = ''
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--                if node.traverse(nodes.image):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+                if list(node.traverse(nodes.image)):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                     short = ('[%s]' % self.escape(' '.join(clean_astext(node).split())))
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                 try:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-diff --git a/sphinx/writers/manpage.py b/sphinx/writers/manpage.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-index 9ef429ba3..e2d3f3b38 100644
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- a/sphinx/writers/manpage.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ b/sphinx/writers/manpage.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -58,7 +58,7 @@ class NestedInlineTransform:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     def apply(self, **kwargs: Any) -> None:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         matcher = NodeMatcher(nodes.literal, nodes.emphasis, nodes.strong)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--        for node in self.document.traverse(matcher):  # type: TextElement
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        for node in list(self.document.traverse(matcher)):  # type: TextElement
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             if any(matcher(subnode) for subnode in node):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                 pos = node.parent.index(node)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                 for subnode in reversed(node[1:]):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -214,7 +214,7 @@ class ManualPageTranslator(SphinxTranslator, BaseTranslator):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     # overwritten -- don't make whole of term bold if it includes strong node
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     def visit_term(self, node: Element) -> None:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--        if node.traverse(nodes.strong):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        if list(node.traverse(nodes.strong)):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             self.body.append('\n')
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         else:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             super().visit_term(node)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2.33.1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-From ae4a354aadb5782733cd87bd4cddd430e44b34a7 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: Sun, 31 Oct 2021 01:33:16 +0900
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Subject: [PATCH 6/6] Support docutils-0.18: Consume generator of
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- Element.traverse()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-The last fix in i18n module was incorrect because it compares the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-"already consumed" generators.  It should compares the lists of nodes.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>----
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- sphinx/transforms/i18n.py | 18 +++++++++---------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 1 file changed, 9 insertions(+), 9 deletions(-)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-diff --git a/sphinx/transforms/i18n.py b/sphinx/transforms/i18n.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-index ccc14c23f..ffb316126 100644
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- a/sphinx/transforms/i18n.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ b/sphinx/transforms/i18n.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -297,7 +297,7 @@ class Locale(SphinxTransform):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             is_autofootnote_ref = NodeMatcher(nodes.footnote_reference, auto=Any)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             old_foot_refs = node.traverse(is_autofootnote_ref)  # type: List[nodes.footnote_reference]  # NOQA
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             new_foot_refs = patch.traverse(is_autofootnote_ref)  # type: List[nodes.footnote_reference]  # NOQA
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--            if len(list(old_foot_refs)) != len(list(new_foot_refs)):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+            if len(old_foot_refs) != len(new_foot_refs):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                 old_foot_ref_rawsources = [ref.rawsource for ref in old_foot_refs]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                 new_foot_ref_rawsources = [ref.rawsource for ref in new_foot_refs]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                 logger.warning(__('inconsistent footnote references in translated message.' +
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -340,7 +340,7 @@ class Locale(SphinxTransform):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             is_refnamed_ref = NodeMatcher(nodes.reference, refname=Any)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             old_refs = node.traverse(is_refnamed_ref)  # type: List[nodes.reference]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             new_refs = patch.traverse(is_refnamed_ref)  # type: List[nodes.reference]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--            if len(list(old_refs)) != len(list(new_refs)):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+            if len(old_refs) != len(new_refs):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                 old_ref_rawsources = [ref.rawsource for ref in old_refs]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                 new_ref_rawsources = [ref.rawsource for ref in new_refs]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                 logger.warning(__('inconsistent references in translated message.' +
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -368,7 +368,7 @@ class Locale(SphinxTransform):
</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;'>-             refname_ids_map = {}  # type: Dict[str, List[str]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--            if len(list(old_foot_refs)) != len(list(new_foot_refs)):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+            if len(old_foot_refs) != len(new_foot_refs):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                 old_foot_ref_rawsources = [ref.rawsource for ref in old_foot_refs]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                 new_foot_ref_rawsources = [ref.rawsource for ref in new_foot_refs]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                 logger.warning(__('inconsistent footnote references in translated message.' +
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -384,10 +384,10 @@ class Locale(SphinxTransform):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             # citation should use original 'ids'.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             is_citation_ref = NodeMatcher(nodes.citation_reference, refname=Any)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--            old_cite_refs = node.traverse(is_citation_ref)  # type: List[nodes.citation_reference]  # NOQA
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--            new_cite_refs = patch.traverse(is_citation_ref)  # type: List[nodes.citation_reference]  # NOQA
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+            old_cite_refs = list(node.traverse(is_citation_ref))  # type: List[nodes.citation_reference]  # NOQA
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+            new_cite_refs = list(patch.traverse(is_citation_ref))  # type: List[nodes.citation_reference]  # NOQA
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             refname_ids_map = {}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--            if len(list(old_cite_refs)) != len(list(new_cite_refs)):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+            if len(old_cite_refs) != len(new_cite_refs):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                 old_cite_ref_rawsources = [ref.rawsource for ref in old_cite_refs]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                 new_cite_ref_rawsources = [ref.rawsource for ref in new_cite_refs]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                 logger.warning(__('inconsistent citation references in translated message.' +
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -404,10 +404,10 @@ class Locale(SphinxTransform):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             # Original pending_xref['reftarget'] contain not-translated
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             # target name, new pending_xref must use original one.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             # This code restricts to change ref-targets in the translation.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--            old_xrefs = node.traverse(addnodes.pending_xref)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--            new_xrefs = patch.traverse(addnodes.pending_xref)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+            old_xrefs = list(node.traverse(addnodes.pending_xref))
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+            new_xrefs = list(patch.traverse(addnodes.pending_xref))
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             xref_reftarget_map = {}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--            if len(list(old_xrefs)) != len(list(new_xrefs)):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+            if len(old_xrefs) != len(new_xrefs):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                 old_xref_rawsources = [xref.rawsource for xref in old_xrefs]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                 new_xref_rawsources = [xref.rawsource for xref in new_xrefs]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                 logger.warning(__('inconsistent term references in translated message.' +
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2.33.1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/python/py-sphinx/files/py34-sphinx b/python/py-sphinx/files/py34-sphinx
</span>deleted file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 0e2f6a63894..00000000000
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/python/py-sphinx/files/py34-sphinx
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1,4 +0,0 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-${frameworks_dir}/Python.framework/Versions/3.4/bin/sphinx-apidoc
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-${frameworks_dir}/Python.framework/Versions/3.4/bin/sphinx-quickstart
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-${frameworks_dir}/Python.framework/Versions/3.4/bin/sphinx-autogen
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-${frameworks_dir}/Python.framework/Versions/3.4/bin/sphinx-build
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/python/py-sphinx/files/py35-sphinx b/python/py-sphinx/files/py35-sphinx
</span>deleted file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index c6bead7e161..00000000000
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/python/py-sphinx/files/py35-sphinx
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1,4 +0,0 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-${frameworks_dir}/Python.framework/Versions/3.5/bin/sphinx-apidoc
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-${frameworks_dir}/Python.framework/Versions/3.5/bin/sphinx-quickstart
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-${frameworks_dir}/Python.framework/Versions/3.5/bin/sphinx-autogen
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-${frameworks_dir}/Python.framework/Versions/3.5/bin/sphinx-build
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/python/py-sphinxcontrib-devhelp/Portfile b/python/py-sphinxcontrib-devhelp/Portfile
</span><span style='display:block; white-space:pre;color:#808080;'>index eef82b58a48..7d8ffcda79a 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/python/py-sphinxcontrib-devhelp/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/python/py-sphinxcontrib-devhelp/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -16,18 +16,15 @@ description         sphinx extension which outputs Devhelp document
</span> long_description    sphinxcontrib-devhelp is a sphinx extension which outputs Devhelp document.
 
 homepage            http://sphinx-doc.org/
<span style='display:block; white-space:pre;background:#ffe0e0;'>-master_sites        pypi:s/sphinxcontrib-devhelp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-distname            sphinxcontrib-devhelp-${version}
</span> 
 checksums           rmd160  10ab655ca874f228604f17c7cd521f0bcb1f446f \
                     sha256  ff7f1afa7b9642e7060379360a67e9c41e8f3121f2ce9164266f61b9f4b338e4 \
                     size    17398
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-python.versions     35 36 37 38 39 310 311
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+python.versions     36 37 38 39 310 311
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+python.pep517       yes
</span> 
 if {${name} ne ${subport}} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    depends_build-append \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                        port:py${python.version}-setuptools
</span>     depends_run-append \
                         port:py${python.version}-docutils
     livecheck.type      none
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/python/py-sphinxcontrib-jsmath/Portfile b/python/py-sphinxcontrib-jsmath/Portfile
</span><span style='display:block; white-space:pre;color:#808080;'>index 62891376b6f..bbf0628a09d 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/python/py-sphinxcontrib-jsmath/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/python/py-sphinxcontrib-jsmath/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -16,18 +16,15 @@ description         sphinx extension which renders display math in HTML via Java
</span> long_description    sphinxcontrib-jsmath is a sphinx extension which renders display math in HTML via JavaScript.
 
 homepage            http://sphinx-doc.org/
<span style='display:block; white-space:pre;background:#ffe0e0;'>-master_sites        pypi:s/sphinxcontrib-jsmath
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-distname            sphinxcontrib-jsmath-${version}
</span> 
 checksums           rmd160  9ff064c88f8f121bd7876ae3f79b4c31f5a9264f \
                     sha256  a9925e4a4587247ed2191a22df5f6970656cb8ca2bd6284309578f2153e0c4b8 \
                     size    5787
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-python.versions     35 36 37 38 39 310 311
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+python.versions     36 37 38 39 310 311
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+python.pep517       yes
</span> 
 if {${name} ne ${subport}} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    depends_build-append \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                        port:py${python.version}-setuptools
</span>     depends_run-append \
                         port:py${python.version}-docutils
     livecheck.type      none
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/python/py-sphinxcontrib-qthelp/Portfile b/python/py-sphinxcontrib-qthelp/Portfile
</span><span style='display:block; white-space:pre;color:#808080;'>index 93837293e21..2e945539f1e 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/python/py-sphinxcontrib-qthelp/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/python/py-sphinxcontrib-qthelp/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -16,18 +16,15 @@ description         sphinx extension which outputs QtHelp document
</span> long_description    sphinxcontrib-qthelp is a sphinx extension which outputs QtHelp document.
 
 homepage            http://sphinx-doc.org/
<span style='display:block; white-space:pre;background:#ffe0e0;'>-master_sites        pypi:s/sphinxcontrib-qthelp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-distname            sphinxcontrib-qthelp-${version}
</span> 
 checksums           rmd160  b41a6b415c5653b0828009bcd73b18823d3cc1b8 \
                     sha256  4c33767ee058b70dba89a6fc5c1892c0d57a54be67ddd3e7875a18d14cba5a72 \
                     size    21658
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-python.versions     35 36 37 38 39 310 311
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+python.versions     36 37 38 39 310 311
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+python.pep517       yes
</span> 
 if {${name} ne ${subport}} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    depends_build-append \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                        port:py${python.version}-setuptools
</span>     depends_run-append \
                         port:py${python.version}-docutils
     livecheck.type      none
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/python/py-sphinxcontrib-serializinghtml/Portfile b/python/py-sphinxcontrib-serializinghtml/Portfile
</span><span style='display:block; white-space:pre;color:#808080;'>index 60d93625ef6..8e7eecbd4db 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/python/py-sphinxcontrib-serializinghtml/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/python/py-sphinxcontrib-serializinghtml/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -22,10 +22,5 @@ checksums           rmd160  c8e1910f916f8d07d5e87bc433c964634146773f \
</span>                     sha256  aa5f6de5dfdf809ef505c4895e51ef5c9eac17d0f287933eb49ec495280b6952 \
                     size    21019
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-python.versions     35 36 37 38 39 310 311
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if {${name} ne ${subport}} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    depends_build-append \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                        port:py${python.version}-setuptools
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    livecheck.type      none
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+python.versions     36 37 38 39 310 311
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+python.pep517       yes
</span></pre><pre style='margin:0'>

</pre>