[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