Merged revisions 71414 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk

........
  r71414 | r.david.murray | 2009-04-09 17:54:50 -0400 (Thu, 09 Apr 2009) | 3 lines

  Issue #2170: refactored xml.dom.minidom.normalize, increasing both
  its clarity and its speed.
........
diff --git a/Lib/xml/dom/minidom.py b/Lib/xml/dom/minidom.py
index 489ae52..77a44f5 100644
--- a/Lib/xml/dom/minidom.py
+++ b/Lib/xml/dom/minidom.py
@@ -179,34 +179,27 @@
         L = []
         for child in self.childNodes:
             if child.nodeType == Node.TEXT_NODE:
-                data = child.data
-                if data and L and L[-1].nodeType == child.nodeType:
+                if not child.data:
+                    # empty text node; discard
+                    if L:
+                        L[-1].nextSibling = child.nextSibling
+                    if child.nextSibling:
+                        child.nextSibling.previousSibling = child.previousSibling
+                    child.unlink()
+                elif L and L[-1].nodeType == child.nodeType:
                     # collapse text node
                     node = L[-1]
                     node.data = node.data + child.data
                     node.nextSibling = child.nextSibling
+                    if child.nextSibling:
+                        child.nextSibling.previousSibling = node
                     child.unlink()
-                elif data:
-                    if L:
-                        L[-1].nextSibling = child
-                        child.previousSibling = L[-1]
-                    else:
-                        child.previousSibling = None
+                else:
                     L.append(child)
-                else:
-                    # empty text node; discard
-                    child.unlink()
             else:
-                if L:
-                    L[-1].nextSibling = child
-                    child.previousSibling = L[-1]
-                else:
-                    child.previousSibling = None
                 L.append(child)
                 if child.nodeType == Node.ELEMENT_NODE:
                     child.normalize()
-        if L:
-            L[-1].nextSibling = None
         self.childNodes[:] = L
 
     def cloneNode(self, deep):