ExtendedEsisBuilder.push():  Override inherited definition.  We don't
	want to push nodes into the document, but into a document
	fragment, since we're not necesarily working with something
	that's well-formed.
diff --git a/Doc/tools/sgmlconv/esistools.py b/Doc/tools/sgmlconv/esistools.py
index f44c13c..3e0ffc3 100644
--- a/Doc/tools/sgmlconv/esistools.py
+++ b/Doc/tools/sgmlconv/esistools.py
@@ -4,6 +4,8 @@
 import re
 import string
 import sys
+import xml.dom.core
+import xml.dom.esis_builder
 
 
 _data_rx = re.compile(r"[^\\][^\\]*")
@@ -37,14 +39,12 @@
     return string.join(map(_charmap.get, s), '')
 
 
-import xml.dom.esis_builder
-
-
 class ExtendedEsisBuilder(xml.dom.esis_builder.EsisBuilder):
     def __init__(self, *args, **kw):
         self.__empties = {}
         self.__is_empty = 0
         apply(xml.dom.esis_builder.EsisBuilder.__init__, (self,) + args, kw)
+        self.fragment = self.document.createDocumentFragment()
 
     def feed(self, data):
         for line in string.split(data, '\n'):
@@ -76,5 +76,19 @@
             else:
                 sys.stderr.write('Unknown event: %s\n' % line)
 
+    def push(self, node):
+        "Add node to current node and move to new node."
+
+        nodetype = node.get_nodeType()
+        if self.current_element:
+            self.current_element.insertBefore(node, None)
+        elif nodetype == xml.dom.core.TEXT_NODE:
+            if string.strip(node.get_nodeValue()):
+                self.fragment.appendChild(node)
+        else:
+            self.fragment.appendChild(node)
+        if nodetype == xml.dom.core.ELEMENT_NODE:
+            self.current_element = node
+        
     def get_empties(self):
         return self.__empties.keys()