diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Document/ITextSource.cs b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Document/ITextSource.cs
index 42bdc4f5c5..5f25b65e99 100644
--- a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Document/ITextSource.cs
+++ b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Document/ITextSource.cs
@@ -78,6 +78,7 @@ namespace ICSharpCode.AvalonEdit.Document
/// Implements the ITextSource interface by wrapping another TextSource
/// and viewing only a part of the text.
///
+ [Obsolete("This class will be removed in a future version of AvalonEdit")]
public sealed class TextSourceView : ITextSource
{
readonly ITextSource baseTextSource;
diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Document/TextUtilities.cs b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Document/TextUtilities.cs
index 17ec1f309a..ad3389c3fb 100644
--- a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Document/TextUtilities.cs
+++ b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Document/TextUtilities.cs
@@ -243,8 +243,8 @@ namespace ICSharpCode.AvalonEdit.Document
/// in the text source.
///
/// This method is NOT equivalent to the actual caret movement when using VisualLine.GetNextCaretPosition.
- /// In real caret movement, there are additional caret stops at line starts and ends. However, this method
- /// doesn't know anything about lines: it is often called with a textSource that represents only a single VisualTextElement.
+ /// In real caret movement, there are additional caret stops at line starts and ends. This method
+ /// treats linefeeds as simple whitespace.
///
public static int GetNextCaretPosition(ITextSource textSource, int offset, LogicalDirection direction, CaretPositioningMode mode)
{
diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Document/UndoStack.cs b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Document/UndoStack.cs
index a7a153d4ff..57d9967302 100644
--- a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Document/UndoStack.cs
+++ b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Document/UndoStack.cs
@@ -22,7 +22,7 @@ namespace ICSharpCode.AvalonEdit.Document
Deque undostack = new Deque();
Deque redostack = new Deque();
- int sizeLimit = 1000;
+ int sizeLimit = int.MaxValue;
bool acceptChanges = true;
///
@@ -51,7 +51,6 @@ namespace ICSharpCode.AvalonEdit.Document
///
/// Gets/Sets the limit on the number of items on the undo stack.
- /// The default value is 1000.
///
/// The size limit is enforced only on the number of stored top-level undo groups.
/// Elements within undo groups do not count towards the size limit.
diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Rendering/VisualLine.cs b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Rendering/VisualLine.cs
index c61394b326..eae09fe65a 100644
--- a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Rendering/VisualLine.cs
+++ b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Rendering/VisualLine.cs
@@ -52,6 +52,16 @@ namespace ICSharpCode.AvalonEdit.Rendering
///
public ReadOnlyCollection TextLines { get; private set; }
+ ///
+ /// Gets the start offset of the VisualLine inside the document.
+ /// This is equivalent to FirstDocumentLine.Offset.
+ ///
+ public int StartOffset {
+ get {
+ return FirstDocumentLine.Offset;
+ }
+ }
+
///
/// Length in visual line coordinates.
///
@@ -334,7 +344,7 @@ namespace ICSharpCode.AvalonEdit.Rendering
if (direction == LogicalDirection.Backward) {
// Search Backwards:
// If the last element doesn't handle line borders, return the line end as caret stop
- // (we don't check the mode here: we treat a line end as word start, border, etc.
+
if (visualColumn > this.VisualLength && !elements[elements.Count-1].HandlesLineBorders && HasImplicitStopAtLineEnd(mode)) {
return this.VisualLength;
}
diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Rendering/VisualLineText.cs b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Rendering/VisualLineText.cs
index ed909c010a..b4876d6889 100644
--- a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Rendering/VisualLineText.cs
+++ b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Rendering/VisualLineText.cs
@@ -90,21 +90,18 @@ namespace ICSharpCode.AvalonEdit.Rendering
///
public override int GetVisualColumn(int relativeTextOffset)
{
- return VisualColumn + relativeTextOffset - this.RelativeTextOffset;
+ return this.VisualColumn + relativeTextOffset - this.RelativeTextOffset;
}
///
public override int GetNextCaretPosition(int visualColumn, LogicalDirection direction, CaretPositioningMode mode)
{
- int textOffset = parentVisualLine.FirstDocumentLine.Offset + this.RelativeTextOffset;
- TextSourceView view = new TextSourceView(
- parentVisualLine.Document,
- new SimpleSegment(textOffset, this.DocumentLength));
- int pos = TextUtilities.GetNextCaretPosition(view, visualColumn - this.VisualColumn, direction, mode);
- if (pos < 0)
- return pos;
+ int textOffset = parentVisualLine.StartOffset + this.RelativeTextOffset;
+ int pos = TextUtilities.GetNextCaretPosition(parentVisualLine.Document, textOffset + visualColumn - this.VisualColumn, direction, mode);
+ if (pos < textOffset || pos > textOffset + this.DocumentLength)
+ return -1;
else
- return this.VisualColumn + pos;
+ return this.VisualColumn + pos - textOffset;
}
}
}
diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Utils/Deque.cs b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Utils/Deque.cs
index e249378d2e..8b108ef163 100644
--- a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Utils/Deque.cs
+++ b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Utils/Deque.cs
@@ -15,6 +15,7 @@ namespace ICSharpCode.AvalonEdit.Utils
/// Double-ended queue.
///
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1710:IdentifiersShouldHaveCorrectSuffix")]
+ [Serializable]
public class Deque : ICollection
{
T[] arr = Empty.Array;