protected virtual void UndoChange (MonoTextEditor fromEditor, MonoTextEditor toEditor, Hunk hunk)
{
using (var undo = toEditor.OpenUndoGroup ()) {
var start = toEditor.Document.GetLine (hunk.InsertStart);
int toOffset = start != null ? start.Offset : toEditor.Document.TextLength;
int replaceLength = 0;
if (start != null && hunk.Inserted > 0) {
int line = Math.Min (hunk.InsertStart + hunk.Inserted - 1, toEditor.Document.LineCount);
var end = toEditor.Document.GetLine (line);
replaceLength = end.EndOffsetIncludingDelimiter - start.Offset;
}
if (hunk.Removed > 0) {
start = fromEditor.Document.GetLine (Math.Min (hunk.RemoveStart, fromEditor.Document.LineCount));
int line = Math.Min (hunk.RemoveStart + hunk.Removed - 1, fromEditor.Document.LineCount);
var end = fromEditor.Document.GetLine (line);
toEditor.Replace (
toOffset,
replaceLength,
fromEditor.Document.GetTextBetween (start.Offset, end.EndOffsetIncludingDelimiter)
);
} else if (replaceLength > 0) {
toEditor.Remove (toOffset, replaceLength);
}
}
}