SF.net SVN: docutils:[9742 ] trunk/docutils/docutils/t ransforms/universal.py

milde--- via Docutils-checkins <[email protected]>
Newsgroups gmane.text.docutils.cvs
Message-ID <[email protected]>
Revision: 9742
          http://sourceforge.net/p/docutils/code/9742
Author:   milde
Date:     2024-06-06 14:03:12 +0000 (Thu, 06 Jun 2024)
Log Message:
-----------
Make `FilterMessages` transform more robust.

Remove dependency on correct entries in the `document.ids`
dictionary when converting `<problematic>` elements pointing
to removed system messages to simple text.

Modified Paths:
--------------
    trunk/docutils/docutils/transforms/universal.py

Modified: trunk/docutils/docutils/transforms/universal.py
===================================================================
--- trunk/docutils/docutils/transforms/universal.py	2024-06-06 14:03:03 UTC (rev 9741)
+++ trunk/docutils/docutils/transforms/universal.py	2024-06-06 14:03:12 UTC (rev 9742)
@@ -146,15 +146,15 @@
     default_priority = 870
 
     def apply(self):
+        removed_ids = []  # IDs of removed system messages
         for node in tuple(self.document.findall(nodes.system_message)):
             if node['level'] < self.document.reporter.report_level:
                 node.parent.remove(node)
-                try:  # also remove id-entry
-                    del self.document.ids[node['ids'][0]]
-                except (IndexError):
-                    pass
+                for _id in node['ids']:
+                    self.document.ids.pop(_id, None)  # remove ID registration
+                    removed_ids.append(_id)
         for node in tuple(self.document.findall(nodes.problematic)):
-            if 'refid' in node and node['refid'] not in self.document.ids:
+            if 'refid' in node and node['refid'] in removed_ids:
                 node.parent.replace(node, nodes.Text(node.astext()))
         for node in self.document.findall(nodes.section):
             if "system-messages" in node['classes'] and len(node) == 1:

This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.