From 1ea9aa090885b4c915d873f71f23e3753a30eebc Mon Sep 17 00:00:00 2001 From: Peter Chapman Date: Thu, 6 Aug 2026 07:39:09 +1200 Subject: [PATCH] Port 'Fix verses appearing in remarks when missing a paragraph marker' --- machine/corpora/update_usfm_parser_handler.py | 4 ++ .../test_update_usfm_parser_handler.py | 58 +++++++++++++++++++ 2 files changed, 62 insertions(+) diff --git a/machine/corpora/update_usfm_parser_handler.py b/machine/corpora/update_usfm_parser_handler.py index fe405a64..c21f7cf8 100644 --- a/machine/corpora/update_usfm_parser_handler.py +++ b/machine/corpora/update_usfm_parser_handler.py @@ -375,6 +375,10 @@ def get_usfm(self, stylesheet: Union[str, UsfmStylesheet] = "usfm.sty") -> str: if index < len(tokens) and tokens[index].type == UsfmTokenType.TEXT: index += 1 + # If the next token is a verse, add \nb to prevent the verse appearing in the remark + if tokens[index].type == UsfmTokenType.VERSE: + tokens.insert(index, UsfmToken(UsfmTokenType.PARAGRAPH, "nb")) + tokens[index:index] = remark_tokens return tokenizer.detokenize(tokens) diff --git a/tests/corpora/test_update_usfm_parser_handler.py b/tests/corpora/test_update_usfm_parser_handler.py index e59a717e..f73aa683 100644 --- a/tests/corpora/test_update_usfm_parser_handler.py +++ b/tests/corpora/test_update_usfm_parser_handler.py @@ -1386,11 +1386,13 @@ def test_pass_remark(): \ide UTF-8 \rem Existing remark \c 1 +\p \v 1 Some text \v 2 \v 3 Other text \c 2 \rem Existing remark +\p \v 1 More text \c 3 """ @@ -1407,12 +1409,66 @@ def test_pass_remark(): \rem New remark 0 \c 1 \rem New remark 1 +\p \v 1 Some text \v 2 Update 2 \v 3 Other text \c 2 \rem Existing remark \rem New remark 2 +\p +\v 1 More text +\c 3 +\rem New remark 3 +""" + + assert_usfm_equals(target, result) + + +def test_no_body_remark(): + rows = [ + UpdateUsfmRow( + scr_ref("MAT 1:1"), + "Update 1", + ), + UpdateUsfmRow( + scr_ref("MAT 1:2"), + "Update 2", + ), + ] + usfm = r"""\id MAT - Test +\ide UTF-8 +\rem Existing remark +\c 1 +\v 1 Some text +\v 2 +\v 3 Other text +\c 2 +\rem Existing remark +\v 1 More text +\c 3 +""" + + target = update_usfm( + rows, + usfm, + text_behavior=UpdateUsfmTextBehavior.PREFER_EXISTING, + remarks=[(0, "New remark 0"), (1, "New remark 1"), (2, "New remark 2"), (3, "New remark 3")], + ) + result = r"""\id MAT - Test +\ide UTF-8 +\rem Existing remark +\rem New remark 0 +\c 1 +\rem New remark 1 +\nb +\v 1 Some text +\v 2 Update 2 +\v 3 Other text +\c 2 +\rem Existing remark +\rem New remark 2 +\nb \v 1 More text \c 3 \rem New remark 3 @@ -1471,6 +1527,7 @@ def test_pass_multiple_remarks_same_chapter() -> None: \ide UTF-8 \rem Existing remark \c 1 +\q1 \v 1 Some text \v 2 \v 3 Other text @@ -1490,6 +1547,7 @@ def test_pass_multiple_remarks_same_chapter() -> None: \c 1 \rem New remark 1.1 \rem New remark 1.2 +\q1 \v 1 Some text \v 2 Update 2 \v 3 Other text