From 2da781e3617f30f483833b25fe21b40a56fe4de1 Mon Sep 17 00:00:00 2001 From: Asger Geel Weirsoee Date: Thu, 1 Oct 2026 21:59:10 +0200 Subject: [PATCH] =?UTF-8?q?Speaker:=20stort=20begyndelsesbogstav,=20ogs?= =?UTF-8?q?=C3=A5=20n=C3=A5r=20replikken=20starter=20med=20et=20svar?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Claude-Session: https://claude.ai/code/session_01JmhJG6JnhXfzNiKv8f2vHu --- party/narrator.py | 10 ++++++++-- party/tests/test_narration.py | 5 +++++ 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/party/narrator.py b/party/narrator.py index d54e61a..e22a215 100644 --- a/party/narrator.py +++ b/party/narrator.py @@ -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: diff --git a/party/tests/test_narration.py b/party/tests/test_narration.py index 710d5b4..a0dca50 100644 --- a/party/tests/test_narration.py +++ b/party/tests/test_narration.py @@ -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))