Restore missing named refs helper

This commit is contained in:
2026-08-30 13:23:13 +00:00
parent 00985b73b3
commit dfead66b9e
+36 -15
View File
@@ -4462,25 +4462,46 @@ def _slot_refs_for_text(text, ref_slots):
return refs return refs
def _named_character_refs_for_text(text, ref_slots): def _named_character_refs_for_text(text, ref_slots):
haystack = str(text or "") haystack = str(text or "")
matched = [] matched = []
for slot_number, raw in enumerate(ref_slots or [], 1): for slot_number, raw in enumerate(ref_slots or [], 1):
ref = _reference_slot(raw, slot_number) ref = _reference_slot(raw, slot_number)
if ref.get("kind") != "character" or _reference_image(ref) is None: if ref.get("kind") != "character" or _reference_image(ref) is None:
continue continue
for name in _reference_name_keys(ref): for name in _reference_name_keys(ref):
if re.search(r"\b" + re.escape(name) + r"\b", haystack, re.I): if re.search(r"\b" + re.escape(name) + r"\b", haystack, re.I):
matched.append((slot_number, ref)) matched.append((slot_number, ref))
break break
return matched return matched
def _matched_reference_slots(text, ref_slots): def _named_refs_for_text(text, ref_slots, kinds=None):
matched = [] haystack = str(text or "")
seen = set() matched = []
for slot_number, ref in _slot_refs_for_text(text, ref_slots) + _named_character_refs_for_text(text, ref_slots): wanted = {str(k).strip().lower() for k in (kinds or ()) if str(k).strip()}
if slot_number in seen: by_name = {}
for slot_number, ref in enumerate(ref_slots or [], 1):
if ref is None or _reference_image(ref) is None:
continue
if wanted and str(ref.get("kind") or "").strip().lower() not in wanted:
continue
for name in _reference_name_keys(ref):
by_name.setdefault(name.lower(), []).append((slot_number, ref, name))
for entries in by_name.values():
if len(entries) != 1:
continue
slot_number, ref, name = entries[0]
if re.search(r"\b" + re.escape(name) + r"\b", haystack, re.I):
matched.append((slot_number, ref))
return matched
def _matched_reference_slots(text, ref_slots):
matched = []
seen = set()
for slot_number, ref in _slot_refs_for_text(text, ref_slots) + _named_character_refs_for_text(text, ref_slots):
if slot_number in seen:
continue continue
seen.add(slot_number) seen.add(slot_number)
matched.append((slot_number, ref)) matched.append((slot_number, ref))