Browse Source

When replacing the whole document, ensure the deleted lines have IsDeleted set to true.

pull/470/head
Daniel Grunwald 11 years ago
parent
commit
8698272c4b
  1. 7
      src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit.Tests/Document/LineManagerTests.cs
  2. 8
      src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Document/LineManager.cs

7
src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit.Tests/Document/LineManagerTests.cs

@ -18,6 +18,7 @@ @@ -18,6 +18,7 @@
using System;
using System.Collections.Generic;
using System.Linq;
using NUnit.Framework;
namespace ICSharpCode.AvalonEdit.Document
@ -46,10 +47,16 @@ namespace ICSharpCode.AvalonEdit.Document @@ -46,10 +47,16 @@ namespace ICSharpCode.AvalonEdit.Document
{
document.Text = "Hello,\nWorld!";
Assert.AreEqual(2, document.LineCount);
var oldLines = document.Lines.ToArray();
document.Text = "";
Assert.AreEqual("", document.Text);
Assert.AreEqual(0, document.TextLength);
Assert.AreEqual(1, document.LineCount);
Assert.AreSame(oldLines[0], document.Lines.Single());
Assert.IsFalse(oldLines[0].IsDeleted);
Assert.IsTrue(oldLines[1].IsDeleted);
Assert.IsNull(oldLines[0].NextLine);
Assert.IsNull(oldLines[1].PreviousLine);
}
[Test]

8
src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Document/LineManager.cs

@ -105,6 +105,13 @@ namespace ICSharpCode.AvalonEdit.Document @@ -105,6 +105,13 @@ namespace ICSharpCode.AvalonEdit.Document
{
// keep the first document line
DocumentLine ls = documentLineTree.GetByNumber(1);
// but mark all other lines as deleted, and detach them from the other nodes
for (DocumentLine line = ls.NextLine; line != null; line = line.NextLine) {
line.isDeleted = true;
line.parent = line.left = line.right = null;
}
// Reset the first line to detach it from the deleted lines
ls.ResetLine();
SimpleSegment ds = NewLineFinder.NextNewLine(document, 0);
List<DocumentLine> lines = new List<DocumentLine>();
int lastDelimiterEnd = 0;
@ -117,7 +124,6 @@ namespace ICSharpCode.AvalonEdit.Document @@ -117,7 +124,6 @@ namespace ICSharpCode.AvalonEdit.Document
ls = new DocumentLine(document);
ds = NewLineFinder.NextNewLine(document, lastDelimiterEnd);
}
ls.ResetLine();
ls.TotalLength = document.TextLength - lastDelimiterEnd;
lines.Add(ls);
documentLineTree.RebuildTree(lines);

Loading…
Cancel
Save