diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit.Tests/Utils/CaretNavigationTests.cs b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit.Tests/Utils/CaretNavigationTests.cs
index f86f651032..64845cb1e3 100644
--- a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit.Tests/Utils/CaretNavigationTests.cs
+++ b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit.Tests/Utils/CaretNavigationTests.cs
@@ -5,9 +5,10 @@
// $Revision$
//
-using ICSharpCode.AvalonEdit.Gui;
using System;
+using System.Windows.Documents;
using ICSharpCode.AvalonEdit.Document;
+using ICSharpCode.AvalonEdit.Gui;
using ICSharpCode.AvalonEdit.Utils;
using NUnit.Framework;
@@ -18,12 +19,12 @@ namespace ICSharpCode.AvalonEdit.Tests.Utils
{
int GetNextCaretStop(string text, int offset, CaretPositioningMode mode)
{
- return TextUtilities.GetNextCaretPosition(new StringTextSource(text), offset, false, mode);
+ return TextUtilities.GetNextCaretPosition(new StringTextSource(text), offset, LogicalDirection.Forward, mode);
}
int GetPrevCaretStop(string text, int offset, CaretPositioningMode mode)
{
- return TextUtilities.GetNextCaretPosition(new StringTextSource(text), offset, true, mode);
+ return TextUtilities.GetNextCaretPosition(new StringTextSource(text), offset, LogicalDirection.Backward, mode);
}
[Test]
diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Gui/Caret.cs b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Gui/Caret.cs
index 2f495eacad..5bbc70db08 100644
--- a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Gui/Caret.cs
+++ b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Gui/Caret.cs
@@ -8,7 +8,7 @@
using System;
using System.Diagnostics;
using System.Windows;
-using System.Windows.Controls;
+using System.Windows.Documents;
using System.Windows.Media.TextFormatting;
using System.Windows.Threading;
@@ -258,10 +258,10 @@ namespace ICSharpCode.AvalonEdit.Gui
}
}
// search possible caret position (first try forwards)
- int newVisualColumn = visualLine.GetNextCaretPosition(position.VisualColumn - 1, false, CaretPositioningMode.Normal);
+ int newVisualColumn = visualLine.GetNextCaretPosition(position.VisualColumn - 1, LogicalDirection.Forward, CaretPositioningMode.Normal);
if (newVisualColumn < 0) {
// then try backwards
- newVisualColumn = visualLine.GetNextCaretPosition(position.VisualColumn + 1, true, CaretPositioningMode.Normal);
+ newVisualColumn = visualLine.GetNextCaretPosition(position.VisualColumn + 1, LogicalDirection.Backward, CaretPositioningMode.Normal);
}
if (newVisualColumn >= 0 && newVisualColumn != position.VisualColumn) {
int newOffset = visualLine.GetRelativeOffset(newVisualColumn) + firstDocumentLineOffset;
diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Gui/CaretNavigationCommandHandler.cs b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Gui/CaretNavigationCommandHandler.cs
index 5df4b6b2eb..2b98c6a30c 100644
--- a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Gui/CaretNavigationCommandHandler.cs
+++ b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Gui/CaretNavigationCommandHandler.cs
@@ -210,7 +210,7 @@ namespace ICSharpCode.AvalonEdit.Gui
#region Home/End
static void MoveCaretToStartOfLine(TextArea textArea, VisualLine visualLine)
{
- int newVC = visualLine.GetNextCaretPosition(-1, false, CaretPositioningMode.WordStart);
+ int newVC = visualLine.GetNextCaretPosition(-1, LogicalDirection.Forward, CaretPositioningMode.WordStart);
// in empty lines (whitespace only), jump to the end
if (newVC < 0)
newVC = visualLine.VisualLength;
@@ -232,7 +232,7 @@ namespace ICSharpCode.AvalonEdit.Gui
#region By-character / By-word movement
static void MoveCaretRight(TextArea textArea, TextViewPosition caretPosition, VisualLine visualLine, CaretPositioningMode mode)
{
- int pos = visualLine.GetNextCaretPosition(caretPosition.VisualColumn, false, mode);
+ int pos = visualLine.GetNextCaretPosition(caretPosition.VisualColumn, LogicalDirection.Forward, mode);
if (pos >= 0) {
SetCaretPosition(textArea, pos, visualLine.GetRelativeOffset(pos) + visualLine.FirstDocumentLine.Offset);
} else {
@@ -243,7 +243,7 @@ namespace ICSharpCode.AvalonEdit.Gui
static void MoveCaretLeft(TextArea textArea, TextViewPosition caretPosition, VisualLine visualLine, CaretPositioningMode mode)
{
- int pos = visualLine.GetNextCaretPosition(caretPosition.VisualColumn, true, mode);
+ int pos = visualLine.GetNextCaretPosition(caretPosition.VisualColumn, LogicalDirection.Backward, mode);
if (pos >= 0) {
SetCaretPosition(textArea, pos, visualLine.GetRelativeOffset(pos) + visualLine.FirstDocumentLine.Offset);
} else if (caretPosition.Line > 1) {
diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Gui/NewLineElementGenerator.cs b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Gui/NewLineElementGenerator.cs
index 4b80e271b1..bbcb112951 100644
--- a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Gui/NewLineElementGenerator.cs
+++ b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Gui/NewLineElementGenerator.cs
@@ -7,6 +7,7 @@
using System;
using System.Windows;
+using System.Windows.Documents;
using System.Windows.Media;
using ICSharpCode.AvalonEdit.Document;
@@ -65,11 +66,11 @@ namespace ICSharpCode.AvalonEdit.Gui
BreakAfter = LineBreakCondition.BreakRestrained;
}
- public override int GetNextCaretPosition(int visualColumn, bool backwards, CaretPositioningMode mode)
+ public override int GetNextCaretPosition(int visualColumn, LogicalDirection direction, CaretPositioningMode mode)
{
// only place a caret stop before the newline, no caret stop after it
- if (visualColumn > this.VisualColumn && backwards ||
- visualColumn < this.VisualColumn && !backwards)
+ if (visualColumn > this.VisualColumn && direction == LogicalDirection.Backward ||
+ visualColumn < this.VisualColumn && direction == LogicalDirection.Forward)
{
return this.VisualColumn;
} else {
diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Gui/SelectionMouseHandler.cs b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Gui/SelectionMouseHandler.cs
index 000eadd009..4102aa6a22 100644
--- a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Gui/SelectionMouseHandler.cs
+++ b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Gui/SelectionMouseHandler.cs
@@ -10,6 +10,7 @@ using System.Diagnostics;
using System.Linq;
using System.Runtime.InteropServices;
using System.Windows;
+using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Threading;
@@ -390,10 +391,10 @@ namespace ICSharpCode.AvalonEdit.Gui
VisualLine line = textView.GetVisualLineFromVisualTop(pos.Y);
if (line != null) {
int visualColumn = line.GetVisualColumn(pos);
- int wordStartVC = line.GetNextCaretPosition(visualColumn + 1, true, CaretPositioningMode.WordStartOrSymbol);
+ int wordStartVC = line.GetNextCaretPosition(visualColumn + 1, LogicalDirection.Backward, CaretPositioningMode.WordStartOrSymbol);
if (wordStartVC == -1)
wordStartVC = 0;
- int wordEndVC = line.GetNextCaretPosition(wordStartVC, false, CaretPositioningMode.WordBorderOrSymbol);
+ int wordEndVC = line.GetNextCaretPosition(wordStartVC, LogicalDirection.Forward, CaretPositioningMode.WordBorderOrSymbol);
if (wordEndVC == -1)
wordEndVC = line.VisualLength;
int relOffset = line.FirstDocumentLine.Offset;
diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Gui/SingleCharacterElementGenerator.cs b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Gui/SingleCharacterElementGenerator.cs
index 499de2159f..39c6500970 100644
--- a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Gui/SingleCharacterElementGenerator.cs
+++ b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Gui/SingleCharacterElementGenerator.cs
@@ -5,13 +5,15 @@
// $Revision$
//
-using ICSharpCode.AvalonEdit.Utils;
using System;
using System.Globalization;
using System.Windows;
+using System.Windows.Documents;
using System.Windows.Media;
using System.Windows.Media.TextFormatting;
+
using ICSharpCode.AvalonEdit.Document;
+using ICSharpCode.AvalonEdit.Utils;
namespace ICSharpCode.AvalonEdit.Gui
{
@@ -154,10 +156,10 @@ namespace ICSharpCode.AvalonEdit.Gui
BreakAfter = LineBreakCondition.BreakDesired;
}
- public override int GetNextCaretPosition(int visualColumn, bool backwards, CaretPositioningMode mode)
+ public override int GetNextCaretPosition(int visualColumn, LogicalDirection direction, CaretPositioningMode mode)
{
if (mode == CaretPositioningMode.Normal)
- return base.GetNextCaretPosition(visualColumn, backwards, mode);
+ return base.GetNextCaretPosition(visualColumn, direction, mode);
else
return -1;
}
@@ -184,10 +186,10 @@ namespace ICSharpCode.AvalonEdit.Gui
throw new ArgumentOutOfRangeException("startVisualColumn");
}
- public override int GetNextCaretPosition(int visualColumn, bool backwards, CaretPositioningMode mode)
+ public override int GetNextCaretPosition(int visualColumn, LogicalDirection direction, CaretPositioningMode mode)
{
if (mode == CaretPositioningMode.Normal)
- return base.GetNextCaretPosition(visualColumn, backwards, mode);
+ return base.GetNextCaretPosition(visualColumn, direction, mode);
else
return -1;
}
diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Gui/VisualLine.cs b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Gui/VisualLine.cs
index 6f2cecd077..572d8d807d 100644
--- a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Gui/VisualLine.cs
+++ b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Gui/VisualLine.cs
@@ -10,6 +10,7 @@ using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Diagnostics;
using System.Windows;
+using System.Windows.Documents;
using System.Windows.Media.TextFormatting;
using ICSharpCode.AvalonEdit.Document;
@@ -315,22 +316,22 @@ namespace ICSharpCode.AvalonEdit.Gui
///
/// Gets the next possible caret position after visualColumn, or -1 if there is no caret position.
///
- public int GetNextCaretPosition(int visualColumn, bool backwards, CaretPositioningMode mode)
+ public int GetNextCaretPosition(int visualColumn, LogicalDirection direction, CaretPositioningMode mode)
{
if (elements.Count == 0) {
// special handling for empty visual lines:
// even though we don't have any elements,
// there's a single caret stop at visualColumn 0
- if (visualColumn < 0 && !backwards)
+ if (visualColumn < 0 && direction == LogicalDirection.Forward)
return 0;
- else if (visualColumn > 0 && backwards)
+ else if (visualColumn > 0 && direction == LogicalDirection.Backward)
return 0;
else
return -1;
}
int i;
- if (backwards) {
+ if (direction == LogicalDirection.Backward) {
// Search Backwards:
// If the last element doesn't handle line borders, return the line end as caret stop
if (visualColumn > this.VisualLength && !elements[elements.Count-1].HandlesLineBorders) {
@@ -345,7 +346,7 @@ namespace ICSharpCode.AvalonEdit.Gui
for (; i >= 0; i--) {
int pos = elements[i].GetNextCaretPosition(
Math.Min(visualColumn, elements[i].VisualColumn + elements[i].VisualLength + 1),
- backwards, mode);
+ direction, mode);
if (pos >= 0)
return pos;
}
@@ -367,7 +368,7 @@ namespace ICSharpCode.AvalonEdit.Gui
for (; i < elements.Count; i++) {
int pos = elements[i].GetNextCaretPosition(
Math.Max(visualColumn, elements[i].VisualColumn - 1),
- backwards, mode);
+ direction, mode);
if (pos >= 0)
return pos;
}
diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Gui/VisualLineElement.cs b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Gui/VisualLineElement.cs
index 728e2d480a..4205bf6a93 100644
--- a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Gui/VisualLineElement.cs
+++ b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Gui/VisualLineElement.cs
@@ -7,6 +7,7 @@
using System;
using System.Collections.Generic;
+using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media.TextFormatting;
@@ -167,18 +168,18 @@ namespace ICSharpCode.AvalonEdit.Gui
/// Gets the next caret position inside this element.
///
/// The visual column from which the search should be started.
- /// Whether to search backwards (false=forwards,true=backwards).
+ /// The search direction (forwards or backwards).
/// Whether to stop only at word borders.
/// The visual column of the next caret position, or -1 if there is no next caret position.
///
/// In the space between two line elements, it is sufficient that one of them contains a caret position;
/// though in many cases, both of them contain one.
///
- public virtual int GetNextCaretPosition(int visualColumn, bool backwards, CaretPositioningMode mode)
+ public virtual int GetNextCaretPosition(int visualColumn, LogicalDirection direction, CaretPositioningMode mode)
{
int stop1 = this.VisualColumn;
int stop2 = this.VisualColumn + this.VisualLength;
- if (backwards) {
+ if (direction == LogicalDirection.Backward) {
if (visualColumn > stop2 && mode != CaretPositioningMode.WordStart && mode != CaretPositioningMode.WordStartOrSymbol)
return stop2;
else if (visualColumn > stop1)
diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Gui/VisualLineText.cs b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Gui/VisualLineText.cs
index 6b5408398e..73b2154991 100644
--- a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Gui/VisualLineText.cs
+++ b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Gui/VisualLineText.cs
@@ -5,11 +5,13 @@
// $Revision$
//
-using ICSharpCode.AvalonEdit.Utils;
using System;
using System.Collections.Generic;
+using System.Windows.Documents;
using System.Windows.Media.TextFormatting;
+
using ICSharpCode.AvalonEdit.Document;
+using ICSharpCode.AvalonEdit.Utils;
namespace ICSharpCode.AvalonEdit.Gui
{
@@ -92,13 +94,13 @@ namespace ICSharpCode.AvalonEdit.Gui
}
///
- public override int GetNextCaretPosition(int visualColumn, bool backwards, CaretPositioningMode mode)
+ public override int GetNextCaretPosition(int visualColumn, LogicalDirection direction, CaretPositioningMode mode)
{
int textOffset = parentVisualLine.FirstDocumentLine.Offset + this.RelativeTextOffset;
TextSourceView view = new TextSourceView(
parentVisualLine.FirstDocumentLine.Document,
new SimpleSegment(textOffset, this.DocumentLength));
- int pos = TextUtilities.GetNextCaretPosition(view, visualColumn - this.VisualColumn, backwards, mode);
+ int pos = TextUtilities.GetNextCaretPosition(view, visualColumn - this.VisualColumn, direction, mode);
if (pos < 0)
return pos;
else
diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Utils/TextUtilities.cs b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Utils/TextUtilities.cs
index 4441109ae2..81d0e2c3df 100644
--- a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Utils/TextUtilities.cs
+++ b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Utils/TextUtilities.cs
@@ -7,7 +7,7 @@
using System;
using System.Globalization;
-using System.Text;
+using System.Windows.Documents;
using ICSharpCode.AvalonEdit.Document;
using ICSharpCode.AvalonEdit.Gui;
@@ -135,11 +135,11 @@ namespace ICSharpCode.AvalonEdit.Utils
///
/// The text source.
/// The start offset inside the text source.
- /// True to look backwards, false to look forwards.
+ /// The search direction (forwards or backwards).
/// The mode for caret positioning.
/// The offset of the next caret position, or -1 if there is no further caret position
/// in the text source.
- public static int GetNextCaretPosition(ITextSource textSource, int offset, bool backwards, CaretPositioningMode mode)
+ public static int GetNextCaretPosition(ITextSource textSource, int offset, LogicalDirection direction, CaretPositioningMode mode)
{
if (textSource == null)
throw new ArgumentNullException("textSource");
@@ -151,17 +151,22 @@ namespace ICSharpCode.AvalonEdit.Utils
{
throw new ArgumentException("Unsupported CaretPositioningMode: " + mode, "mode");
}
+ if (direction != LogicalDirection.Backward
+ && direction != LogicalDirection.Forward)
+ {
+ throw new ArgumentException("Invalid LogicalDirection: " + direction, "direction");
+ }
int textLength = textSource.TextLength;
if (textLength <= 0) {
// empty document? has a normal caret position at 0, though no word borders
if (mode == CaretPositioningMode.Normal) {
- if (offset > 0 && backwards) return 0;
- if (offset < 0 && !backwards) return 0;
+ if (offset > 0 && direction == LogicalDirection.Backward) return 0;
+ if (offset < 0 && direction == LogicalDirection.Forward) return 0;
}
return -1;
}
while (true) {
- int nextPos = backwards ? offset - 1 : offset + 1;
+ int nextPos = (direction == LogicalDirection.Backward) ? offset - 1 : offset + 1;
// return -1 if there is no further caret position in the text source
// we also need this to handle offset values outside the valid range