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);
}
}
if (Variables.RTL)
{
Result.AppendFormat(@"<tr onclick='window.external.GoTo({1})' ondblclick='window.external.UndoChange({0},{1})'>
<td>+</td>
<td class='diff-addedline'>", rightLine, leftLine);
Result.Append(right);
Result.Append(@" </td>
<td>-</td>
<td class='diff-deletedline'>");
Result.Append(left);
Result.Append(@" </td>
</tr>");
}
else
{
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>");
}
}