def str_zfill__Rope_ANY(space, w_self, w_width): node = w_self._node length = node.length() width = space.int_w(w_width) if length >= width: return w_self.create_if_subclassed() zero = rope.LiteralStringNode.PREBUILT[ord("0")] if length == 0: return W_RopeObject(rope.multiply(zero, width)) middle = width - length firstchar = node.getchar(0) if length > 0 and (firstchar == "+" or firstchar == "-"): return W_RopeObject( rope.rebalance( [ rope.LiteralStringNode.PREBUILT[ord(firstchar)], rope.multiply(zero, middle), rope.getslice_one(node, 1, length), ] ) ) else: middle = width - length return W_RopeObject(rope.concatenate(rope.multiply(zero, middle), node))
def unicode_center__RopeUnicode_ANY_ANY(space, w_self, w_width, w_fillchar): self = w_self._node length = self.length() width = space.int_w(w_width) fillchar = _to_unichar_w(space, w_fillchar) padding = width - length if padding < 0: return w_self.create_if_subclassed() offset = padding // 2 pre = rope.multiply(fillchar, offset) post = rope.multiply(fillchar, (padding - offset)) centered = rope.rebalance([pre, self, post]) return W_RopeUnicodeObject(centered)
def str_center__Rope_ANY_ANY(space, w_self, w_arg, w_fillchar): node = w_self._node length = node.length() arg = space.int_w(w_arg) fillchar = space.str_w(w_fillchar) if len(fillchar) != 1: raise OperationError(space.w_TypeError, space.wrap("center() argument 2 must be a single character")) d = arg - length if d > 0: offset = d // 2 + (d & arg & 1) fillcharnode = rope.LiteralStringNode.PREBUILT[ord(fillchar)] pre = rope.multiply(fillcharnode, offset) post = rope.multiply(fillcharnode, (d - offset)) centered = rope.rebalance([pre, node, post]) return W_RopeObject(centered) else: return w_self.create_if_subclassed()
def unicode_rjust__RopeUnicode_ANY_ANY(space, w_self, w_width, w_fillchar): self = w_self._node length = self.length() width = space.int_w(w_width) fillchar = _to_unichar_w(space, w_fillchar) padding = width - length if padding < 0: return w_self.create_if_subclassed() resultnode = rope.concatenate(rope.multiply(fillchar, padding), self) return W_RopeUnicodeObject(resultnode)
def unicode_zfill__RopeUnicode_ANY(space, w_self, w_width): self = w_self._node length = self.length() width = space.int_w(w_width) zero = rope.LiteralStringNode.PREBUILT[ord("0")] if self.length() == 0: return W_RopeUnicodeObject( rope.multiply(zero, width)) padding = width - length if padding <= 0: return w_self.create_if_subclassed() firstchar = self.getunichar(0) if firstchar in (u'+', u'-'): return W_RopeUnicodeObject(rope.rebalance( [rope.LiteralStringNode.PREBUILT[ord(firstchar)], rope.multiply(zero, padding), rope.getslice_one(self, 1, length)])) else: return W_RopeUnicodeObject(rope.concatenate( rope.multiply(zero, padding), self))
def unicode_expandtabs__RopeUnicode_ANY(space, w_self, w_tabsize): from pypy.objspace.std.ropeobject import _tabindent self = w_self._node tabsize = space.int_w(w_tabsize) splitted = rope.split(self, rope.LiteralStringNode.PREBUILT[ord('\t')]) last = splitted[0] expanded = [last] for i in range(1, len(splitted)): expanded.append(rope.multiply(rope.LiteralStringNode.PREBUILT[ord(" ")], _tabindent(last, tabsize))) last = splitted[i] expanded.append(last) return W_RopeUnicodeObject(rope.rebalance(expanded))
def str_ljust__Rope_ANY_ANY(space, w_self, w_arg, w_fillchar): u_arg = space.int_w(w_arg) selfnode = w_self._node fillchar = space.str_w(w_fillchar) if len(fillchar) != 1: raise OperationError(space.w_TypeError, space.wrap("rjust() argument 2 must be a single character")) d = u_arg - selfnode.length() if d > 0: fillchar = fillchar[0] # annotator hint: it's a single character resultnode = rope.concatenate(selfnode, rope.multiply(rope.LiteralStringNode.PREBUILT[ord(fillchar)], d)) return W_RopeObject(resultnode) else: return W_RopeObject(selfnode)
def unicode_expandtabs__RopeUnicode_ANY(space, w_self, w_tabsize): from pypy.objspace.std.ropeobject import _tabindent self = w_self._node tabsize = space.int_w(w_tabsize) splitted = rope.split(self, rope.LiteralStringNode.PREBUILT[ord('\t')]) last = splitted[0] expanded = [last] for i in range(1, len(splitted)): expanded.append( rope.multiply(rope.LiteralStringNode.PREBUILT[ord(" ")], _tabindent(last, tabsize))) last = splitted[i] expanded.append(last) return W_RopeUnicodeObject(rope.rebalance(expanded))
def str_zfill__Rope_ANY(space, w_self, w_width): node = w_self._node length = node.length() width = space.int_w(w_width) if length >= width: return w_self.create_if_subclassed() zero = rope.LiteralStringNode.PREBUILT[ord("0")] if length == 0: return W_RopeObject(rope.multiply(zero, width)) middle = width - length firstchar = node.getchar(0) if length > 0 and (firstchar == '+' or firstchar == '-'): return W_RopeObject( rope.rebalance([ rope.LiteralStringNode.PREBUILT[ord(firstchar)], rope.multiply(zero, middle), rope.getslice_one(node, 1, length) ])) else: middle = width - length return W_RopeObject(rope.concatenate(rope.multiply(zero, middle), node))
def unicode_expandtabs__RopeUnicode_ANY(space, w_self, w_tabsize): from pypy.objspace.std.ropeobject import _tabindent self = w_self._node tabsize = space.int_w(w_tabsize) splitted = rope.split(self, rope.LiteralStringNode.PREBUILT[ord("\t")]) last = splitted[0] expanded = [last] for i in range(1, len(splitted)): expanded.append(rope.multiply(rope.LiteralStringNode.PREBUILT[ord(" ")], _tabindent(last, tabsize))) last = splitted[i] expanded.append(last) try: return W_RopeUnicodeObject(rope.rebalance(expanded)) except OverflowError: raise OperationError(space.w_OverflowError, space.wrap("string too long"))
def str_expandtabs__Rope_ANY(space, w_self, w_tabsize): node = w_self._node length = node.length() if length == 0: return W_RopeObject.EMPTY tabsize = space.int_w(w_tabsize) splitted = rope.split(node, rope.LiteralStringNode.PREBUILT[ord("\t")]) last = splitted[0] expanded = [last] for i in range(1, len(splitted)): expanded.append(rope.multiply(rope.LiteralStringNode.PREBUILT[ord(" ")], _tabindent(last, tabsize))) last = splitted[i] expanded.append(last) return W_RopeObject(rope.rebalance(expanded))
def unicode_expandtabs__RopeUnicode_ANY(space, w_self, w_tabsize): from pypy.objspace.std.ropeobject import _tabindent self = w_self._node tabsize = space.int_w(w_tabsize) splitted = rope.split(self, rope.LiteralStringNode.PREBUILT[ord('\t')]) last = splitted[0] expanded = [last] for i in range(1, len(splitted)): expanded.append(rope.multiply(rope.LiteralStringNode.PREBUILT[ord(" ")], _tabindent(last, tabsize))) last = splitted[i] expanded.append(last) try: return W_RopeUnicodeObject(rope.rebalance(expanded)) except OverflowError: raise OperationError(space.w_OverflowError, space.wrap("string too long"))
def str_ljust__Rope_ANY_ANY(space, w_self, w_arg, w_fillchar): u_arg = space.int_w(w_arg) selfnode = w_self._node fillchar = space.str_w(w_fillchar) if len(fillchar) != 1: raise OperationError(space.w_TypeError, space.wrap("rjust() argument 2 must be a single character")) d = u_arg - selfnode.length() if d > 0: fillchar = fillchar[0] # annotator hint: it's a single character resultnode = rope.concatenate( selfnode, rope.multiply(rope.LiteralStringNode.PREBUILT[ord(fillchar)], d)) return W_RopeObject(resultnode) else: return W_RopeObject(selfnode)
def str_expandtabs__Rope_ANY(space, w_self, w_tabsize): node = w_self._node length = node.length() if length == 0: return W_RopeObject.EMPTY tabsize = space.int_w(w_tabsize) splitted = rope.split(node, rope.LiteralStringNode.PREBUILT[ord("\t")]) last = splitted[0] expanded = [last] for i in range(1, len(splitted)): expanded.append(rope.multiply(rope.LiteralStringNode.PREBUILT[ord(" ")], _tabindent(last, tabsize))) last = splitted[i] expanded.append(last) try: return W_RopeObject(rope.rebalance(expanded)) except OverflowError: raise OperationError(space.w_OverflowError, space.wrap("new string is too long"))
def str_expandtabs__Rope_ANY(space, w_self, w_tabsize): node = w_self._node length = node.length() if length == 0: return W_RopeObject.EMPTY tabsize = space.int_w(w_tabsize) splitted = rope.split(node, rope.LiteralStringNode.PREBUILT[ord("\t")]) last = splitted[0] expanded = [last] for i in range(1, len(splitted)): expanded.append(rope.multiply(rope.LiteralStringNode.PREBUILT[ord(" ")], _tabindent(last, tabsize))) last = splitted[i] expanded.append(last) try: return W_RopeObject(rope.rebalance(expanded)) except OverflowError: raise OperationError(space.w_OverflowError, space.wrap('new string is too long'))
if sl == 0: return W_RopeObject.EMPTY return W_RopeObject(rope.getslice(node, start, stop, step, sl)) def mul_string_times(space, w_str, w_times): try: mul = space.getindex_w(w_times, space.w_OverflowError) except OperationError, e: if e.match(space, space.w_TypeError): raise FailedToImplement raise if mul <= 0: return W_RopeObject.EMPTY node = w_str._node try: return W_RopeObject(rope.multiply(node, mul)) except OverflowError: raise OperationError(space.w_OverflowError, space.wrap("string too long")) def mul__Rope_ANY(space, w_str, w_times): return mul_string_times(space, w_str, w_times) def mul__ANY_Rope(space, w_times, w_str): return mul_string_times(space, w_str, w_times) def add__Rope_Rope(space, w_left, w_right): right = w_right._node left = w_left._node try: return W_RopeObject(rope.concatenate(left, right))
if sl == 0: return W_RopeObject.EMPTY return W_RopeObject(rope.getslice(node, start, stop, 1, sl)) def mul_string_times(space, w_str, w_times): try: mul = space.getindex_w(w_times, space.w_OverflowError) except OperationError, e: if e.match(space, space.w_TypeError): raise FailedToImplement raise if mul <= 0: return W_RopeObject.EMPTY node = w_str._node try: return W_RopeObject(rope.multiply(node, mul)) except OverflowError: raise OperationError(space.w_OverflowError, space.wrap("string too long")) def mul__Rope_ANY(space, w_str, w_times): return mul_string_times(space, w_str, w_times) def mul__ANY_Rope(space, w_times, w_str): return mul_string_times(space, w_str, w_times) def add__Rope_Rope(space, w_left, w_right): right = w_right._node left = w_left._node try: return W_RopeObject(rope.concatenate(left, right))
start, stop = normalize_simple_slice(space, length, w_start, w_stop) sl = stop - start if sl == 0: return W_RopeUnicodeObject.EMPTY return W_RopeUnicodeObject(rope.getslice(node, start, stop, 1, sl)) def mul__RopeUnicode_ANY(space, w_uni, w_times): try: times = space.getindex_w(w_times, space.w_OverflowError) except OperationError, e: if e.match(space, space.w_TypeError): raise FailedToImplement raise node = w_uni._node try: return W_RopeUnicodeObject(rope.multiply(node, times)) except OverflowError: raise OperationError(space.w_OverflowError, space.wrap("string too long")) def mul__ANY_RopeUnicode(space, w_times, w_uni): return mul__RopeUnicode_ANY(space, w_uni, w_times) def make_generic(funcname): def func(space, w_self): node = w_self._node if node.length() == 0: return space.w_False iter = rope.ItemIterator(node) for idx in range(node.length()):
sl = stop - start if sl == 0: return W_RopeUnicodeObject.EMPTY return W_RopeUnicodeObject(rope.getslice(node, start, stop, 1, sl)) def mul__RopeUnicode_ANY(space, w_uni, w_times): try: times = space.getindex_w(w_times, space.w_OverflowError) except OperationError, e: if e.match(space, space.w_TypeError): raise FailedToImplement raise node = w_uni._node try: return W_RopeUnicodeObject(rope.multiply(node, times)) except OverflowError: raise OperationError(space.w_OverflowError, space.wrap("string too long")) def mul__ANY_RopeUnicode(space, w_times, w_uni): return mul__RopeUnicode_ANY(space, w_uni, w_times) def make_generic(funcname): def func(space, w_self): node = w_self._node if node.length() == 0: return space.w_False iter = rope.ItemIterator(node)