]> git.ipfire.org Git - thirdparty/jinja.git/commitdiff
Make title filter capitalize words in (),{},[],<> 439/head
authorJosh Mize <jgmize@gmail.com>
Tue, 7 Apr 2015 20:09:21 +0000 (15:09 -0500)
committerJosh Mize <jgmize@gmail.com>
Wed, 8 Apr 2015 21:49:32 +0000 (16:49 -0500)
jinja2/filters.py
tests/test_filters.py

index 0fb5a5aa8ca1792137bdd93f016062fc4899349f..ba21a06dc1409def5db1e63ef4731d2be224c86d 100644 (file)
@@ -22,6 +22,7 @@ from jinja2._compat import imap, string_types, text_type, iteritems
 
 
 _word_re = re.compile(r'\w+(?u)')
+_word_beginning_split_re = re.compile(r'([-\s\(\{\[\<]+)(?u)')
 
 
 def contextfilter(f):
@@ -182,12 +183,10 @@ def do_title(s):
     """Return a titlecased version of the value. I.e. words will start with
     uppercase letters, all remaining characters are lowercase.
     """
-    rv = []
-    for item in re.compile(r'([-\s]+)(?u)').split(soft_unicode(s)):
-        if not item:
-            continue
-        rv.append(item[0].upper() + item[1:].lower())
-    return ''.join(rv)
+    return ''.join(
+        [item[0].upper() + item[1:].lower()
+         for item in _word_beginning_split_re.split(soft_unicode(s))
+         if item])
 
 
 def do_dictsort(value, case_sensitive=False, by='key'):
index 42c555831d70def3d4f57ad593a3be03bb6e81e5..00ff2b5d4de729f00a30a2e4d0cbdcc0e77ffa71 100644 (file)
@@ -207,6 +207,14 @@ class TestFilter():
         assert tmpl.render() == "Foo\tBar"
         tmpl = env.from_string('''{{ "FOO\tBAR"|title }}''')
         assert tmpl.render() == "Foo\tBar"
+        tmpl = env.from_string('''{{ "foo (bar)"|title }}''')
+        assert tmpl.render() == "Foo (Bar)"
+        tmpl = env.from_string('''{{ "foo {bar}"|title }}''')
+        assert tmpl.render() == "Foo {Bar}"
+        tmpl = env.from_string('''{{ "foo [bar]"|title }}''')
+        assert tmpl.render() == "Foo [Bar]"
+        tmpl = env.from_string('''{{ "foo <bar>"|title }}''')
+        assert tmpl.render() == "Foo <Bar>"
 
         class Foo:
             def __str__(self):