|
From: <mi...@us...> - 2019-09-06 13:16:36
|
Revision: 8387
http://sourceforge.net/p/docutils/code/8387
Author: milde
Date: 2019-09-06 13:16:34 +0000 (Fri, 06 Sep 2019)
Log Message:
-----------
Do not rely on `nodes.Node.traverse()` returning a "list" instance.
While the current implementation actually returns a list of nodes,
the docstring specifies only: "Return an iterable ...".
Modified Paths:
--------------
trunk/docutils/docutils/transforms/references.py
trunk/docutils/docutils/transforms/universal.py
trunk/docutils/docutils/writers/latex2e/__init__.py
trunk/docutils/test/test_transforms/test_strip_comments.py
Modified: trunk/docutils/docutils/transforms/references.py
===================================================================
--- trunk/docutils/docutils/transforms/references.py 2019-09-06 13:16:17 UTC (rev 8386)
+++ trunk/docutils/docutils/transforms/references.py 2019-09-06 13:16:34 UTC (rev 8387)
@@ -663,7 +663,7 @@
def apply(self):
defs = self.document.substitution_defs
normed = self.document.substitution_names
- subreflist = self.document.traverse(nodes.substitution_reference)
+ subreflist = list(self.document.traverse(nodes.substitution_reference))
nested = {}
for ref in subreflist:
refname = ref['refname']
Modified: trunk/docutils/docutils/transforms/universal.py
===================================================================
--- trunk/docutils/docutils/transforms/universal.py 2019-09-06 13:16:17 UTC (rev 8386)
+++ trunk/docutils/docutils/transforms/universal.py 2019-09-06 13:16:34 UTC (rev 8387)
@@ -144,7 +144,7 @@
default_priority = 870
def apply(self):
- for node in self.document.traverse(nodes.system_message):
+ for node in list(self.document.traverse(nodes.system_message)):
if node['level'] < self.document.reporter.report_level:
node.parent.remove(node)
@@ -176,7 +176,7 @@
def apply(self):
if self.document.settings.strip_comments:
- for node in self.document.traverse(nodes.comment):
+ for node in list(self.document.traverse(nodes.comment)):
node.parent.remove(node)
@@ -191,27 +191,31 @@
default_priority = 420
def apply(self):
- if not (self.document.settings.strip_elements_with_classes
- or self.document.settings.strip_classes):
+ if self.document.settings.strip_elements_with_classes:
+ self.strip_elements = set(
+ self.document.settings.strip_elements_with_classes)
+ # Iterate over a list as removing the current node
+ # corrupts the iterator returned by `traverse`:
+ for node in list(self.document.traverse(self.check_classes)):
+ node.parent.remove(node)
+
+ if not self.document.settings.strip_classes:
return
- # prepare dicts for lookup (not sets, for Python 2.2 compatibility):
- self.strip_elements = dict(
- [(key, None)
- for key in (self.document.settings.strip_elements_with_classes
- or [])])
- self.strip_classes = dict(
- [(key, None) for key in (self.document.settings.strip_classes
- or [])])
- for node in self.document.traverse(self.check_classes):
- node.parent.remove(node)
+ strip_classes = self.document.settings.strip_classes
+ for node in self.document.traverse(nodes.Element):
+ for class_value in strip_classes:
+ try:
+ node['classes'].remove(class_value)
+ except ValueError:
+ pass
def check_classes(self, node):
- if isinstance(node, nodes.Element):
- for class_value in node['classes'][:]:
- if class_value in self.strip_classes:
- node['classes'].remove(class_value)
- if class_value in self.strip_elements:
- return 1
+ if not isinstance(node, nodes.Element):
+ return False
+ for class_value in node['classes'][:]:
+ if class_value in self.strip_elements:
+ return True
+ return False
class SmartQuotes(Transform):
Modified: trunk/docutils/docutils/writers/latex2e/__init__.py
===================================================================
--- trunk/docutils/docutils/writers/latex2e/__init__.py 2019-09-06 13:16:17 UTC (rev 8386)
+++ trunk/docutils/docutils/writers/latex2e/__init__.py 2019-09-06 13:16:34 UTC (rev 8387)
@@ -1815,13 +1815,11 @@
if self._use_latex_citations:
followup_citation = False
# check for a following citation separated by a space or newline
- next_siblings = node.traverse(descend=False, siblings=True,
- include_self=False)
- if len(next_siblings) > 1:
- next = next_siblings[0]
- if (isinstance(next, nodes.Text) and
- next.astext() in (' ', '\n')):
- if next_siblings[1].__class__ == node.__class__:
+ sibling = node.next_node(descend=False, siblings=True)
+ if (isinstance(sibling, nodes.Text)
+ and sibling.astext() in (' ', '\n')):
+ sibling2 = sibling.next_node(descend=False, siblings=True)
+ if isinstance(sibling2, nodes.citation_reference):
followup_citation = True
if followup_citation:
self.out.append(',')
Modified: trunk/docutils/test/test_transforms/test_strip_comments.py
===================================================================
--- trunk/docutils/test/test_transforms/test_strip_comments.py 2019-09-06 13:16:17 UTC (rev 8386)
+++ trunk/docutils/test/test_transforms/test_strip_comments.py 2019-09-06 13:16:34 UTC (rev 8387)
@@ -31,6 +31,8 @@
=====
Paragraph.
+
+.. second comment
""",
"""\
<document source="test data">
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|