Skip to content

Commit ba3a117

Browse files
committed
Correctly handle partial verse ranges
1 parent 377896b commit ba3a117

File tree

2 files changed

+58
-1
lines changed

2 files changed

+58
-1
lines changed

src/SIL.Machine/Corpora/ScriptureRefUsfmParserHandlerBase.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -299,7 +299,7 @@ private void EndNonVerseText(UsfmParserState state)
299299

300300
private void UpdateVerseRef(VerseRef verseRef, string marker)
301301
{
302-
if (_curVerseRef.VerseNum == 0 && verseRef.VerseNum == 0 && marker == "v")
302+
if (_curVerseRef.VerseNum == 0 && verseRef.VerseNum == 0 && !verseRef.HasMultiple && marker == "v")
303303
{
304304
// As the verse 0 marker appears within the middle of verse 0,
305305
// we should not break the position of current element stack by clearing it.

tests/SIL.Machine.Tests/Corpora/UsfmMemoryTextTests.cs

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -665,6 +665,63 @@ public void GetRows_InvalidVerseNumbers()
665665
});
666666
}
667667

668+
[Test]
669+
public void GetRows_IncompleteVerseRange()
670+
{
671+
TextRow[] rows = GetRows(
672+
@"\id MAT - Test
673+
\c 1
674+
\s heading text
675+
\p
676+
\q1
677+
\v 1,
678+
\q1 verse 1 text
679+
",
680+
includeAllText: true
681+
);
682+
683+
Assert.Multiple(() =>
684+
{
685+
Assert.That(rows, Has.Length.EqualTo(4));
686+
687+
Assert.That(
688+
rows[0].Ref,
689+
Is.EqualTo(ScriptureRef.Parse("MAT 1:0/1:s")),
690+
string.Join(",", rows.ToList().Select(tr => tr.Ref.ToString()))
691+
);
692+
Assert.That(
693+
rows[0].Text,
694+
Is.EqualTo("heading text"),
695+
string.Join(",", rows.ToList().Select(tr => tr.Text))
696+
);
697+
698+
Assert.That(
699+
rows[1].Ref,
700+
Is.EqualTo(ScriptureRef.Parse("MAT 1:0/2:p")),
701+
string.Join(",", rows.ToList().Select(tr => tr.Ref.ToString()))
702+
);
703+
Assert.That(rows[1].Text, Is.Empty, string.Join(",", rows.ToList().Select(tr => tr.Text)));
704+
705+
Assert.That(
706+
rows[2].Ref,
707+
Is.EqualTo(ScriptureRef.Parse("MAT 1:1/3:q1")),
708+
string.Join(",", rows.ToList().Select(tr => tr.Ref.ToString()))
709+
);
710+
Assert.That(rows[2].Text, Is.Empty, string.Join(",", rows.ToList().Select(tr => tr.Text)));
711+
712+
Assert.That(
713+
rows[3].Ref,
714+
Is.EqualTo(ScriptureRef.Parse("MAT 1:1/4:q1")),
715+
string.Join(",", rows.ToList().Select(tr => tr.Ref.ToString()))
716+
);
717+
Assert.That(
718+
rows[3].Text,
719+
Is.EqualTo("verse 1 text"),
720+
string.Join(",", rows.ToList().Select(tr => tr.Text))
721+
);
722+
});
723+
}
724+
668725
private static TextRow[] GetRows(string usfm, bool includeMarkers = false, bool includeAllText = false)
669726
{
670727
UsfmMemoryText text =

0 commit comments

Comments
 (0)