mercurial/ui.py
changeset 31156 e5aab82edf7f
parent 31128 0bb3089fe735
child 31177 a7cabac20b62
equal deleted inserted replaced
31155:8266802f0fa4 31156:e5aab82edf7f
   567         ['this', 'is', 'a small', 'test']
   567         ['this', 'is', 'a small', 'test']
   568         """
   568         """
   569 
   569 
   570         def _parse_plain(parts, s, offset):
   570         def _parse_plain(parts, s, offset):
   571             whitespace = False
   571             whitespace = False
   572             while offset < len(s) and (s[offset].isspace() or s[offset] == ','):
   572             while offset < len(s) and (s[offset:offset + 1].isspace()
       
   573                                        or s[offset:offset + 1] == ','):
   573                 whitespace = True
   574                 whitespace = True
   574                 offset += 1
   575                 offset += 1
   575             if offset >= len(s):
   576             if offset >= len(s):
   576                 return None, parts, offset
   577                 return None, parts, offset
   577             if whitespace:
   578             if whitespace:
   578                 parts.append('')
   579                 parts.append('')
   579             if s[offset] == '"' and not parts[-1]:
   580             if s[offset:offset + 1] == '"' and not parts[-1]:
   580                 return _parse_quote, parts, offset + 1
   581                 return _parse_quote, parts, offset + 1
   581             elif s[offset] == '"' and parts[-1][-1] == '\\':
   582             elif s[offset:offset + 1] == '"' and parts[-1][-1] == '\\':
   582                 parts[-1] = parts[-1][:-1] + s[offset]
   583                 parts[-1] = parts[-1][:-1] + s[offset:offset + 1]
   583                 return _parse_plain, parts, offset + 1
   584                 return _parse_plain, parts, offset + 1
   584             parts[-1] += s[offset]
   585             parts[-1] += s[offset:offset + 1]
   585             return _parse_plain, parts, offset + 1
   586             return _parse_plain, parts, offset + 1
   586 
   587 
   587         def _parse_quote(parts, s, offset):
   588         def _parse_quote(parts, s, offset):
   588             if offset < len(s) and s[offset] == '"': # ""
   589             if offset < len(s) and s[offset:offset + 1] == '"': # ""
   589                 parts.append('')
   590                 parts.append('')
   590                 offset += 1
   591                 offset += 1
   591                 while offset < len(s) and (s[offset].isspace() or
   592                 while offset < len(s) and (s[offset:offset + 1].isspace() or
   592                         s[offset] == ','):
   593                         s[offset:offset + 1] == ','):
   593                     offset += 1
   594                     offset += 1
   594                 return _parse_plain, parts, offset
   595                 return _parse_plain, parts, offset
   595 
   596 
   596             while offset < len(s) and s[offset] != '"':
   597             while offset < len(s) and s[offset:offset + 1] != '"':
   597                 if (s[offset] == '\\' and offset + 1 < len(s)
   598                 if (s[offset:offset + 1] == '\\' and offset + 1 < len(s)
   598                         and s[offset + 1] == '"'):
   599                         and s[offset + 1:offset + 2] == '"'):
   599                     offset += 1
   600                     offset += 1
   600                     parts[-1] += '"'
   601                     parts[-1] += '"'
   601                 else:
   602                 else:
   602                     parts[-1] += s[offset]
   603                     parts[-1] += s[offset:offset + 1]
   603                 offset += 1
   604                 offset += 1
   604 
   605 
   605             if offset >= len(s):
   606             if offset >= len(s):
   606                 real_parts = _configlist(parts[-1])
   607                 real_parts = _configlist(parts[-1])
   607                 if not real_parts:
   608                 if not real_parts:
   611                     parts = parts[:-1]
   612                     parts = parts[:-1]
   612                     parts.extend(real_parts)
   613                     parts.extend(real_parts)
   613                 return None, parts, offset
   614                 return None, parts, offset
   614 
   615 
   615             offset += 1
   616             offset += 1
   616             while offset < len(s) and s[offset] in [' ', ',']:
   617             while offset < len(s) and s[offset:offset + 1] in [' ', ',']:
   617                 offset += 1
   618                 offset += 1
   618 
   619 
   619             if offset < len(s):
   620             if offset < len(s):
   620                 if offset + 1 == len(s) and s[offset] == '"':
   621                 if offset + 1 == len(s) and s[offset:offset + 1] == '"':
   621                     parts[-1] += '"'
   622                     parts[-1] += '"'
   622                     offset += 1
   623                     offset += 1
   623                 else:
   624                 else:
   624                     parts.append('')
   625                     parts.append('')
   625             else:
   626             else: