From 39476e1854e9e0e5b3ad3ff2a2eb44e03620a693 Mon Sep 17 00:00:00 2001 From: Étienne Loks Date: Tue, 29 Dec 2020 13:24:25 +0100 Subject: Secretary filters: capitalize --- ishtar_common/utils_secretary.py | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) (limited to 'ishtar_common/utils_secretary.py') diff --git a/ishtar_common/utils_secretary.py b/ishtar_common/utils_secretary.py index e1f2919e4..579ac3f63 100644 --- a/ishtar_common/utils_secretary.py +++ b/ishtar_common/utils_secretary.py @@ -32,6 +32,26 @@ def capfirst_filter(value): return value.capitalize() if value else value +RE_CAP = re.compile(r"[^-' ]+") +SEP = ("un", "une", "le", "la", "les", "lez", "d", "l", "de", "des", "du") + + +def capitalize_filter(value): + if not value: + return "" + value = value.lower() + res = "" + for m in RE_CAP.finditer(value): + start = m.start() + if start: + res += value[start - 1] + v = m.group() + if v not in SEP: + v = v[0].upper() + v[1:] + res += v + return res + + def human_date_filter(value): try: value = datetime.strptime(value, "%Y-%m-%d") @@ -64,6 +84,7 @@ class IshtarSecretaryRenderer(Renderer): self.media_path = settings.MEDIA_ROOT self.environment.filters['human_date'] = human_date_filter self.environment.filters['capfirst'] = capfirst_filter + self.environment.filters['capitalize'] = capitalize_filter self.environment.filters['replace_line_breaks'] = replace_line_breaks self.environment.filters['splitpart'] = splitpart -- cgit v1.2.3