From bd2ae70ee9a8b4484956b819c0a1ee026e0be576 Mon Sep 17 00:00:00 2001 From: Peter Chapman Date: Thu, 11 Dec 2025 07:43:52 +1300 Subject: [PATCH] Do not reset chapter one when it contains duplicate id tags --- .../Corpora/UpdateUsfmParserHandler.cs | 9 ++-- .../Corpora/UpdateUsfmParserHandlerTests.cs | 45 +++++++++++++++++++ 2 files changed, 51 insertions(+), 3 deletions(-) diff --git a/src/SIL.Machine/Corpora/UpdateUsfmParserHandler.cs b/src/SIL.Machine/Corpora/UpdateUsfmParserHandler.cs index d6a23618..00c1f719 100644 --- a/src/SIL.Machine/Corpora/UpdateUsfmParserHandler.cs +++ b/src/SIL.Machine/Corpora/UpdateUsfmParserHandler.cs @@ -124,9 +124,12 @@ public override void EndUsfm(UsfmParserState state) public override void StartBook(UsfmParserState state, string marker, string code) { - _verseRowsRef = state.VerseRef; - UpdateVerseRowsMap(); - UpdateVerseRows(); + if (_verseRowsRef.BookNum != state.VerseRef.BookNum) + { + _verseRowsRef = state.VerseRef; + UpdateVerseRowsMap(); + UpdateVerseRows(); + } CollectReadonlyTokens(state); _updateBlocks.Push(new UsfmUpdateBlock()); diff --git a/tests/SIL.Machine.Tests/Corpora/UpdateUsfmParserHandlerTests.cs b/tests/SIL.Machine.Tests/Corpora/UpdateUsfmParserHandlerTests.cs index 98d67f4e..77c9f7cc 100644 --- a/tests/SIL.Machine.Tests/Corpora/UpdateUsfmParserHandlerTests.cs +++ b/tests/SIL.Machine.Tests/Corpora/UpdateUsfmParserHandlerTests.cs @@ -1306,6 +1306,51 @@ public void GetUsfm_DuplicateVerses() AssertUsfmEquals(target, resultP); } + [Test] + public void GetUsfm_IdTags() + { + var rows = new List + { + new UpdateUsfmRow(ScrRef("MAT 1:0/1:s"), "new section header"), + new UpdateUsfmRow(ScrRef("MAT 1:1"), "new verse 1"), + new UpdateUsfmRow(ScrRef("MAT 1:2"), "new verse 2"), + new UpdateUsfmRow(ScrRef("MAT 1:3"), "new verse 3"), + new UpdateUsfmRow(ScrRef("MAT 1:4"), "new verse 4"), + }; + + string usfm = + @"\id MAT +\s section header +\c 1 +\s1 beginning-of-chapter header +\p +\v 1 verse 1 +\id +\v 2 verse 2 +\id MAT +\v 3 verse 3 +\id MRK +\v 4 verse 4 +"; + + string target = UpdateUsfm(rows, usfm, paragraphBehavior: UpdateUsfmMarkerBehavior.Strip); + string resultP = + @"\id MAT +\s new section header +\c 1 +\s1 beginning-of-chapter header +\p +\v 1 new verse 1 +\id +\v 2 new verse 2 +\id MAT +\v 3 new verse 3 +\id MRK +\v 4 new verse 4 +"; + AssertUsfmEquals(target, resultP); + } + [Test] public void GetUsfm_PreferExisting_AddRemark() {