- while len(line) > 0:
- match = self.whitespace_re.match(line)
- if match is None:
- # If there's no match, that means that there's no
- # whitespace in the rest of the line, so it should
- # be treated as a single entity, quoted or not
- #
- # This also means that a closing quote isn't
- # strictly necessary if the line ends the quote
- substr = line
- end = ''
- else:
- substr, end = match.groups()
-
- if in_quote:
- # If we're in the middle of the quote, the string
- # we just grabbed belongs at the end of the
- # previous string
- #
- # Including the whitespace! Unless it's not
- # whitespace and is actually a closequote instead
- split_line[-1] += substr + (end if end != '"' else '')
- else:
- # If we're not in the middle of a quote, than this
- # is the next new string
- split_line.append(substr)
-
- if end == '"':
- in_quote = not in_quote
-
- # Then strip off what we just processed
- line = line[len(substr + end):]
+ for m in string_pat.finditer(line):
+ [x] = [x for x in m.groups() if x is not None]
+ split_line.append(escape_pat.sub(r'\1', x))