Jonas Havelka
2 years ago
8 changed files with 86 additions and 11 deletions
@ -0,0 +1,9 @@ |
|||||
|
from django import template |
||||
|
register = template.Library() |
||||
|
|
||||
|
from personalni.utils import normalizuj_jmeno |
||||
|
import seminar.models as m # jen kvůli typové anotaci… |
||||
|
|
||||
|
@register.filter |
||||
|
def jmeno_jako_prefix(o: m.Osoba): |
||||
|
return normalizuj_jmeno(o).replace(' ', '_') |
@ -0,0 +1,11 @@ |
|||||
|
import seminar.models as m |
||||
|
from various.utils import bez_diakritiky_translate |
||||
|
import re |
||||
|
|
||||
|
def normalizuj_jmeno(o: m.Osoba) -> str: |
||||
|
# FIXME: Možná není potřeba vázat na model? |
||||
|
cele_jmeno = f'{o.jmeno} {o.prijmeni}' |
||||
|
cele_jmeno = cele_jmeno.translate(bez_diakritiky_translate) |
||||
|
cele_jmeno = re.sub(r'[^a-zA-Z- ]', '', cele_jmeno) |
||||
|
return cele_jmeno |
||||
|
|
@ -0,0 +1,33 @@ |
|||||
|
bez_diakritiky = ({} |
||||
|
# FIXME: funguje jen pro český a slovenský text, jinak jsou špatně |
||||
|
# transliterace. Potenciální řešení: |
||||
|
# https://stackoverflow.com/questions/517923/what-is-the-best-way-to-remove-accents-normalize-in-a-python-unicode-string |
||||
|
# (ale přidává to další závislosti…) |
||||
|
|
||||
|
# Tisknutelné ASCII |
||||
|
| {chr(a): chr(a) for a in range(32, 126+1)} |
||||
|
|
||||
|
# České, slovenské a blízké diakritiky a divnoznaky |
||||
|
| { x: 'a' for x in 'áÁäÄ'} |
||||
|
| { x: 'c' for x in 'čČ'} |
||||
|
| { x: 'd' for x in 'ďĎ'} |
||||
|
| { x: 'e' for x in 'éÉěĚëË'} |
||||
|
| { x: 'i' for x in 'íÍ'} |
||||
|
| { x: 'l' for x in 'ľĽĺĹ'} |
||||
|
| { x: 'n' for x in 'ňŇ'} |
||||
|
| { x: 'o' for x in 'óÓöÖôÔ'} |
||||
|
| { x: 'r' for x in 'řŘŕŔ'} |
||||
|
| { x: 's' for x in 'šŠßẞ'} |
||||
|
| { x: 't' for x in 'ťŤ'} |
||||
|
| { x: 'u' for x in 'úÚůŮ'} |
||||
|
| { x: 'y' for x in 'ýÝ'} |
||||
|
| { x: 'z' for x in 'žŽ'} |
||||
|
) |
||||
|
|
||||
|
# Tabulka pro str.translate |
||||
|
class _bez_diakritiky_translate: |
||||
|
def __getitem__(self, it): |
||||
|
return ord(bez_diakritiky.get(chr(it), None)) |
||||
|
bez_diakritiky_translate = _bez_diakritiky_translate() |
||||
|
|
||||
|
# TODO: testy? |
Loading…
Reference in new issue