Umlaute/Sonderzeichen in Bezeichnern zentral behandeln (#42)
Regex zur Bezeichner-Bereinigung aus Datenschreiber.py in functions/text_wrapper.py (sanitize_bezeichner) ausgelagert und um Bindestrich ergänzt, der bisher fehlte. Neue Tests decken Umlaute, ß, Unterstrich, Bindestrich, eigenes Ersatzzeichen und Leerfälle ab. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MneDjzrjmbpQt8udFYxN9e
This commit is contained in:
@@ -22,6 +22,7 @@ from .ly_metadata_wrapper import (
|
||||
from .ly_style_wrapper import apply_style
|
||||
from .dialog_wrapper import ask_yes_no, ask_overwrite_append_cancel_custom, ask_ergaenzen_entfernen_ersetzen_abbrechen, ask_detailpruefung_oder_vg_laden
|
||||
from .laenderkennung import get_laenderkennung, LAENDERKENNUNGEN
|
||||
from .text_wrapper import sanitize_bezeichner
|
||||
|
||||
from .message_wrapper import (
|
||||
_get_message_bar,
|
||||
|
||||
@@ -0,0 +1,28 @@
|
||||
"""
|
||||
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)
|
||||
Reference in New Issue
Block a user