Ticket #7297: 7297.2.diff
File 7297.2.diff, 2.3 KB (added by , 16 years ago) |
---|
-
django/utils/text.py
118 118 spaces are converted to underscores; and all non-filename-safe characters 119 119 are removed. 120 120 >>> get_valid_filename("john's portrait in 2004.jpg") 121 'johns_portrait_in_2004.jpg'121 u'johns_portrait_in_2004.jpg' 122 122 """ 123 123 s = force_unicode(s).strip().replace(' ', '_') 124 124 return re.sub(r'[^-A-Za-z0-9_.]', '', s) … … 127 127 def get_text_list(list_, last_word=ugettext_lazy(u'or')): 128 128 """ 129 129 >>> get_text_list(['a', 'b', 'c', 'd']) 130 'a, b, c or d'130 u'a, b, c or d' 131 131 >>> get_text_list(['a', 'b', 'c'], 'and') 132 'a, b and c'132 u'a, b and c' 133 133 >>> get_text_list(['a', 'b'], 'and') 134 'a and b'134 u'a and b' 135 135 >>> get_text_list(['a']) 136 'a'136 u'a' 137 137 >>> get_text_list([]) 138 ''138 u'' 139 139 """ 140 140 if len(list_) == 0: return u'' 141 141 if len(list_) == 1: return force_unicode(list_[0]) … … 198 198 199 199 smart_split_re = re.compile('("(?:[^"\\\\]*(?:\\\\.[^"\\\\]*)*)"|\'(?:[^\'\\\\]*(?:\\\\.[^\'\\\\]*)*)\'|[^\\s]+)') 200 200 def smart_split(text): 201 """201 r""" 202 202 Generator that splits a string by spaces, leaving quoted phrases together. 203 203 Supports both single and double quotes, and supports escaping quotes with 204 204 backslashes. In the output, strings will keep their initial and trailing 205 quote marks. 205 quote marks. If similar quote marks were backslash-escaped, they are 206 un-escaped in the output. Double backslashes are always un-escaped. 206 207 207 >>> list(smart_split('This is "a person\'s" test.')) 208 ['This', 'is', '"a person\'s"', 'test.'] 208 >>> list(smart_split(r'This is "a person\'s" test.')) 209 [u'This', u'is', u'"a person\\\'s"', u'test.'] 210 >>> list(smart_split(r"Another 'person\'s' test.")) 211 [u'Another', u"'person's'", u'test.'] 212 >>> list(smart_split(r'A "\"funky\" style" test.')) 213 [u'A', u'""funky" style"', u'test.'] 209 214 """ 210 215 text = force_unicode(text) 211 216 for bit in smart_split_re.finditer(text): … … 218 223 yield bit 219 224 smart_split = allow_lazy(smart_split, unicode) 220 225 226 # Work-around for http://bugs.python.org/issue1108 227 __doc__ = ''.join(( 228 get_valid_filename.__doc__, 229 get_text_list.__doc__, 230 smart_split.__doc__, 231 )) 232