Skip to content

Commit 0165d14

Browse files
committed
Use interface for settings parser
1 parent 3ff1c87 commit 0165d14

23 files changed

+155
-165
lines changed

src/SIL.Machine/Corpora/FileParatextProjectFileHandler.cs

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,15 @@
11
using System.IO;
2+
using System.Linq;
23

34
namespace SIL.Machine.Corpora
45
{
56
public class FileParatextProjectFileHandler : IParatextProjectFileHandler
67
{
78
private readonly string _projectDir;
8-
private readonly ParatextProjectSettings _settings;
99

1010
public FileParatextProjectFileHandler(string projectDir)
1111
{
1212
_projectDir = projectDir;
13-
_settings = new FileParatextProjectSettingsParser(projectDir).Parse();
1413
}
1514

1615
public bool Exists(string fileName)
@@ -23,9 +22,18 @@ public Stream Open(string fileName)
2322
return File.OpenRead(Path.Combine(_projectDir, fileName));
2423
}
2524

26-
public ParatextProjectSettings GetSettings()
25+
public UsfmStylesheet CreateStylesheet(string fileName)
2726
{
28-
return _settings;
27+
string customStylesheetFileName = Path.Combine(_projectDir, "custom.sty");
28+
return new UsfmStylesheet(
29+
fileName,
30+
File.Exists(customStylesheetFileName) ? customStylesheetFileName : null
31+
);
32+
}
33+
34+
public string Find(string extension)
35+
{
36+
return Directory.EnumerateFiles(_projectDir, "*" + extension).FirstOrDefault();
2937
}
3038
}
3139
}
Lines changed: 2 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,39 +1,8 @@
1-
using System.IO;
2-
using System.Linq;
3-
4-
namespace SIL.Machine.Corpora
1+
namespace SIL.Machine.Corpora
52
{
63
public class FileParatextProjectSettingsParser : ParatextProjectSettingsParserBase
74
{
8-
private readonly string _projectDir;
9-
105
public FileParatextProjectSettingsParser(string projectDir)
11-
{
12-
_projectDir = projectDir;
13-
}
14-
15-
protected override UsfmStylesheet CreateStylesheet(string fileName)
16-
{
17-
string customStylesheetFileName = Path.Combine(_projectDir, "custom.sty");
18-
return new UsfmStylesheet(
19-
fileName,
20-
File.Exists(customStylesheetFileName) ? customStylesheetFileName : null
21-
);
22-
}
23-
24-
protected override bool Exists(string fileName)
25-
{
26-
return File.Exists(Path.Combine(_projectDir, fileName));
27-
}
28-
29-
protected override string Find(string extension)
30-
{
31-
return Directory.EnumerateFiles(_projectDir, "*" + extension).FirstOrDefault();
32-
}
33-
34-
protected override Stream Open(string fileName)
35-
{
36-
return File.OpenRead(Path.Combine(_projectDir, fileName));
37-
}
6+
: base(new FileParatextProjectFileHandler(projectDir)) { }
387
}
398
}

src/SIL.Machine/Corpora/FileParatextProjectTextUpdater.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,9 @@
33
public class FileParatextProjectTextUpdater : ParatextProjectTextUpdaterBase
44
{
55
public FileParatextProjectTextUpdater(string projectDir)
6-
: base(new FileParatextProjectFileHandler(projectDir)) { }
6+
: base(
7+
new FileParatextProjectFileHandler(projectDir),
8+
new FileParatextProjectSettingsParser(projectDir).Parse()
9+
) { }
710
}
811
}
Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
11
namespace SIL.Machine.Corpora
22
{
3-
public class FileParatextProjectVersificationMismatchDetector : ParatextProjectVersificationMismatchDetector
3+
public class FileParatextProjectVersificationMismatchDetector : ParatextProjectVersificationMismatchDetectorBase
44
{
55
public FileParatextProjectVersificationMismatchDetector(string projectDir)
6-
: base(new FileParatextProjectFileHandler(projectDir)) { }
6+
: base(
7+
new FileParatextProjectFileHandler(projectDir),
8+
new FileParatextProjectSettingsParser(projectDir).Parse()
9+
) { }
710
}
811
}

src/SIL.Machine/Corpora/IParatextProjectFileHandler.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,9 @@ public interface IParatextProjectFileHandler
66
{
77
bool Exists(string fileName);
88
Stream Open(string fileName);
9-
ParatextProjectSettings GetSettings();
9+
string Find(string extension);
10+
UsfmStylesheet CreateStylesheet(string fileName);
11+
12+
// ParatextProjectSettings GetSettings();
1013
}
1114
}

src/SIL.Machine/Corpora/ParatextProjectSettingsParserBase.cs

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -8,16 +8,23 @@ namespace SIL.Machine.Corpora
88
{
99
public abstract class ParatextProjectSettingsParserBase
1010
{
11+
private readonly IParatextProjectFileHandler _paratextProjectFileHandler;
12+
13+
public ParatextProjectSettingsParserBase(IParatextProjectFileHandler paratextProjectFileHandler)
14+
{
15+
_paratextProjectFileHandler = paratextProjectFileHandler;
16+
}
17+
1118
public ParatextProjectSettings Parse()
1219
{
1320
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
1421
string settingsFileName = "Settings.xml";
15-
if (!Exists(settingsFileName))
16-
settingsFileName = Find(".ssf");
22+
if (!_paratextProjectFileHandler.Exists(settingsFileName))
23+
settingsFileName = _paratextProjectFileHandler.Find(".ssf");
1724
if (string.IsNullOrEmpty(settingsFileName))
1825
throw new InvalidOperationException("The project does not contain a settings file.");
1926
XDocument settingsDoc;
20-
using (Stream stream = Open(settingsFileName))
27+
using (Stream stream = _paratextProjectFileHandler.Open(settingsFileName))
2128
{
2229
settingsDoc = XDocument.Load(stream);
2330
}
@@ -36,7 +43,7 @@ public ParatextProjectSettings Parse()
3643

3744
var scrVersType = (int?)settingsDoc.Root.Element("Versification") ?? (int)ScrVersType.English;
3845
var versification = new ScrVers((ScrVersType)scrVersType);
39-
if (Exists("custom.vrs"))
46+
if (_paratextProjectFileHandler.Exists("custom.vrs"))
4047
{
4148
var guid = (string)settingsDoc.Root.Element("Guid");
4249
string versName = ((ScrVersType)scrVersType).ToString() + "-" + guid;
@@ -46,7 +53,7 @@ public ParatextProjectSettings Parse()
4653
}
4754
else
4855
{
49-
using (var reader = new StreamReader(Open("custom.vrs")))
56+
using (var reader = new StreamReader(_paratextProjectFileHandler.Open("custom.vrs")))
5057
{
5158
versification = Versification.Table.Implementation.Load(
5259
reader,
@@ -60,9 +67,9 @@ public ParatextProjectSettings Parse()
6067
}
6168

6269
var stylesheetFileName = (string)settingsDoc.Root.Element("StyleSheet") ?? "usfm.sty";
63-
if (!Exists(stylesheetFileName) && stylesheetFileName != "usfm_sb.sty")
70+
if (!_paratextProjectFileHandler.Exists(stylesheetFileName) && stylesheetFileName != "usfm_sb.sty")
6471
stylesheetFileName = "usfm.sty";
65-
UsfmStylesheet stylesheet = CreateStylesheet(stylesheetFileName);
72+
UsfmStylesheet stylesheet = _paratextProjectFileHandler.CreateStylesheet(stylesheetFileName);
6673

6774
string prefix = "";
6875
string form = "41MAT";
@@ -122,10 +129,5 @@ public ParatextProjectSettings Parse()
122129
languageCode
123130
);
124131
}
125-
126-
protected abstract bool Exists(string fileName);
127-
protected abstract string Find(string extension);
128-
protected abstract Stream Open(string fileName);
129-
protected abstract UsfmStylesheet CreateStylesheet(string fileName);
130132
}
131133
}

src/SIL.Machine/Corpora/ParatextProjectTermsParserBase.cs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,9 +39,12 @@ public abstract class ParatextProjectTermsParserBase
3939
private readonly ParatextProjectSettings _settings;
4040
private readonly IParatextProjectFileHandler _paratextProjectFileHandler;
4141

42-
protected ParatextProjectTermsParserBase(IParatextProjectFileHandler paratextProjectFileHandler)
42+
protected ParatextProjectTermsParserBase(
43+
IParatextProjectFileHandler paratextProjectFileHandler,
44+
ParatextProjectSettings settings
45+
)
4346
{
44-
_settings = paratextProjectFileHandler.GetSettings();
47+
_settings = settings;
4548
_paratextProjectFileHandler = paratextProjectFileHandler;
4649
}
4750

src/SIL.Machine/Corpora/ParatextProjectTextUpdaterBase.cs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,12 @@ public abstract class ParatextProjectTextUpdaterBase
1010
private readonly ParatextProjectSettings _settings;
1111
private readonly IParatextProjectFileHandler _paratextProjectFileHandler;
1212

13-
protected ParatextProjectTextUpdaterBase(IParatextProjectFileHandler paratextProjectFileHandler)
13+
protected ParatextProjectTextUpdaterBase(
14+
IParatextProjectFileHandler paratextProjectFileHandler,
15+
ParatextProjectSettings settings
16+
)
1417
{
15-
_settings = paratextProjectFileHandler.GetSettings();
18+
_settings = settings;
1619
_paratextProjectFileHandler = paratextProjectFileHandler;
1720
}
1821

src/SIL.Machine/Corpora/ParatextProjectVersificationMismatchDetector.cs renamed to src/SIL.Machine/Corpora/ParatextProjectVersificationMismatchDetectorBase.cs

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,17 @@
55

66
namespace SIL.Machine.Corpora
77
{
8-
public abstract class ParatextProjectVersificationMismatchDetector
8+
public abstract class ParatextProjectVersificationMismatchDetectorBase
99
{
1010
private readonly ParatextProjectSettings _settings;
1111
private readonly IParatextProjectFileHandler _paratextProjectFileHandler;
1212

13-
protected ParatextProjectVersificationMismatchDetector(IParatextProjectFileHandler paratextProjectFileHandler)
13+
protected ParatextProjectVersificationMismatchDetectorBase(
14+
IParatextProjectFileHandler paratextProjectFileHandler,
15+
ParatextProjectSettings settings
16+
)
1417
{
15-
_settings = paratextProjectFileHandler.GetSettings();
18+
_settings = settings;
1619
_paratextProjectFileHandler = paratextProjectFileHandler;
1720
}
1821

@@ -23,11 +26,11 @@ public IReadOnlyList<UsfmVersificationMismatch> GetUsfmVersificationMismatches(
2326
handler = handler ?? new UsfmVersificationMismatchDetector(_settings.Versification);
2427
foreach (string fileName in _settings.GetAllScriptureBookFileNames())
2528
{
26-
if (!Exists(fileName))
29+
if (!_paratextProjectFileHandler.Exists(fileName))
2730
continue;
2831

2932
string usfm;
30-
using (var reader = new StreamReader(Open(fileName)))
33+
using (var reader = new StreamReader(_paratextProjectFileHandler.Open(fileName)))
3134
{
3235
usfm = reader.ReadToEnd();
3336
}
@@ -48,9 +51,5 @@ public IReadOnlyList<UsfmVersificationMismatch> GetUsfmVersificationMismatches(
4851
}
4952
return handler.Errors;
5053
}
51-
52-
private bool Exists(string fileName) => _paratextProjectFileHandler.Exists(fileName);
53-
54-
private Stream Open(string fileName) => _paratextProjectFileHandler.Open(fileName);
5554
}
5655
}

src/SIL.Machine/Corpora/UsfmVersificationMismatchDetector.cs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ public enum UsfmVersificationMismatchType
1010
MissingChapter,
1111
MissingVerse,
1212
ExtraVerse,
13-
InvalidVerseRange, //TODO This would be a nice thing to detect, but does it really fit into the UsfmVersificationMismatch category?
13+
InvalidVerseRange,
1414
MissingVerseSegment,
1515
ExtraVerseSegment
1616
}
@@ -100,7 +100,10 @@ public string ExpectedVerseRef
100100
{
101101
get
102102
{
103-
VerseRef defaultVerseRef = new VerseRef(_bookNum, _expectedChapter, _expectedVerse);
103+
if (!VerseRef.TryParse($"{_bookNum} {_expectedChapter}:{_expectedVerse}", out VerseRef defaultVerseRef))
104+
{
105+
return "";
106+
}
104107
if (Type == UsfmVersificationMismatchType.ExtraVerse)
105108
return "";
106109
if (

0 commit comments

Comments
 (0)