Files
Plugin_SN_Basis/functions/text_wrapper.py
T

29 lines
1.3 KiB
Python
Raw Normal View History

"""
sn_basis/functions/text_wrapper.py Bezeichner-Hilfsfunktionen.
Zentrale Stelle, um Freitext (z. B. ein Thema oder ein Schriftfeldinhalt) in einen
technischen Bezeichner (Layername, Dateiname) umzuwandeln. Nicht pro Aufrufstelle
ein eigenes Regex schreiben Umlaute, Unterstrich und Bindestrich werden hier an
einer Stelle gepflegt (siehe docs/wissen/fallstricke.md, Issue Plugin_SN_Basis #42).
"""
import re
# Buchstaben, Ziffern, deutsche Umlaute/ß, Unterstrich und Bindestrich gelten immer
# als zulässig. Wurde in der Vergangenheit wiederholt vergessen, wenn ein neues
# Regex direkt im Aufrufer entstand statt diese Funktion zu nutzen.
_BEZEICHNER_ERLAUBT = r"A-Za-z0-9_\-ÄäÖöÜüß"
def sanitize_bezeichner(text: str, ersatz: str = "_") -> str:
"""Wandelt `text` in einen technischen Bezeichner um.
Alle Zeichen außerhalb von Buchstaben/Ziffern/Umlauten/ß/Unterstrich/Bindestrich
werden durch `ersatz` ersetzt, anschließend werden führende und folgende
Vorkommen von `ersatz` entfernt. Gedacht für Layer- und Dateinamen nicht für
Freitext in Schriftfeldern oder der Legende, wo auch andere Zeichen sichtbar
bleiben sollen.
"""
bereinigt = re.sub(rf"[^{_BEZEICHNER_ERLAUBT}]+", ersatz, text)
return bereinigt.strip(ersatz)