public override bool DeletePrevious()
        {
            if (TextView.Selection.IsEmpty)
            {
                if (AdvancedCaret.InVirtualSpace)
                {
                    AdvancedCaret.MoveToPreviousCaretPosition();
                }
                else
                {
                    if (!CaretPoint.DeletePrevious())
                    {
                        return(false);
                    }
                    if (AdvancedCaret.InVirtualSpace)
                    {
                        AdvancedCaret.MoveTo(AdvancedCaret.Position.BufferPosition);
                    }
                }
            }
            else
            {
                if (!TextView.Selection.Delete())
                {
                    return(false);
                }
            }

            AdvancedCaret.EnsureVisible();

            return(true);
        }
        public override void MoveToPreviousCharacter(bool extendSelection)
        {
            VirtualSnapshotPoint oldCaretPoint = this.AdvancedCaret.Position.VirtualBufferPosition;
            TextPoint            startPoint    = TextView.Selection.GetStartPoint();
            bool selectionIsEmpty = TextView.Selection.IsEmpty;

            if (!extendSelection)
            {
                TextView.AdvancedTextView.Selection.Clear();
            }

            if (!extendSelection && !selectionIsEmpty)
            {
                MoveTo(startPoint.CurrentPosition);
            }
            else
            {
                AdvancedCaret.MoveToPreviousCaretPosition();
            }

            AdvancedCaret.EnsureVisible();
            UpdateSelection(extendSelection, oldCaretPoint);
        }