Speaker: stort begyndelsesbogstav, også når replikken starter med et svar
CI / test (push) Successful in 16s

Claude-Session: https://claude.ai/code/session_01JmhJG6JnhXfzNiKv8f2vHu
This commit is contained in:
agw
2026-10-01 21:59:10 +02:00
parent 6f8370fb96
commit 2da781e361
2 changed files with 13 additions and 2 deletions
+8 -2
View File
@@ -48,8 +48,14 @@ def safe(text: str) -> str:
return re.sub(r"[\[\]{}<>]", "", str(text)).strip()
def capitalize(line: str) -> str:
"""Stort begyndelsesbogstav, også når replikken starter med et indsat svar ("kongevand, det er …")."""
m = re.match(r"^((?:\[[a-z ]+\]\s*)*)(\w)", line)
return line if not m else line[:m.start(2)] + m.group(2).upper() + line[m.end(2):]
def speakable_prompt(prompt: str) -> str:
return re.sub(r"_{3,}", "blank", prompt)
return capitalize(re.sub(r"_{3,}", "blank", prompt))
class Narrator:
@@ -67,7 +73,7 @@ class Narrator:
recent.append(i)
del recent[:-max(1, len(variants) // 2)] # undgå gentagelser i den seneste halvdel
filled = {k: (number_words(v) if isinstance(v, int) else safe(v)) for k, v in values.items()}
return re.sub(r"\{(\w+)\}", lambda m: filled.get(m.group(1), ""), variants[i])
return capitalize(re.sub(r"\{(\w+)\}", lambda m: filled.get(m.group(1), ""), variants[i]))
# ── afsløringen ──────────────────────────────────────────────────────────
def reveal_step(self, step: dict, names: dict[str, str], n_players: int) -> str | None:
+5
View File
@@ -26,6 +26,11 @@ class NarratorTests(SimpleTestCase):
self.assertEqual(join_names(["A", "B", "C"]), "A, B og C")
self.assertEqual(safe("Bo[laughs]"), "Bolaughs")
self.assertEqual(speakable_prompt("En flok _____ kaldes."), "En flok blank kaldes.")
self.assertEqual(speakable_prompt("_____ kan ikke mærke chili."), "Blank kan ikke mærke chili.")
n = Narrator(random.Random(0))
for _ in range(10):
line = n.line("reveal_truth_found", sandhed="kongevand", navne="Sus")
self.assertRegex(line, r"^(\[[a-z ]+\] )*[A-ZÆØÅ]")
def test_lines_are_filled_and_vary(self):
n = Narrator(random.Random(1))