[pypy-svn] r48491 - in pypy/branch/unicode-objspace/pypy/objspace/std: . test

cfbolz at codespeak.net cfbolz at codespeak.net
Sat Nov 10 02:26:22 CET 2007


Author: cfbolz
Date: Sat Nov 10 02:26:22 2007
New Revision: 48491

Modified:
   pypy/branch/unicode-objspace/pypy/objspace/std/test/test_unicodeobject.py
   pypy/branch/unicode-objspace/pypy/objspace/std/unicodeobject.py
Log:
move expandtabs from app to interplevel


Modified: pypy/branch/unicode-objspace/pypy/objspace/std/test/test_unicodeobject.py
==============================================================================
--- pypy/branch/unicode-objspace/pypy/objspace/std/test/test_unicodeobject.py	(original)
+++ pypy/branch/unicode-objspace/pypy/objspace/std/test/test_unicodeobject.py	Sat Nov 10 02:26:22 2007
@@ -334,3 +334,23 @@
         assert u'hello'.endswith((u'he', u'hell'), 0, 4)
         raises(TypeError, u'hello'.endswith, (42,))
 
+    def test_expandtabs(self):
+        assert u'abc\rab\tdef\ng\thi'.expandtabs() ==    u'abc\rab      def\ng       hi'
+        assert u'abc\rab\tdef\ng\thi'.expandtabs(8) ==   u'abc\rab      def\ng       hi'
+        assert u'abc\rab\tdef\ng\thi'.expandtabs(4) ==   u'abc\rab  def\ng   hi'
+        assert u'abc\r\nab\tdef\ng\thi'.expandtabs(4) == u'abc\r\nab  def\ng   hi'
+        assert u'abc\rab\tdef\ng\thi'.expandtabs() ==    u'abc\rab      def\ng       hi'
+        assert u'abc\rab\tdef\ng\thi'.expandtabs(8) ==   u'abc\rab      def\ng       hi'
+        assert u'abc\r\nab\r\ndef\ng\r\nhi'.expandtabs(4) == u'abc\r\nab\r\ndef\ng\r\nhi'
+
+        s = u'xy\t'
+        assert s.expandtabs() =='xy      '
+        
+        s = u'\txy\t'
+        assert s.expandtabs() =='        xy      '
+        assert s.expandtabs(1) ==' xy '
+        assert s.expandtabs(2) =='  xy  '
+        assert s.expandtabs(3) =='   xy '
+        
+        assert u'xy'.expandtabs() =='xy'
+        assert u''.expandtabs() ==''

Modified: pypy/branch/unicode-objspace/pypy/objspace/std/unicodeobject.py
==============================================================================
--- pypy/branch/unicode-objspace/pypy/objspace/std/unicodeobject.py	(original)
+++ pypy/branch/unicode-objspace/pypy/objspace/std/unicodeobject.py	Sat Nov 10 02:26:22 2007
@@ -699,7 +699,7 @@
     parts.append(self[index:])
     return parts
 
-def _split_with(self, with_, maxsplit):
+def _split_with(self, with_, maxsplit=-1):
     parts = []
     start = 0
     end = len(self)
@@ -729,25 +729,6 @@
 app = gateway.applevel(r'''
 import sys
 
-def unicode_expandtabs__Unicode_ANY(self, tabsize):
-    parts = self.split(u'\t')
-    result = [ parts[0] ]
-    prevsize = 0
-    for ch in parts[0]:
-        prevsize += 1
-        if ch in (u"\n", u"\r"):
-            prevsize = 0
-    for i in range(1, len(parts)):
-        pad = tabsize - prevsize % tabsize
-        result.append(u' ' * pad)
-        nextpart = parts[i]
-        result.append(nextpart)
-        prevsize = 0
-        for ch in nextpart:
-            prevsize += 1
-            if ch in (u"\n", u"\r"):
-                prevsize = 0
-    return u''.join(result)
 
 def unicode_translate__Unicode_ANY(self, table):
     result = []
@@ -790,7 +771,6 @@
 
 
 
-unicode_expandtabs__Unicode_ANY = app.interphook('unicode_expandtabs__Unicode_ANY')
 unicode_translate__Unicode_ANY = app.interphook('unicode_translate__Unicode_ANY')
 unicode_encode__Unicode_ANY_ANY = app.interphook('unicode_encode__Unicode_ANY_ANY')
 
@@ -823,6 +803,29 @@
                                space.wrap(unistr[pos+len(unisub):])])
 
 
+def unicode_expandtabs__Unicode_ANY(space, w_self, w_tabsize):
+    self = w_self._value
+    tabsize  = space.int_w(w_tabsize)
+    parts = _split_with(self, u'\t')
+    result = [parts[0]]
+    prevsize = 0
+    for ch in parts[0]:
+        prevsize += 1
+        if ch == u"\n" or ch ==  u"\r":
+            prevsize = 0
+    for i in range(1, len(parts)):
+        pad = tabsize - prevsize % tabsize
+        result.append(u' ' * pad)
+        nextpart = parts[i]
+        result.append(nextpart)
+        prevsize = 0
+        for ch in nextpart:
+            prevsize += 1
+            if ch in (u"\n", u"\r"):
+                prevsize = 0
+    return space.wrap(u''.join(result))
+
+
 # Move this into the _codecs module as 'unicodeescape_string (Remember to cater for quotes)'
 def repr__Unicode(space, w_unicode):
     hexdigits = "0123456789abcdef"



More information about the Pypy-commit mailing list