Browse Source

fixed bug in GetEdits-foreach loop

pull/15/head
Siegfried Pammer 16 years ago
parent
commit
8ed774bf3c
  1. 17
      src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/DefaultChangeWatcher.cs

17
src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/DefaultChangeWatcher.cs

@ -61,12 +61,12 @@ namespace ICSharpCode.AvalonEdit.AddIn @@ -61,12 +61,12 @@ namespace ICSharpCode.AvalonEdit.AddIn
Stream baseFileStream = GetBaseVersion();
byte[] baseFile = new byte[baseFileStream.Length];
baseFileStream.Read(baseFile, 0, baseFile.Length);
ReadAll(baseFileStream, baseFile);
Stream currentFileStream = GetCurrentVersion();
byte[] currentFile = new byte[currentFileStream.Length];
currentFileStream.Read(currentFile, 0, currentFileStream.Length);
ReadAll(currentFileStream, currentFile);
MyersDiff diff = new MyersDiff(new RawText(baseFile), new RawText(currentFile));
@ -74,13 +74,26 @@ namespace ICSharpCode.AvalonEdit.AddIn @@ -74,13 +74,26 @@ namespace ICSharpCode.AvalonEdit.AddIn
changeList.InsertRange(0, document.TotalNumberOfLines + 1, new LineChangeInfo(ChangeType.None, ""));
else {
changeList.Add(new LineChangeInfo(ChangeType.None, ""));
int lastEnd = 0;
foreach (Edit edit in diff.GetEdits()) {
changeList.InsertRange(changeList.Count, edit.BeginB - lastEnd, new LineChangeInfo(ChangeType.None, ""));
changeList.InsertRange(changeList.Count, edit.EndB - edit.BeginB, new LineChangeInfo(edit.EditType, ""));
lastEnd = edit.EndB;
}
changeList.InsertRange(changeList.Count, document.TotalNumberOfLines - lastEnd, new LineChangeInfo(ChangeType.None, ""));
}
OnChangeOccurred(EventArgs.Empty);
}
void ReadAll(Stream stream, byte[] buffer)
{
int offset = 0;
int readBytes = 0;
while ((readBytes = stream.Read(buffer, offset, buffer.Length - offset)) > 0)
offset += readBytes;
}
Stream GetBaseVersion()
{

Loading…
Cancel
Save