private static string[] GetWordCompletionSuggestion(string preStr) { const int suggestionCount = Int32.MaxValue; PersianSpellChecker engine; if (!Globals.ThisAddIn.GetSpellCheckerEngine(out engine)) { return(new string[0]); } string[] completed = engine.CompleteWord(preStr); completed = sessionLogger.Sort(completed); if (completed.Length > suggestionCount) { string[] shorterList = new string[suggestionCount]; for (int i = 0; i < suggestionCount; ++i) { shorterList[i] = completed[i]; } return(shorterList); } else { return(completed); } }
protected override StringVerificationData CheckNGramWordsList(TokenInfo[] readItems, int mainItemIndex) { if (String.IsNullOrEmpty(readItems[mainItemIndex].Value)) { return(null); } m_curWord1 = readItems[mainItemIndex].Value; m_curWord1 = StringUtil.NormalizeSpacesAndHalfSpacesInWord(m_curWord1).Normalize(NormalizationForm.FormC); m_curWord0 = mainItemIndex > 0 ? readItems[mainItemIndex - 1].Value : ""; m_curWord0 = StringUtil.NormalizeSpacesAndHalfSpacesInWord(m_curWord0).Normalize(NormalizationForm.FormC); m_curWord2 = mainItemIndex < readItems.Length - 1 ? readItems[mainItemIndex + 1].Value : ""; m_curWord2 = StringUtil.NormalizeSpacesAndHalfSpacesInWord(m_curWord2).Normalize(NormalizationForm.FormC); if (Globals.ThisAddIn.SpellCheckerWrapper.IgnoreList.IsExistInIgnoreList(m_curWord1)) { return(null); } SpaceCorrectionState scs; SuggestionType st; try { string[] sugs; if (m_isPrespellChecker) { if (m_engine.OnePassCorrection(m_curWord1, m_curWord0, m_curWord2, m_engine.SuggestionCount, out sugs, out st, out scs)) { return(null); } } else { if (m_engine.CheckSpelling(m_curWord1, m_curWord0, m_curWord2, m_engine.SuggestionCount, out sugs, out st, out scs)) { return(null); } } if (!m_isPrespellChecker) { sugs = m_sessionLogger.Sort(sugs); } m_lastSugs = sugs; m_lastSCS = scs; } catch (Exception) { // TODO: log //LogHelper.ErrorException("Exception in CheckSpelling", ex); return(null); } VerificationTypes recentErrorType; switch (st) { case SuggestionType.Green: recentErrorType = VerificationTypes.Warning; break; //case SuggestionType.Red: default: recentErrorType = VerificationTypes.Error; break; } m_curWordCombToCheck = m_curWord1; int startItemIndex, endItemIndex; if (scs == SpaceCorrectionState.SpaceInsertationLeft || scs == SpaceCorrectionState.SpaceInsertationLeftSerrially) { m_curWordCombToCheck = m_curWord1 + ' ' + m_curWord2; startItemIndex = mainItemIndex; endItemIndex = mainItemIndex + 1; } else if (scs == SpaceCorrectionState.SpaceInsertationRight || scs == SpaceCorrectionState.SpaceInsertationRightSerrially) { m_curWordCombToCheck = m_curWord0 + ' ' + m_curWord1; startItemIndex = mainItemIndex - 1; endItemIndex = mainItemIndex; } else { startItemIndex = mainItemIndex; endItemIndex = mainItemIndex; } if (Globals.ThisAddIn.SpellCheckerWrapper.IgnoreList.IsExistInIgnoreList(m_curWordCombToCheck)) { return(null); } return(new StringVerificationData { ErrorIndex = readItems[startItemIndex].Index, ErrorLength = readItems[endItemIndex].EndIndex - readItems[startItemIndex].Index + 1, ErrorType = recentErrorType, Suggestions = new SpellCheckerSuggestion { Message = "درج پیشنهاد:", SuggestionItems = m_lastSugs } }); }