private void ProcessConflict(Merge.Conflict conflict) { string[] userLines = SlyceMerge.GetLinesFromRange(user, conflict.Ranges[Merge.UserIndex]); string[] newgenLines = SlyceMerge.GetLinesFromRange(newgen, conflict.Ranges[Merge.NewGenIndex]); if (userLines.Length == 0 && newgenLines.Length == 0) { // user and template have both deleted some lines. Add them in as virtual lines. foreach (string line in SlyceMerge.GetLinesFromRange(prevgen, conflict.Ranges[Merge.PrevGenIndex])) { vdo.AddLineToLeft(line, ChangeType.UserAndTemplate); } return; } Diff diff = new Diff(userLines, newgenLines, true, true); foreach (Diff.Hunk hunk in diff) { if (hunk.Same) { foreach (string line in hunk.Original()) { vdo.AddLine(line, ChangeType.None); } continue; } // Conflict VisualDiffOutput.ConflictRange crange = new VisualDiffOutput.ConflictRange(); crange.StartLineIndex = vdo.LeftLines.Count; for (int i = hunk.Left.Start; i <= hunk.Left.End; i++) { vdo.LeftLines.Add(new DiffLine(userLines[i], ChangeType.User)); vdo.RightLines.Add(new DiffLine("", ChangeType.User, true)); } for (int i = hunk.Right.Start; i <= hunk.Right.End; i++) { vdo.LeftLines.Add(new DiffLine(newgenLines[i], ChangeType.Template)); vdo.RightLines.Add(new DiffLine("", ChangeType.Template, true)); } crange.EndLineIndex = vdo.LeftLines.Count; vdo.ConflictRanges.Add(crange); vdo.DiffType = TypeOfDiff.Conflict; } }