Changed django.utils.text.smart_split to return strings, not tuples

git-svn-id: http://code.djangoproject.com/svn/django/trunk@3111 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
Adrian Holovaty 2006-06-08 04:26:23 +00:00
parent a88e0ec5c6
commit 0f0560a9ac
1 changed files with 11 additions and 3 deletions

View File

@ -111,11 +111,19 @@ def javascript_quote(s):
smart_split_re = re.compile('("(?:[^"\\\\]*(?:\\\\.[^"\\\\]*)*)"|\'(?:[^\'\\\\]*(?:\\\\.[^\'\\\\]*)*)\'|[^\\s]+)')
def smart_split(text):
"""
Generator that splits a string by spaces, leaving quoted phrases together.
Supports both single and double quotes, and supports escaping quotes with
backslashes. In the output, strings will keep their initial and trailing
quote marks.
>>> list(smart_split('This is "a person\'s" test.'))
['This', 'is', '"a person\'s"', 'test.']
"""
for bit in smart_split_re.finditer(text):
bit = bit.group(0)
if bit[0] == '"':
yield (bit[1:-1].replace('\\"', '"').replace('\\\\', '\\'), True)
yield '"' + bit[1:-1].replace('\\"', '"').replace('\\\\', '\\') + '"'
elif bit[0] == "'":
yield (bit[1:-1].replace("\\'", "'").replace("\\\\", "\\"), True)
yield "'" + bit[1:-1].replace("\\'", "'").replace("\\\\", "\\") + "'"
else:
yield (bit, False)
yield bit