mercurial/utils/stringutil.py
changeset 38264 fbb2eddea4d2
parent 38261 f3033692ccef
child 38474 96f65bdf0bf4
equal deleted inserted replaced
38263:dbf31732ef64 38264:fbb2eddea4d2
    47 
    47 
    48 def prettyrepr(o):
    48 def prettyrepr(o):
    49     """Pretty print a representation of a possibly-nested object"""
    49     """Pretty print a representation of a possibly-nested object"""
    50     lines = []
    50     lines = []
    51     rs = pycompat.byterepr(o)
    51     rs = pycompat.byterepr(o)
    52     p = 0
    52     p0 = p1 = 0
    53     while p < len(rs):
    53     while p0 < len(rs):
    54         q = rs.find('<', p + 1)
    54         # '... field=<type ... field=<type ...'
    55         if q < 0:
    55         #      ~~~~~~~~~~~~~~~~
    56             q = len(rs)
    56         #      p0    p1        q0    q1
    57         l = rs.count('<', 0, p) - rs.count('>', 0, p)
    57         q0 = -1
       
    58         q1 = rs.find('<', p1 + 1)
       
    59         if q1 < 0:
       
    60             q1 = len(rs)
       
    61         elif q1 > p1 + 1 and rs.startswith('=', q1 - 1):
       
    62             # backtrack for ' field=<'
       
    63             q0 = rs.rfind(' ', p1 + 1, q1 - 1)
       
    64         if q0 < 0:
       
    65             q0 = q1
       
    66         else:
       
    67             q0 += 1  # skip ' '
       
    68         l = rs.count('<', 0, p0) - rs.count('>', 0, p0)
    58         assert l >= 0
    69         assert l >= 0
    59         lines.append((l, rs[p:q].rstrip()))
    70         lines.append((l, rs[p0:q0].rstrip()))
    60         p = q
    71         p0, p1 = q0, q1
    61     return '\n'.join('  ' * l + s for l, s in lines)
    72     return '\n'.join('  ' * l + s for l, s in lines)
    62 
    73 
    63 def binary(s):
    74 def binary(s):
    64     """return true if a string is binary data"""
    75     """return true if a string is binary data"""
    65     return bool(s and '\0' in s)
    76     return bool(s and '\0' in s)