AvalonStudio.TextEditor.TextEditor.MoveHorizontal C# (CSharp) Method

MoveHorizontal() private method

private MoveHorizontal ( int count, InputModifiers modifiers ) : void
count int
modifiers InputModifiers
return void
        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();
            }
        }