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 }); } }
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); }
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++; } } }