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