diff --git a/Build/SilVersions.props b/Build/SilVersions.props
index b90cd986fc..0ea3730ac4 100644
--- a/Build/SilVersions.props
+++ b/Build/SilVersions.props
@@ -17,7 +17,7 @@
18.0.0-beta0012
6.0.0-beta0065
3.0.1
- 3.8.2
+ 3.9.2
1.1.1-beta0001
10.0.0-beta0004
0.9.8
diff --git a/Src/LexText/ParserCore/HCParser.cs b/Src/LexText/ParserCore/HCParser.cs
index 37015bb53b..57350eb684 100644
--- a/Src/LexText/ParserCore/HCParser.cs
+++ b/Src/LexText/ParserCore/HCParser.cs
@@ -15,6 +15,7 @@
using SIL.Machine.Annotations;
using SIL.Machine.Morphology.HermitCrab;
using SIL.Machine.Morphology.HermitCrab.MorphologicalRules;
+using SIL.Machine.Rules;
using SIL.ObjectModel;
namespace SIL.FieldWorks.WordWorks.Parser
@@ -149,6 +150,7 @@ private void LoadParser()
// For Hermit Crab, the maximum number of roots/stems allowed is between one and ten.
// The default is two in order to allow for compounding (which requires there be at least two roots/stems).
int maxStemCount = 2;
+ int maxAlternatives = 0;
string loadErrorsFile = Path.Combine(m_outputDirectory, m_cache.ProjectId.Name + "HCLoadErrors.xml");
using (XmlWriter writer = XmlWriter.Create(loadErrorsFile))
using (new WorkerThreadReadHelper(m_cache.ServiceLocator.GetInstance()))
@@ -161,6 +163,7 @@ private void LoadParser()
XElement guessRootsElem = parserParamsElem.Elements("HC").Elements("GuessRoots").FirstOrDefault();
XElement mergeAnalysesElem = parserParamsElem.Elements("HC").Elements("MergeAnalyses").FirstOrDefault();
XElement maxRootsElem = parserParamsElem.Elements("HC").Elements("MaxRoots").FirstOrDefault();
+ XElement maxAlternativesElem = parserParamsElem.Elements("HC").Elements("MaxAlternatives").FirstOrDefault();
if (delReappsElem != null)
delReapps = (int) delReappsElem;
if (guessRootsElem != null)
@@ -169,10 +172,13 @@ private void LoadParser()
m_mergeAnalyses = (bool) mergeAnalysesElem;
if (maxRootsElem != null)
maxStemCount = int.Parse(maxRootsElem.Value);
+ if (maxRootsElem != null)
+ maxAlternatives = int.Parse(maxAlternativesElem.Value);
}
m_morpher = new Morpher(m_traceManager, m_language) { DeletionReapplications = delReapps };
m_morpher.MaxStemCount = maxStemCount;
m_morpher.MergeEquivalentAnalyses = m_mergeAnalyses;
+ m_morpher.MaxAlternatives = maxAlternatives;
}
private XDocument ParseToXml(string form, bool tracing, IEnumerable selectTraceMorphs)
@@ -577,6 +583,10 @@ private string ProcessParseException(Exception e)
}
return string.Format(ParserCoreStrings.ksHCInvalidWordform, ise.String, ise.Position + 1, rest, phonemesFoundSoFar);
}
+ if (e is MaxAlternativesExceededException)
+ {
+ return e.Message;
+ }
return String.Format(ParserCoreStrings.ksHCDefaultErrorMsg, e.Message);
}
diff --git a/Src/LexText/ParserUI/ParserParametersDlg.cs b/Src/LexText/ParserUI/ParserParametersDlg.cs
index 0c6bd9f8ba..9026e0d3a8 100644
--- a/Src/LexText/ParserUI/ParserParametersDlg.cs
+++ b/Src/LexText/ParserUI/ParserParametersDlg.cs
@@ -43,6 +43,7 @@ public class ParserParametersDlg : ParserParametersBase
private const string MaxInfixes = "MaxInfixes";
private const string MaxInterfixes = "MaxInterfixes";
private const string MaxRoots = "MaxRoots";
+ private const string MaxAlternatives = "MaxAlternatives";
private const string MaxAnalysesToReturn = "MaxAnalysesToReturn";
#region Data members
@@ -280,7 +281,8 @@ public void SetDlgInfo(string title, string parserParameters, ILcmOwningSequence
m_dataGrid2.TableStyles[0].GridColumnStyles[2].Width = 130;
m_dataGrid2.TableStyles[0].GridColumnStyles[4].Width = 160;
m_dataGrid2.TableStyles[0].GridColumnStyles[6].Width = 90;
- m_dataGrid2.TableStyles[0].GridColumnStyles[7].Width = 400;
+ m_dataGrid2.TableStyles[0].GridColumnStyles[7].Width = 100;
+ m_dataGrid2.TableStyles[0].GridColumnStyles[8].Width = 400;
m_compoundRules = compoundRules;
if (m_compoundRules?.Count > 0)
@@ -305,6 +307,8 @@ private void LoadParserData(DataSet dsParserParameters)
hcElem.Add(new XElement(NoDefaultCompounding, false));
if (hcElem.Element(MaxRoots) == null)
hcElem.Add(new XElement(MaxRoots, 2));
+ if (hcElem.Element(MaxAlternatives) == null)
+ hcElem.Add(new XElement(MaxAlternatives, 0));
if (hcElem.Element(NotOnClitics) == null)
hcElem.Add(new XElement(NotOnClitics, true));
if (hcElem.Element(AcceptUnspecifiedGraphemes) == null)
@@ -367,6 +371,7 @@ private DataTable CreateHCDataTable()
tblHC.Columns.Add(AcceptUnspecifiedGraphemes, typeof(bool));
tblHC.Columns.Add(GuessRoots, typeof(bool));
tblHC.Columns.Add(MergeAnalyses, typeof(bool));
+ tblHC.Columns.Add(MaxAlternatives, typeof(int));
tblHC.Columns.Add(Strata, typeof(string));
return tblHC;
}
diff --git a/Src/LexText/ParserUI/ParserParametersDlg.resx b/Src/LexText/ParserUI/ParserParametersDlg.resx
index 9fdd32fe9d..e86f3e3f54 100644
--- a/Src/LexText/ParserUI/ParserParametersDlg.resx
+++ b/Src/LexText/ParserUI/ParserParametersDlg.resx
@@ -252,7 +252,7 @@
8, 64
- 576, 72
+ 546, 72
6
@@ -300,7 +300,7 @@
8, 165
- 976, 100
+ 1076, 100
8
@@ -351,7 +351,7 @@
5, 13
- 1000, 388
+ 1100, 388