示例#1
0
        private void PerformReplaceAll(KeyValuePair <NumberChangeRule.InputFormats, NumberChangeRule.InputDigitLanguages> ruleKey, KeyValuePair <NumberChangeRule.OutputFormats, NumberChangeRule.OutputDigitLanguages> ruleValue)
        {
            foreach (var par in RangeWrapper.ReadParagraphs(Document))
            {
                if (CancelationPending)
                {
                    break;
                }

                if (!par.IsRangeValid)
                {
                    continue;
                }

                string rawParText = par.Text;
                string parText    = rawParText;
                if (NeedRefinedStrings)
                {
                    parText = StringUtil.RefineAndFilterPersianWord(parText);
                }


                int startFrom = 0;
                int len       = parText.Length;

                var sbRawText = new StringBuilder(rawParText);
                var sbParText = new StringBuilder(parText);

                string parToVerify = parText; // parToVerify is going to shrink while parText is fixed
                while (startFrom < len)
                {
                    var lstPats = FindNumberPatterns(parToVerify);
                    if (lstPats == null || lstPats.Count <= 0)
                    {
                        break;
                    }

                    if (CancelationPending)
                    {
                        break;
                    }

                    IPatternInfo minPi = lstPats[0];

                    int startIndex    = minPi.Index + startFrom;
                    int endIndex      = minPi.Index + minPi.Length - 1 + startFrom;
                    int rawStartIndex = StringUtil.IndexInNotFilterAndRefinedString(sbRawText.ToString(), startIndex);
                    int rawEndIndex   = StringUtil.IndexInNotFilterAndRefinedString(sbRawText.ToString(), endIndex);


                    NumberChangeRule.InputFormats        inpFormat;
                    NumberChangeRule.InputDigitLanguages inpLang;
                    NumberChangeRule.DectectInputFormat(minPi.Content, out inpFormat, out inpLang);

                    int forwardingOffset = 0;
                    if (ruleKey.Key == inpFormat && ruleKey.Value == inpLang)
                    {
                        string suggestion = NumberParsersSuggestions.CreateSuggestionFor(minPi, ruleValue);

                        if (!String.IsNullOrEmpty(suggestion))
                        {
                            RangeWrapper foundRange;

                            if (NeedRefinedStrings)
                            {
                                foundRange = par.GetRangeWithCharIndex(rawStartIndex, rawEndIndex);
                            }
                            else
                            {
                                foundRange = par.GetRangeWithCharIndex(startIndex, endIndex);
                            }

                            if (foundRange.IsRangeValid && foundRange.Text != suggestion)
                            {
                                if (foundRange.TryChangeText(suggestion))
                                {
                                    if (NeedRefinedStrings)
                                    {
                                        sbRawText.Remove(rawStartIndex, rawEndIndex - rawStartIndex + 1);
                                        sbRawText.Insert(rawStartIndex, suggestion);
                                    }

                                    sbParText.Remove(startIndex, endIndex - startIndex + 1);
                                    sbParText.Insert(startIndex, suggestion);

                                    //System.Diagnostics.Debug.WriteLine(sbParText);
                                    //System.Diagnostics.Debug.WriteLine("---------------------------");

                                    len = sbParText.Length;
                                    forwardingOffset = suggestion.Length - minPi.Length;
                                }
                            }
                        } // end if (suggestions count > 0)
                    }     // end if (minPi content matches change rule)

                    startFrom = endIndex + 1 + forwardingOffset;
                    if (startFrom >= len)
                    {
                        break;
                    }
                    parToVerify = sbParText.ToString().Substring(startFrom);
                }
            }
        }
示例#2
0
 private string[] CreateSuggestions(IPatternInfo minPi)
 {
     return(NumberParsersSuggestions.CreateSuggestions(m_changeRules, minPi));
 }