Exemplo n.º 1
0
        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);
                }
            }
        }
Exemplo n.º 2
0
		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);
				}
			}
		}