private void LineChanged(int leftLine, int rightLine) { // some kind of glitch with the diff engine if (LeftLines[leftLine] == RightLines[rightLine]) { ContextLine(rightLine); return; } StringBuilder left = new StringBuilder(); StringBuilder right = new StringBuilder(); List <Word> leftList = Word.SplitString(LeftLines[leftLine]); List <Word> rightList = Word.SplitString(RightLines[rightLine]); diff = new Diff(leftList, rightList, Word.Comparer); foreach (Diff.Hunk h in diff) { if (h.Same) { for (int i = 0; i < h.Left.Count; i++) { WhitespaceDiff(left, rightList[h.Right.Start + i], leftList[h.Left.Start + i]); WhitespaceDiff(right, leftList[h.Left.Start + i], rightList[h.Right.Start + i]); } } else { WordDiff(left, h.Left, h.Right, leftList, rightList); WordDiff(right, h.Right, h.Left, rightList, leftList); } } Result.AppendFormat(@"<tr onclick='window.external.GoTo({1})' ondblclick='window.external.UndoChange({0},{1})'> <td>-</td> <td class='diff-deletedline'>", leftLine, rightLine); Result.Append(left); Result.Append(@" </td> <td>+</td> <td class='diff-addedline'>"); Result.Append(right); Result.Append(@" </td> </tr>"); }