[Python-checkins] python/dist/src/Lib/xml/sax saxutils.py, 1.21.10.1, 1.21.10.2

loewis at users.sourceforge.net loewis at users.sourceforge.net
Wed May 5 22:22:25 EDT 2004


Update of /cvsroot/python/python/dist/src/Lib/xml/sax
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv11692/Lib/xml/sax

Modified Files:
      Tag: release23-maint
	saxutils.py 
Log Message:
Consider output encoding in XMLGenerator. Fixes #938076.


Index: saxutils.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/xml/sax/saxutils.py,v
retrieving revision 1.21.10.1
retrieving revision 1.21.10.2
diff -C2 -d -r1.21.10.1 -r1.21.10.2
*** saxutils.py	6 May 2004 02:03:13 -0000	1.21.10.1
--- saxutils.py	6 May 2004 02:22:23 -0000	1.21.10.2
***************
*** 13,16 ****
--- 13,25 ----
      _StringTypes = [types.StringType]
  
+ # See whether the xmlcharrefreplace error handler is
+ # supported
+ try:
+     from codecs import xmlcharrefreplace_errors
+     _error_handling = "xmlcharrefreplace"
+     del xmlcharrefreplace_errors
+ except ImportError:
+     _error_handling = "strict"
+ 
  def __dict_replace(s, d):
      """Replace substrings of a string using a dictionary."""
***************
*** 84,91 ****
          self._encoding = encoding
  
      # ContentHandler methods
  
      def startDocument(self):
!         self._out.write('<?xml version="1.0" encoding="%s"?>\n' %
                          self._encoding)
  
--- 93,106 ----
          self._encoding = encoding
  
+     def _write(self, text):
+         if isinstance(text, str):
+             self._out.write(text)
+         else:
+             self._out.write(text.encode(self._encoding, _error_handling))
+ 
      # ContentHandler methods
  
      def startDocument(self):
!         self._write('<?xml version="1.0" encoding="%s"?>\n' %
                          self._encoding)
  
***************
*** 100,110 ****
  
      def startElement(self, name, attrs):
!         self._out.write('<' + name)
          for (name, value) in attrs.items():
!             self._out.write(' %s=%s' % (name, quoteattr(value)))
!         self._out.write('>')
  
      def endElement(self, name):
!         self._out.write('</%s>' % name)
  
      def startElementNS(self, name, qname, attrs):
--- 115,125 ----
  
      def startElement(self, name, attrs):
!         self._write('<' + name)
          for (name, value) in attrs.items():
!             self._write(' %s=%s' % (name, quoteattr(value)))
!         self._write('>')
  
      def endElement(self, name):
!         self._write('</%s>' % name)
  
      def startElementNS(self, name, qname, attrs):
***************
*** 115,128 ****
              # else try to restore the original prefix from the namespace
              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, quoteattr(value)))
!         self._out.write('>')
  
      def endElementNS(self, name, qname):
--- 130,143 ----
              # else try to restore the original prefix from the namespace
              name = self._current_context[name[0]] + ":" + name[1]
!         self._write('<' + name)
  
          for pair in self._undeclared_ns_maps:
!             self._write(' xmlns:%s="%s"' % pair)
          self._undeclared_ns_maps = []
  
          for (name, value) in attrs.items():
              name = self._current_context[name[0]] + ":" + name[1]
!             self._write(' %s=%s' % (name, quoteattr(value)))
!         self._write('>')
  
      def endElementNS(self, name, qname):
***************
*** 131,144 ****
          else:
              name = self._current_context[name[0]] + ":" + name[1]
!         self._out.write('</%s>' % name)
  
      def characters(self, content):
!         self._out.write(escape(content))
  
      def ignorableWhitespace(self, content):
!         self._out.write(content)
  
      def processingInstruction(self, target, data):
!         self._out.write('<?%s %s?>' % (target, data))
  
  
--- 146,159 ----
          else:
              name = self._current_context[name[0]] + ":" + name[1]
!         self._write('</%s>' % name)
  
      def characters(self, content):
!         self._write(escape(content))
  
      def ignorableWhitespace(self, content):
!         self._write(content)
  
      def processingInstruction(self, target, data):
!         self._write('<?%s %s?>' % (target, data))
  
  




More information about the Python-checkins mailing list