Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Refactor stripAllText and preferExistingText into a single enum #263

Merged
merged 2 commits into from
Oct 24, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 2 additions & 8 deletions src/SIL.Machine/Corpora/ParatextProjectTextUpdaterBase.cs
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,7 @@ public string UpdateUsfm(
string bookId,
IReadOnlyList<(IReadOnlyList<ScriptureRef>, string)> rows,
string fullName = null,
bool stripAllText = false,
bool preferExistingText = true
UpdateUsfmBehavior behavior = UpdateUsfmBehavior.PreferExisting
)
{
string fileName = _settings.GetBookFileName(bookId);
Expand All @@ -37,12 +36,7 @@ public string UpdateUsfm(
usfm = reader.ReadToEnd();
}

var handler = new UpdateUsfmParserHandler(
rows,
fullName is null ? null : $"- {fullName}",
stripAllText,
preferExistingText: preferExistingText
);
var handler = new UpdateUsfmParserHandler(rows, fullName is null ? null : $"- {fullName}", behavior);
try
{
UsfmParser.Parse(usfm, handler, _settings.Stylesheet, _settings.Versification);
Expand Down
21 changes: 14 additions & 7 deletions src/SIL.Machine/Corpora/UpdateUsfmParserHandler.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,13 @@

namespace SIL.Machine.Corpora
{
public enum UpdateUsfmBehavior
{
PreferExisting,
PreferNew,
StripExisting
}

/***
* This is a USFM parser handler that can be used to replace the existing text in a USFM file with the specified
* text.
Expand All @@ -14,26 +21,23 @@ public class UpdateUsfmParserHandler : ScriptureRefUsfmParserHandlerBase
private readonly List<UsfmToken> _tokens;
private readonly List<UsfmToken> _newTokens;
private readonly string _idText;
private readonly bool _stripAllText;
private readonly bool _preferExistingText;
private readonly UpdateUsfmBehavior _behavior;
private readonly Stack<bool> _replace;
private int _rowIndex;
private int _tokenIndex;

public UpdateUsfmParserHandler(
IReadOnlyList<(IReadOnlyList<ScriptureRef>, string)> rows = null,
string idText = null,
bool stripAllText = false,
bool preferExistingText = false
UpdateUsfmBehavior behavior = UpdateUsfmBehavior.PreferExisting
)
{
_rows = rows ?? Array.Empty<(IReadOnlyList<ScriptureRef>, string)>();
_tokens = new List<UsfmToken>();
_newTokens = new List<UsfmToken>();
_idText = idText;
_stripAllText = stripAllText;
_replace = new Stack<bool>();
_preferExistingText = preferExistingText;
_behavior = behavior;
}

public IReadOnlyList<UsfmToken> Tokens => _tokens;
Expand Down Expand Up @@ -371,7 +375,10 @@ private bool ReplaceWithNewTokens(UsfmParserState state)
break;
}
}
bool useNewTokens = _stripAllText || (newText && !existingText) || (newText && !_preferExistingText);
bool useNewTokens =
_behavior == UpdateUsfmBehavior.StripExisting
|| (newText && !existingText)
|| (newText && _behavior == UpdateUsfmBehavior.PreferNew);

if (useNewTokens)
_tokens.AddRange(_newTokens);
Expand Down
24 changes: 6 additions & 18 deletions tests/SIL.Machine.Tests/Corpora/UpdateUsfmParserHandlerTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ public void GetUsfm_IdText()
[Test]
public void GetUsfm_StripAllText()
{
string target = UpdateUsfm(stripAllText: true);
string target = UpdateUsfm(behavior: UpdateUsfmBehavior.StripExisting);
Assert.That(target, Contains.Substring("\\id MAT\r\n"));
Assert.That(target, Contains.Substring("\\v 1\r\n"));
Assert.That(target, Contains.Substring("\\s\r\n"));
Expand All @@ -43,7 +43,7 @@ public void GetUsfm_PreferExisting()
(ScrRef("MAT 1:6"), "Text 6"),
(ScrRef("MAT 1:7"), "Text 7"),
};
string target = UpdateUsfm(rows, preferExistingText: true);
string target = UpdateUsfm(rows, behavior: UpdateUsfmBehavior.PreferExisting);
Assert.That(target, Contains.Substring("\\id MAT - Test\r\n"));
Assert.That(target, Contains.Substring("\\v 6 Verse 6 content.\r\n"));
Assert.That(target, Contains.Substring("\\v 7 Text 7\r\n"));
Expand All @@ -57,7 +57,7 @@ public void GetUsfm_PreferRows()
(ScrRef("MAT 1:6"), "Text 6"),
(ScrRef("MAT 1:7"), "Text 7"),
};
string target = UpdateUsfm(rows, preferExistingText: false);
string target = UpdateUsfm(rows, behavior: UpdateUsfmBehavior.PreferNew);
Assert.That(target, Contains.Substring("\\id MAT - Test\r\n"));
Assert.That(target, Contains.Substring("\\v 6 Text 6\r\n"));
Assert.That(target, Contains.Substring("\\v 7 Text 7\r\n"));
Expand Down Expand Up @@ -438,30 +438,18 @@ private static string UpdateUsfm(
IReadOnlyList<(IReadOnlyList<ScriptureRef>, string)>? rows = null,
string? source = null,
string? idText = null,
bool stripAllText = false,
bool preferExistingText = false
UpdateUsfmBehavior behavior = UpdateUsfmBehavior.PreferNew
)
{
if (source is null)
{
var updater = new FileParatextProjectTextUpdater(CorporaTestHelpers.UsfmTestProjectPath);
return updater.UpdateUsfm(
"MAT",
rows,
fullName: idText,
stripAllText: stripAllText,
preferExistingText: preferExistingText
);
return updater.UpdateUsfm("MAT", rows, idText, behavior);
}
else
{
source = source.Trim().ReplaceLineEndings("\r\n") + "\r\n";
var updater = new UpdateUsfmParserHandler(
rows,
idText,
stripAllText: stripAllText,
preferExistingText: preferExistingText
);
var updater = new UpdateUsfmParserHandler(rows, idText, behavior);
UsfmParser.Parse(source, updater);
return updater.GetUsfm();
}
Expand Down
5 changes: 2 additions & 3 deletions tests/SIL.Machine.Tests/Corpora/UsfmManualTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ string sfmFileName in Directory
string bookId;
if (!targetSettings.IsBookFileName(sfmFileName, out bookId))
continue;
string newUsfm = updater.UpdateUsfm(bookId, pretranslations, stripAllText: true, preferExistingText: false);
string newUsfm = updater.UpdateUsfm(bookId, pretranslations, behavior: UpdateUsfmBehavior.StripExisting);
Assert.That(newUsfm, Is.Not.Null);
}
}
Expand Down Expand Up @@ -150,8 +150,7 @@ async Task GetUsfmAsync(string projectPath)
string newUsfm = updater.UpdateUsfm(
bookId,
pretranslations,
stripAllText: true,
preferExistingText: true
behavior: UpdateUsfmBehavior.StripExisting
);
Assert.That(newUsfm, Is.Not.Null);
}
Expand Down
Loading