Пример #1
0
        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
                }
            });
        }