Ejemplo n.º 1
0
        public void Compare(int[] matches, string wmLeft, string wmRight, CharRepresenter charRep)
        {
            SidesEqual = false;
            if (!HasRightLine || !HasLeftLine)
            {
                throw new ArgumentException("Cannot be compared without having lines for both sides");
            }

            if (matches.Count(i => i < 0) > matches.Length / 2f)               //not similar enough
            {
                leftDiffRanges = rightDiffRanges = null;
                return;
            }

            leftDiffRanges  = new List <LineRange>();
            rightDiffRanges = new List <LineRange>();

            int i1 = 0, i2 = 0;
            int offset1 = 0, offset2 = 0;

            foreach (var(range1, range2) in LineMatching.UnmatchedRanges(matches, wmRight.Length))
            {
                while (i1 < range1.start)
                {
                    offset1 += charRep.GetWord(wmLeft[i1++]).Length;
                }
                while (i2 < range2.start)
                {
                    offset2 += charRep.GetWord(wmRight[i2++]).Length;
                }

                int start1 = offset1, start2 = offset2;
                while (i1 < range1.end)
                {
                    offset1 += charRep.GetWord(wmLeft[i1++]).Length;
                }
                while (i2 < range2.end)
                {
                    offset2 += charRep.GetWord(wmRight[i2++]).Length;
                }

                leftDiffRanges.Add(new LineRange {
                    start = start1, end = offset1
                });
                rightDiffRanges.Add(new LineRange {
                    start = start2, end = offset2
                });
            }
        }
Ejemplo n.º 2
0
            public void Recompare(MatchedLineNode node, string ourLine, string otherLine)
            {
                if (ourLine == otherLine)
                {
                    node.SetEqual();
                    return;
                }

                var charRep = new CharRepresenter();
                var wmLeft  = charRep.WordsToChars(side ? otherLine : ourLine);
                var wmRight = charRep.WordsToChars(side ? ourLine : otherLine);
                var match   = new PatienceMatch().Match(wmLeft, wmRight, charRep.MaxWordChar);

                node.Compare(match, wmLeft, wmRight, charRep);
            }
Ejemplo n.º 3
0
        private void CompareMatched(IReadOnlyList <string> wmLeft, IReadOnlyList <string> wmRight, CharRepresenter charRep)
        {
            var matcher = new PatienceMatch();

            int leftLineNo = 0, rightLineNo = 0;

            foreach (var line in this)
            {
                if (line.HasLeftLine && line.HasRightLine)
                {
                    string left = wmLeft[leftLineNo], right = wmRight[rightLineNo];
                    if (left == right)
                    {
                        line.SetEqual();
                    }
                    else
                    {
                        var match = matcher.Match(left, right, charRep.MaxWordChar);
                        line.Compare(match, left, right, charRep);
                    }
                }

                if (line.HasLeftLine)
                {
                    leftLineNo++;
                }
                if (line.HasRightLine)
                {
                    rightLineNo++;
                }
            }
        }