Пример #1
0
def backslashreplace_errors(space, w_exc):
    check_exception(space, w_exc)
    if space.isinstance_w(w_exc, space.w_UnicodeEncodeError):
        obj = space.realunicode_w(space.getattr(w_exc, space.wrap('object')))
        start = space.int_w(space.getattr(w_exc, space.wrap('start')))
        w_end = space.getattr(w_exc, space.wrap('end'))
        end = space.int_w(w_end)
        builder = UnicodeBuilder()
        pos = start
        while pos < end:
            oc = ord(obj[pos])
            num = hex(oc)
            if (oc >= 0x10000):
                builder.append(u"\\U")
                zeros = 8
            elif (oc >= 0x100):
                builder.append(u"\\u")
                zeros = 4
            else:
                builder.append(u"\\x")
                zeros = 2
            lnum = len(num)
            nb = zeros + 2 - lnum # num starts with '0x'
            if nb > 0:
                builder.append_multiple_char(u'0', nb)
            builder.append_slice(unicode(num), 2, lnum)
            pos += 1
        return space.newtuple([space.wrap(builder.build()), w_end])
    else:
        raise oefmt(space.w_TypeError,
                    "don't know how to handle %T in error callback", w_exc)
Пример #2
0
def backslashreplace_errors(space, w_exc):
    check_exception(space, w_exc)
    if space.isinstance_w(w_exc, space.w_UnicodeEncodeError):
        obj = space.realunicode_w(space.getattr(w_exc, space.wrap('object')))
        start = space.int_w(space.getattr(w_exc, space.wrap('start')))
        w_end = space.getattr(w_exc, space.wrap('end'))
        end = space.int_w(w_end)
        builder = UnicodeBuilder()
        pos = start
        while pos < end:
            oc = ord(obj[pos])
            num = hex(oc)
            if (oc >= 0x10000):
                builder.append(u"\\U")
                zeros = 8
            elif (oc >= 0x100):
                builder.append(u"\\u")
                zeros = 4
            else:
                builder.append(u"\\x")
                zeros = 2
            lnum = len(num)
            nb = zeros + 2 - lnum  # num starts with '0x'
            if nb > 0:
                builder.append_multiple_char(u'0', nb)
            builder.append_slice(unicode(num), 2, lnum)
            pos += 1
        return space.newtuple([space.wrap(builder.build()), w_end])
    else:
        raise oefmt(space.w_TypeError,
                    "don't know how to handle %T in error callback", w_exc)
Пример #3
0
 def func():
     s = UnicodeBuilder(32)
     s.append(u'a')
     s.append(u'abc')
     s.append(u'abcdef')
     s.append_slice(u'abc', 1, 2)
     s.append_multiple_char(u'u', 40)
     return s.build()
Пример #4
0
 def func():
     s = UnicodeBuilder(32)
     s.append(u'a')
     s.append(u'abc')
     s.append(u'abcdef')
     s.append_slice(u'abc', 1, 2)
     s.append_multiple_char(u'u', 40)
     return s.build()
Пример #5
0
def test_unicode_builder():
    s = UnicodeBuilder()
    s.append(u'a')
    s.append(u'abc')
    s.append_slice(u'abcdef', 1, 2)
    assert s.getlength() == len('aabcb')
    s.append_multiple_char(u'd', 4)
    assert s.build() == 'aabcbdddd'
    assert isinstance(s.build(), unicode)
Пример #6
0
def test_unicode_builder():
    s = UnicodeBuilder()
    s.append(u'a')
    s.append(u'abc')
    s.append_slice(u'abcdef', 1, 2)
    assert s.getlength() == len('aabcb')
    s.append_multiple_char(u'd', 4)
    result = s.build()
    assert result == 'aabcbdddd'
    assert isinstance(result, unicode)
Пример #7
0
def test_unicode_builder():
    s = UnicodeBuilder()
    s.append(u"a")
    s.append(u"abc")
    s.append_slice(u"abcdef", 1, 2)
    assert s.getlength() == len("aabcb")
    s.append_multiple_char(u"d", 4)
    result = s.build()
    assert result == "aabcbdddd"
    assert isinstance(result, unicode)
Пример #8
0
 def f(n):
     while n > 0:
         jitdriver.jit_merge_point(n=n)
         sb = UnicodeBuilder()
         sb.append_multiple_char(u"x", 35)
         s = sb.build()
         if len(s) != 35: raise ValueError
         for c in s:
             if c != u"x":
                 raise ValueError
         n -= 1
     return n
Пример #9
0
 def f(n):
     while n > 0:
         jitdriver.jit_merge_point(n=n)
         sb = UnicodeBuilder()
         sb.append_multiple_char(u"x", 5)
         s = sb.build()
         if len(s) != 5: raise ValueError
         if s[0] != u"x": raise ValueError
         if s[1] != u"x": raise ValueError
         if s[2] != u"x": raise ValueError
         if s[3] != u"x": raise ValueError
         if s[4] != u"x": raise ValueError
         n -= 1
     return n
Пример #10
0
 def entry_point(argv):
     b = UnicodeBuilder(32)
     for x in to_do:
         if x < 1500:
             print "``%s''" % str(b.build())
             if x < 1000:
                 b = UnicodeBuilder(32)
         elif x < 20000:
             b.append(unichr(32 + (x & 63)))
         elif x < 30000:
             b.append_multiple_char(unichr(32 + (x & 63)), x % 93)
         else:
             b.append(unicode(str(x)))
     return 0
Пример #11
0
 def entry_point(argv):
     b = UnicodeBuilder(32)
     for x in to_do:
         if x < 1500:
             print "``%s''" % str(b.build())
             if x < 1000:
                 b = UnicodeBuilder(32)
         elif x < 20000:
             b.append(unichr(32 + (x & 63)))
         elif x < 30000:
             b.append_multiple_char(unichr(32 + (x & 63)), x % 93)
         else:
             b.append(unicode(str(x)))
     return 0