[pypy-svn] r12039 - pypy/dist/pypy/lib

ale at codespeak.net ale at codespeak.net
Sat May 7 00:43:50 CEST 2005


Author: ale
Date: Sat May  7 00:43:50 2005
New Revision: 12039

Modified:
   pypy/dist/pypy/lib/_codecs.py
Log:
Some more test are passing (19 out of 26 tests in test_callbacks.py and 4 out 6 in test_codecs.py)

Modified: pypy/dist/pypy/lib/_codecs.py
==============================================================================
--- pypy/dist/pypy/lib/_codecs.py	(original)
+++ pypy/dist/pypy/lib/_codecs.py	Sat May  7 00:43:50 2005
@@ -34,7 +34,7 @@
 Copyright (c) Corporation for National Research Initiatives.
 
 """
-from pypy.lib.unicodecodec import *
+from unicodecodec import *
 
 #/* --- Registry ----------------------------------------------------------- */
 codec_search_path = []
@@ -107,7 +107,6 @@
     """None
     """
     res = PyUnicode_EncodeLatin1(obj,len(obj),errors)
-    #print res
     return res, len(res)
 # XXX MBCS codec might involve ctypes ?
 def mbcs_decode():
@@ -131,30 +130,31 @@
 def utf_8_decode( data,errors='strict',final=None):
     """None
     """
-    res = PyUnicode_DecodeUTF8Stateful(data, size, errors, final)
+    res = PyUnicode_DecodeUTF8Stateful(data, len(data), errors, final)
     return res,len(res)
-# XXX
+
 def raw_unicode_escape_decode( data,errors='strict'):
     """None
     """
-    pass
+    res = PyUnicode_DecodeRawUnicodeEscape(data, len(data), errors)
+    return res,len(res)
 
 def utf_7_decode( data,errors='strict'):
     """None
     """
     unistr = PyUnicode_DecodeUTF7(data,errors='strict')
     return unistr,len(unistr)
-# XXX
+# XXX unicode_escape_encode
 def unicode_escape_encode( obj,errors='strict'):
     """None
     """
     pass
-# XXX
+# XXX latin_1_decode
 def latin_1_decode( data,errors='strict'):
     """None
     """
     pass
-# XXX
+# XXX utf_16_decode
 def utf_16_decode( data,errors='strict'):
     """None
     """
@@ -186,12 +186,12 @@
         return obj, len(obj)
     else:
         return PyUnicode_FromUnicode(obj,size),size
-# XXX
+# XXX utf_16_ex_decode
 def utf_16_ex_decode( data,errors='strict'):
     """None
     """
     pass
-# XXX Check if this is right
+# XXX escape_decode Check if this is right
 def escape_decode(data,errors='strict'):
     """None
     """
@@ -254,12 +254,12 @@
     """
     res = PyUnicode_EncodeUTF8(obj,len(obj),errors)
     return res,len(res)
-# XXX
+# XXX utf_16_le_encode
 def utf_16_le_encode( obj,errors='strict'):
     """None
     """
     pass
-# XXX
+# XXX utf_16_be_encode
 def utf_16_be_encode( obj,errors='strict'):
     """None
     """
@@ -272,12 +272,12 @@
         return unistr,len(unistr)
     else:
         return unicode(unistr),len(unistr)
-# XXX
+# XXX utf_16_le_decode
 def utf_16_le_decode( data,errors='strict'):
     """None
     """
     pass
-# XXX
+# XXX utf_16_be_decode
 def utf_16_be_decode( data,errors='strict'):
     """None
     """
@@ -295,18 +295,23 @@
     else:
         raise TypeError("don't know how to handle %.400s in error callback"%exc)
 
+Py_UNICODE_REPLACEMENT_CHARACTER = u"\ufffd"
+
 def replace_errors(exc):
-    if isinstance(exc,(UnicodeDecodeError,UnicodeEncodeError)):
+    if isinstance(exc,UnicodeEncodeError):
         return u'?'*(exc.end-exc.start),exc.end
+    elif isinstance(exc,(UnicodeTranslateError,UnicodeDecodeError)):
+        return Py_UNICODE_REPLACEMENT_CHARACTER*(exc.end-exc.start),exc.end
     else:
         raise TypeError("don't know how to handle %.400s in error callback"%exc)
 
 def xmlcharrefreplace_errors(exc):
     if isinstance(exc,UnicodeEncodeError):
-        res = ['&#']
+        res = []
         for ch in exc.object[exc.start:exc.end]:
-            res.append(str(ord(ch)))
-        res.append(';')
+            res += '&#'
+            res += str(ord(ch))
+            res += ';'
         return ''.join(res),exc.end
     else:
         raise TypeError("don't know how to handle %.400s in error callback"%type(exc))
@@ -314,7 +319,6 @@
 def backslashreplace_errors(exc):
     if isinstance(exc,UnicodeEncodeError):
         p=[]
-        #print exc.start,exc.end
         for c in exc.object[exc.start:exc.end]:
             p.append('\\')
             oc = ord(c)



More information about the Pypy-commit mailing list