[Python-checkins] CVS: python/dist/src/Lib/xml/sax saxutils.py,1.3,1.4

Lars Marius Garshol python-dev@python.org
Thu, 21 Sep 2000 01:25:31 -0700


Update of /cvsroot/python/python/dist/src/Lib/xml/sax
In directory slayer.i.sourceforge.net:/tmp/cvs-serv3562

Modified Files:
	saxutils.py 
Log Message:
Updated XMLGenerator to new DocumentHandler interface (patch 101572).


Index: saxutils.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/xml/sax/saxutils.py,v
retrieving revision 1.3
retrieving revision 1.4
diff -C2 -r1.3 -r1.4
*** saxutils.py	2000/09/18 17:40:22	1.3
--- saxutils.py	2000/09/21 08:25:28	1.4
***************
*** 24,28 ****
  class XMLGenerator(handler.ContentHandler):
  
!     def __init__(self, out=None):
          if out is None:
              import sys
--- 24,28 ----
  class XMLGenerator(handler.ContentHandler):
  
!     def __init__(self, out=None, encoding="iso-8859-1"):
          if out is None:
              import sys
***************
*** 30,58 ****
          handler.ContentHandler.__init__(self)
          self._out = out
  
      # ContentHandler methods
  
      def startDocument(self):
!         self._out.write('<?xml version="1.0" encoding="iso-8859-1"?>\n')
  
      def startPrefixMapping(self, prefix, uri):
!         pass
  
      def endPrefixMapping(self, prefix):
!         pass
  
      def startElement(self, name, attrs):
-         if type(name) is type(()):
-             uri, localname, prefix = name
-             name = "%s:%s"%(prefix,localname)
          self._out.write('<' + name)
          for (name, value) in attrs.items():
              self._out.write(' %s="%s"' % (name, escape(value)))
          self._out.write('>')
! 
      def endElement(self, name):
-         # FIXME: not namespace friendly yet
          self._out.write('</%s>' % name)
  
      def characters(self, content):
          self._out.write(escape(content))
--- 30,71 ----
          handler.ContentHandler.__init__(self)
          self._out = out
+         self._ns_contexts = [{}] # contains uri -> prefix dicts
+         self._current_context = self._ns_contexts[-1]
+         self._encoding = encoding
  
      # ContentHandler methods
  
      def startDocument(self):
!         self._out.write('<?xml version="1.0" encoding="%s"?>\n' %
!                         self._encoding)
  
      def startPrefixMapping(self, prefix, uri):
!         self._ns_contexts.append(self._current_context.copy())
!         self._current_context[uri] = prefix
  
      def endPrefixMapping(self, prefix):
!         del self._current_context[-1]
  
      def startElement(self, name, attrs):
          self._out.write('<' + name)
          for (name, value) in attrs.items():
              self._out.write(' %s="%s"' % (name, escape(value)))
          self._out.write('>')
!         
      def endElement(self, name):
          self._out.write('</%s>' % name)
  
+     def startElementNS(self, name, qname, attrs):
+         name = self._current_context[name[0]] + ":" + name[1]
+         self._out.write('<' + name)
+         for (name, value) in attrs.items():
+             name = self._current_context[name[0]] + ":" + name[1]
+             self._out.write(' %s="%s"' % (name, escape(value)))
+         self._out.write('>')
+ 
+     def endElementNS(self, name, qname):
+         name = self._current_context[name[0]] + ":" + name[1]
+         self._out.write('</%s>' % name)
+         
      def characters(self, content):
          self._out.write(escape(content))
***************
*** 103,109 ****
      def startElement(self, name, attrs):
          self._cont_handler.startElement(name, attrs)
  
!     def endElement(self, name, qname):
!         self._cont_handler.endElement(name, qname)
  
      def characters(self, content):
--- 116,128 ----
      def startElement(self, name, attrs):
          self._cont_handler.startElement(name, attrs)
+ 
+     def endElement(self, name):
+         self._cont_handler.endElement(name)
+ 
+     def startElementNS(self, name, qname, attrs):
+         self._cont_handler.startElement(name, attrs)
  
!     def endElementNS(self, name, qname):
!         self._cont_handler.endElementNS(name, qname)
  
      def characters(self, content):