From 62e7e7083423dee258257a3a2b59a88e177e2db0 Mon Sep 17 00:00:00 2001 From: Josh Mize Date: Tue, 7 Apr 2015 15:09:21 -0500 Subject: [PATCH] Make title filter capitalize words in (),{},[],<> --- jinja2/filters.py | 11 +++++------ tests/test_filters.py | 8 ++++++++ 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/jinja2/filters.py b/jinja2/filters.py index 0fb5a5aa..ba21a06d 100644 --- a/jinja2/filters.py +++ b/jinja2/filters.py @@ -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'): diff --git a/tests/test_filters.py b/tests/test_filters.py index 42c55583..00ff2b5d 100644 --- a/tests/test_filters.py +++ b/tests/test_filters.py @@ -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 "|title }}''') + assert tmpl.render() == "Foo " class Foo: def __str__(self): -- 2.47.2