internal 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.Length; 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); } } }
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); } } }