From 0f0560a9ac7827e54966d6460ab6c016626c78c2 Mon Sep 17 00:00:00 2001 From: Adrian Holovaty Date: Thu, 8 Jun 2006 04:26:23 +0000 Subject: [PATCH] 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 --- django/utils/text.py | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/django/utils/text.py b/django/utils/text.py index 08ac596836..7df9bc03b7 100644 --- a/django/utils/text.py +++ b/django/utils/text.py @@ -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