From 9df114ca90d1b105be3192763664b6df67ebfb77 Mon Sep 17 00:00:00 2001 From: Peter Chapman Date: Thu, 19 Mar 2026 10:46:50 +1300 Subject: [PATCH] Port fix for denormalizing quotation marks in an invalid chapter --- .../quotation_mark_update_settings.py | 2 +- machine/scripture/verse_ref.py | 2 +- ...tion_changing_usfm_block_update_handler.py | 21 +++++++++++++++++++ 3 files changed, 23 insertions(+), 2 deletions(-) diff --git a/machine/punctuation_analysis/quotation_mark_update_settings.py b/machine/punctuation_analysis/quotation_mark_update_settings.py index 006f413c..3ea612c0 100644 --- a/machine/punctuation_analysis/quotation_mark_update_settings.py +++ b/machine/punctuation_analysis/quotation_mark_update_settings.py @@ -12,6 +12,6 @@ def __init__( self._chapter_strategies = chapter_strategies def get_action_for_chapter(self, chapter_number: int) -> QuotationMarkUpdateStrategy: - if chapter_number <= len(self._chapter_strategies): + if chapter_number > -1 and chapter_number <= len(self._chapter_strategies): return self._chapter_strategies[chapter_number - 1] return self._default_chapter_strategy diff --git a/machine/scripture/verse_ref.py b/machine/scripture/verse_ref.py index fcd21789..c5feba16 100644 --- a/machine/scripture/verse_ref.py +++ b/machine/scripture/verse_ref.py @@ -592,7 +592,7 @@ def _get_verse_num(verse: Optional[str]) -> Tuple[bool, int]: class IgnoreSegmentsVerseRef(VerseRef): def __init__(self, verse_ref: VerseRef): - super().__init__(verse_ref.book_num, verse_ref.chapter_num, verse_ref.verse_num, verse_ref.versification) + super().__init__(verse_ref.book_num, verse_ref.chapter, verse_ref.verse_num, verse_ref.versification) def __eq__(self, other): if not isinstance(other, VerseRef): diff --git a/tests/punctuation_analysis/test_quote_convention_changing_usfm_block_update_handler.py b/tests/punctuation_analysis/test_quote_convention_changing_usfm_block_update_handler.py index 1f1ba61f..13a07613 100644 --- a/tests/punctuation_analysis/test_quote_convention_changing_usfm_block_update_handler.py +++ b/tests/punctuation_analysis/test_quote_convention_changing_usfm_block_update_handler.py @@ -775,6 +775,27 @@ def test_start_new_chapter() -> None: assert quote_convention_changer._current_strategy == QuotationMarkUpdateStrategy.APPLY_FALLBACK +def test_invalid_chapter_number() -> None: + input_usfm = """\\c 1 + \\p + \\v 1 Chapter 1, "Verse 1" + \\c 2. + \\p + \\v v1 Chapter 2, "Invalid Verse 1" + """ + expected_usfm = ( + "\\c 1\n" + + "\\p\n" + + "\\v 1 Chapter 1, “Verse 1”\n" + + "\\c 2.\n" + + "\\p\n" + + "\\v v1 Chapter 2, “Invalid Verse 1”" + ) + + observed_usfm = change_quotation_marks(input_usfm, "typewriter_english", "standard_english") + assert_usfm_equal(observed_usfm, expected_usfm) + + def change_quotation_marks( normalized_usfm: str, source_quote_convention_name: str,