Lichen

Change of lib/__builtins__/str.py

800:6097bc0ef5ec
lib/__builtins__/str.py
     1.1 --- a/lib/__builtins__/str.py	Mon Apr 03 01:37:06 2017 +0200
     1.2 +++ b/lib/__builtins__/str.py	Mon Apr 03 02:24:46 2017 +0200
     1.3 @@ -22,7 +22,8 @@
     1.4  from __builtins__.operator import _negate
     1.5  from __builtins__.sequence import hashable, itemaccess
     1.6  from __builtins__.types import check_int
     1.7 -from native import str_add, str_lt, str_gt, str_eq, str_ord, \
     1.8 +from native import isinstance as _isinstance, \
     1.9 +                   str_add, str_lt, str_gt, str_eq, str_ord, \
    1.10                     str_substr
    1.11  
    1.12  WHITESPACE = (" ", "\f", "\n", "\r", "\t")
    1.13 @@ -209,7 +210,47 @@
    1.14  
    1.15          return self._binary_op_rev(str_add, other, True)
    1.16  
    1.17 -    def __mod__(self, other): pass
    1.18 +    def __mod__(self, other):
    1.19 +
    1.20 +        "Format 'other' using this string."
    1.21 +
    1.22 +        if not _isinstance(other, tuple):
    1.23 +            other = [other]
    1.24 +
    1.25 +        i = 0
    1.26 +        first = True
    1.27 +        b = buffer()
    1.28 +
    1.29 +        for s in self.split("%"):
    1.30 +            if first:
    1.31 +                b.append(s)
    1.32 +                first = False
    1.33 +                continue
    1.34 +
    1.35 +            # Handle format codes.
    1.36 +            # NOTE: To be completed.
    1.37 +
    1.38 +            if s.startswith("%"):
    1.39 +                b.append(s)
    1.40 +
    1.41 +            elif s.startswith("s"):
    1.42 +                b.append(str(other[i]))
    1.43 +                b.append(s[1:])
    1.44 +                i += 1
    1.45 +
    1.46 +            elif s.startswith("r"):
    1.47 +                b.append(repr(other[i]))
    1.48 +                b.append(s[1:])
    1.49 +                i += 1
    1.50 +
    1.51 +            # Unrecognised code: probably just a stray %.
    1.52 +
    1.53 +            else:
    1.54 +                b.append("%")
    1.55 +                b.append(s)
    1.56 +
    1.57 +        return str(b)
    1.58 +
    1.59      def __rmod__(self, other): pass
    1.60  
    1.61      def __mul__(self, other):