示例#1
0
        private void InitializeUniquePart(int lastUniqueWordIndex, bool fullParentMatched)
        {
            this.lastUniqueWord = ((lastUniqueWordIndex < this.childBodyFragment.EndWordIndex) ? lastUniqueWordIndex : (this.childBodyFragment.EndWordIndex - 1));
            int lastNormalFragmentIndex = BodyDiffer.GetLastNormalFragmentIndex(this.childBodyFragment, lastUniqueWordIndex);
            int num = (this.ChildScanner.Fragments.Count > lastNormalFragmentIndex + 1) ? ((int)this.ChildScanner.Fragments[lastNormalFragmentIndex + 1].FirstLine) : this.childBodyFragment.EndLineIndex;

            num = ((num >= this.childBodyFragment.EndLineIndex) ? this.childBodyFragment.EndLineIndex : num);
            int startLineIndex = this.childBodyFragment.StartLineIndex;

            FragmentInfo.TrimBoundary(this.ChildScanner, ref startLineIndex, ref num);
            if (fullParentMatched)
            {
                for (int i = this.childBodyFragment.StartLineIndex; i < num; i++)
                {
                    if ((ulong)this.ChildScanner.Lines[i].FirstWordIndex > (ulong)((long)this.lastUniqueWord))
                    {
                        num = i;
                        FragmentInfo.TrimBoundary(this.ChildScanner, ref startLineIndex, ref num);
                        if (num > 0 && this.ChildScanner.Lines[num - 1].Category == ConversationBodyScanner.Scanner.LineCategory.PotentialNonMsHeader)
                        {
                            num--;
                        }
                    }
                }
            }
            this.uniqueBodyPart = new FragmentInfo(this.ChildScanner, startLineIndex, num);
        }
示例#2
0
        private void WordByWordDiff()
        {
            if (this.parentBodyFragment.StartWordIndex == this.parentBodyFragment.EndWordIndex)
            {
                this.uniqueBodyPart = this.childBodyFragment.Trim();
                return;
            }
            if (this.childBodyFragment.IsEmpty)
            {
                return;
            }
            int lastNormalFragmentIndex  = BodyDiffer.GetLastNormalFragmentIndex(this.parentBodyFragment, this.parentBodyFragment.EndWordIndex);
            int lastNormalFragmentIndex2 = BodyDiffer.GetLastNormalFragmentIndex(this.childBodyFragment, this.childBodyFragment.EndWordIndex);
            int num  = this.childBodyFragment.StartWordIndex;
            int num2 = this.parentBodyFragment.StartWordIndex;
            int disclaimerWordStart = this.childBodyFragment.EndWordIndex;

            if (lastNormalFragmentIndex < this.ParentScanner.Fragments.Count && lastNormalFragmentIndex2 < this.ChildScanner.Fragments.Count && this.ParentScanner.Fragments[lastNormalFragmentIndex].FirstWord < this.parentBodyFragment.EndWordIndex && this.ChildScanner.Fragments[lastNormalFragmentIndex2].FirstWord < this.childBodyFragment.EndWordIndex)
            {
                num  = this.ChildScanner.Fragments[lastNormalFragmentIndex2].FirstWord;
                num2 = this.ParentScanner.Fragments[lastNormalFragmentIndex].FirstWord;
                while (num < this.childBodyFragment.EndWordIndex && num2 < this.parentBodyFragment.EndWordIndex && this.MatchWord(ref num, ref num2, true, 0))
                {
                    num++;
                    num2++;
                }
            }
            if (num2 != this.parentBodyFragment.EndWordIndex)
            {
                num  = this.childBodyFragment.EndWordIndex - 1;
                num2 = this.parentBodyFragment.EndWordIndex - 1;
            }
            else
            {
                disclaimerWordStart = num;
                num  = this.ChildScanner.Fragments[lastNormalFragmentIndex2].FirstWord - 1;
                num2 = this.ParentScanner.Fragments[lastNormalFragmentIndex].FirstWord - 1;
            }
            while (num >= this.childBodyFragment.StartWordIndex && num2 >= this.parentBodyFragment.StartWordIndex && this.MatchWord(ref num, ref num2, false, 0))
            {
                num--;
                num2--;
            }
            this.InitializeUniquePart(num, num2 < 0);
            this.InitializeDisclaimerPart(disclaimerWordStart);
            if (this.uniqueBodyPart.IsEmpty && !this.disclaimerPart.IsEmpty)
            {
                this.uniqueBodyPart = this.disclaimerPart;
                this.disclaimerPart = FragmentInfo.Empty;
            }
        }