public DiffResult GetDiff(string baseSources, string diffSource)
{
var result = new DiffResult();
var diff = Diff.DiffText(baseSources, diffSource, true, true, false);
baseSources = baseSources.Replace("\r", "");
diffSource = diffSource.Replace("\r", "");
var aLines = baseSources.Split('\n');
var bLines = diffSource.Split('\n');
var n = 0;
var leftLineNumber = 0;
var rightLineNumber = 0;
for (var diffItem = 0; diffItem < diff.Length; diffItem++)
{
var aItem = diff[diffItem];
// write unchanged lines
while ((n < aItem.StartB) && (n < bLines.Length))
{
result.LeftPan.Add(new DiffLineData(bLines[n], DiffActionType.None, leftLineNumber));
result.RightPan.Add(new DiffLineData(bLines[n], DiffActionType.None, rightLineNumber));
n++;
leftLineNumber++;
rightLineNumber++;
} // while
for (var m = 0; m < aItem.deletedA; m++)
{
result.LeftPan.Add(new DiffLineData(aLines[aItem.StartA + m], DiffActionType.Deleted, leftLineNumber));
result.RightPan.Add(new DiffLineData("", DiffActionType.None, -1));
leftLineNumber++;
} // for
// write inserted lines
while (n < aItem.StartB + aItem.insertedB)
{
result.RightPan.Add(new DiffLineData(bLines[n], DiffActionType.Added, rightLineNumber));
result.LeftPan.Add(new DiffLineData("", DiffActionType.None, -1));
n++;
rightLineNumber++;
}
}
// write rest of unchanged lines
while (n < bLines.Length)
{
result.LeftPan.Add(new DiffLineData(bLines[n], DiffActionType.None, leftLineNumber));
result.RightPan.Add(new DiffLineData(bLines[n], DiffActionType.None, rightLineNumber));
leftLineNumber++;
rightLineNumber++;
n++;
}
PostProcessPans(result);
return result;
}