private void MoveHorizontal(int count, InputModifiers modifiers)
{
var caretIndex = CaretIndex;
if (caretIndex > TextDocument.TextLength)
{
caretIndex = TextDocument.TextLength;
}
if (caretIndex >= 0)
{
if ((modifiers & InputModifiers.Control) != 0)
{
if (count > 0)
{
count =
TextUtilities.GetNextCaretPosition(TextDocument, caretIndex, TextUtilities.LogicalDirection.Forward,
TextUtilities.CaretPositioningMode.WordStartOrSymbol) - caretIndex;
}
else
{
count =
TextUtilities.GetNextCaretPosition(TextDocument, caretIndex, TextUtilities.LogicalDirection.Backward,
TextUtilities.CaretPositioningMode.WordStartOrSymbol) - caretIndex;
}
if (caretIndex + count <= TextDocument.TextLength && caretIndex + count >= 0)
{
CaretIndex += count;
}
}
else
{
if (count > 0)
{
for (var i = 0; i < Math.Abs(count); i++)
{
var line = TextDocument.GetLineByOffset(caretIndex);
if (caretIndex == line.EndOffset)
{
if (line.NextLine != null)
{
caretIndex = line.NextLine.Offset;
}
}
else
{
caretIndex = TextUtilities.GetNextCaretPosition(TextDocument, caretIndex, TextUtilities.LogicalDirection.Forward,
TextUtilities.CaretPositioningMode.Normal);
}
}
}
else
{
for (var i = 0; i < Math.Abs(count); i++)
{
var line = TextDocument.GetLineByOffset(caretIndex);
if (caretIndex == line.Offset)
{
if (line.PreviousLine != null)
{
caretIndex = line.PreviousLine.EndOffset;
}
}
else
{
caretIndex = TextUtilities.GetNextCaretPosition(TextDocument, caretIndex,
TextUtilities.LogicalDirection.Backward, TextUtilities.CaretPositioningMode.Normal);
}
}
}
CaretIndex = caretIndex;
}
SetHighestColumn();
}
}