This commit is contained in:
team3
2026-07-13 12:31:25 +02:00
parent 32d7ad9ea1
commit 9cd8e02e22
34 changed files with 747 additions and 606 deletions

View File

@@ -13,16 +13,40 @@ _FENCE = re.compile(r"```(?:json)?\s*(.*?)```", re.DOTALL)
_UNGUELTIGES_ESCAPE = re.compile(r'\\(?![\"\\/bfnrt]|u[0-9a-fA-F]{4})')
_ESCAPE_JE_ZEICHEN = {"\n": "\\n", "\r": "\\r", "\t": "\\t"}
def _iterativ_reparieren(s: str):
"""Positionsgenaue Reparatur am ORIGINAL (das Regex-Doubling beschädigt
\\\\x-Folgen): rohe Kontrollzeichen in Strings escapen (Modelle zitieren
mehrzeilige Passagen wörtlich — Markup-Zitat-Regel), ungültige Escapes
doubeln. Iterativ an der jeweils ersten Fehlerstelle, nur im Fehlerfall."""
for _ in range(300):
try:
return json.loads(s)
except json.JSONDecodeError as e:
if e.pos >= len(s):
return None
if "Invalid control character" in e.msg:
s = s[:e.pos] + _ESCAPE_JE_ZEICHEN.get(s[e.pos], " ") + s[e.pos + 1:]
elif "Invalid \\escape" in e.msg:
s = s[:e.pos] + "\\" + s[e.pos:]
else:
return None
return None
def _loads(s: str):
"""json.loads mit EINER Reparaturstufe für rohe LaTeX-Backslashes. Valides
JSON durchläuft unverändert (Reparatur nur im Fehlerfall)."""
"""json.loads mit Reparaturstufen für rohe LaTeX-Backslashes und rohe
Kontrollzeichen in Strings. Valides JSON durchläuft unverändert
(Reparatur nur im Fehlerfall)."""
try:
return json.loads(s)
except ValueError:
try:
return json.loads(_UNGUELTIGES_ESCAPE.sub(r"\\\\", s))
except ValueError:
return None
return _iterativ_reparieren(s)
def parse(text: str):