Bug fix to namespace handling in XMLGenerator (now adds declarations).
Bug fixes to XMLFilterBase (wrong ignorableWhitespace signature and
did not inherit set*Handler methods from XMLReader.)
diff --git a/Lib/xml/sax/saxutils.py b/Lib/xml/sax/saxutils.py
index d288e9d..fe13bde 100644
--- a/Lib/xml/sax/saxutils.py
+++ b/Lib/xml/sax/saxutils.py
@@ -4,7 +4,7 @@
 """
 
 import handler
-
+import xmlreader
 
 def escape(data, entities={}):
     """Escape &, <, and > in a string of data.
@@ -31,6 +31,7 @@
         self._out = out
         self._ns_contexts = [{}] # contains uri -> prefix dicts
         self._current_context = self._ns_contexts[-1]
+        self._undeclared_ns_maps = []
         self._encoding = encoding
 
     # ContentHandler methods
@@ -42,9 +43,11 @@
     def startPrefixMapping(self, prefix, uri):
         self._ns_contexts.append(self._current_context.copy())
         self._current_context[uri] = prefix
+        self._undeclared_ns_maps.append((prefix, uri))
 
     def endPrefixMapping(self, prefix):
-        del self._current_context[-1]
+        self._current_context = self._ns_contexts[-1]
+        del self._ns_contexts[-1]
 
     def startElement(self, name, attrs):
         self._out.write('<' + name)
@@ -58,6 +61,11 @@
     def startElementNS(self, name, qname, attrs):
         name = self._current_context[name[0]] + ":" + name[1]
         self._out.write('<' + name)
+
+        for pair in self._undeclared_ns_maps:
+            self._out.write(' xmlns:%s="%s"' % pair)
+        self._undeclared_ns_maps = []
+        
         for (name, value) in attrs.items():
             name = self._current_context[name[0]] + ":" + name[1]
             self._out.write(' %s="%s"' % (name, escape(value)))
@@ -77,7 +85,7 @@
         self._out.write('<?%s %s?>' % (target, data))
 
 
-class XMLFilterBase:
+class XMLFilterBase(xmlreader.XMLReader):
     """This class is designed to sit between an XMLReader and the
     client application's event handlers.  By default, it does nothing
     but pass requests up to the reader and events on to the handlers
@@ -128,8 +136,8 @@
     def characters(self, content):
         self._cont_handler.characters(content)
 
-    def ignorableWhitespace(self, chars, start, end):
-        self._cont_handler.ignorableWhitespace(chars, start, end)
+    def ignorableWhitespace(self, chars):
+        self._cont_handler.ignorableWhitespace(chars)
 
     def processingInstruction(self, target, data):
         self._cont_handler.processingInstruction(target, data)