From: Felix W. <fel...@us...> - 2004-07-24 14:13:46
|
Update of /cvsroot/docutils/docutils/docutils In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv2427 Modified Files: frontend.py io.py Log Message: xmlcharrefreplace backport Index: frontend.py =================================================================== RCS file: /cvsroot/docutils/docutils/docutils/frontend.py,v retrieving revision 1.63 retrieving revision 1.64 diff -u -d -r1.63 -r1.64 --- frontend.py 9 Jul 2004 15:17:31 -0000 1.63 +++ frontend.py 24 Jul 2004 14:13:38 -0000 1.64 @@ -77,10 +77,10 @@ try: codecs.lookup_error(value) except AttributeError: # prior to Python 2.3 - if value not in ('strict', 'ignore', 'replace'): + if value not in ('strict', 'ignore', 'replace', 'xmlcharrefreplace'): raise (LookupError( 'unknown encoding error handler: "%s" (choices: ' - '"strict", "ignore", or "replace")' % value), + '"strict", "ignore", "replace", or "xmlcharrefreplace")' % value), None, sys.exc_info()[2]) except LookupError: raise (LookupError( @@ -364,8 +364,8 @@ 'validator': validate_encoding_and_error_handler}), ('Specify the error handler for unencodable characters in ' 'the output. Acceptable values include "strict", "ignore", ' - '"replace", "backslashreplace" (in Python 2.3+), and ' - '"xmlcharrefreplace" (in Python 2.3+). Default is "strict". ' + '"replace", "xmlcharrefreplace", and ' + '"backslashreplace" (in Python 2.3+). Default is "strict". ' 'Usually specified as part of --output-encoding.', ['--output-encoding-error-handler'], {'default': 'strict', 'validator': validate_encoding_error_handler}), Index: io.py =================================================================== RCS file: /cvsroot/docutils/docutils/docutils/io.py,v retrieving revision 1.31 retrieving revision 1.32 diff -u -d -r1.31 -r1.32 --- io.py 20 Jun 2004 12:28:08 -0000 1.31 +++ io.py 24 Jul 2004 14:13:38 -0000 1.32 @@ -9,6 +9,8 @@ will exist for a variety of input/output mechanisms. """ +from __future__ import nested_scopes + __docformat__ = 'reStructuredText' import sys @@ -127,6 +129,16 @@ def encode(self, data): if self.encoding and self.encoding.lower() == 'unicode': return data + elif (self.error_handler == 'xmlcharrefreplace' and + sys.hexversion < 0x02030000): + # We are using xmlcharrefreplace on a Python version which + # doesn't support it. + def enc(x): + try: + return x.encode(self.encoding, 'strict') + except UnicodeError: + return '&#%s;' % str(ord(x)) + return ''.join(map(enc, data)) else: return data.encode(self.encoding, self.error_handler) |