// Token: 0x060072A9 RID: 29353 RVA: 0x0020EF7C File Offset: 0x0020D17C
        internal override bool IsAtCaretUnitBoundary(ITextPointer position)
        {
            if (!this.IsValid)
            {
                throw new InvalidOperationException(SR.Get("TextViewInvalidLayout"));
            }
            ValidationHelper.VerifyPosition(this._textContainer, position, "position");
            int lineFromPosition = TextParagraphView.GetLineFromPosition(this.Lines, position);
            int startPositionCP  = this.Lines[lineFromPosition].StartPositionCP;

            return(this._owner.IsAtCaretUnitBoundary(position, startPositionCP, lineFromPosition));
        }
        // Token: 0x060072AB RID: 29355 RVA: 0x0020F058 File Offset: 0x0020D258
        internal override ITextPointer GetBackspaceCaretUnitPosition(ITextPointer position)
        {
            if (!this.IsValid)
            {
                throw new InvalidOperationException(SR.Get("TextViewInvalidLayout"));
            }
            ValidationHelper.VerifyPosition(this._textContainer, position, "position");
            int          lineFromPosition           = TextParagraphView.GetLineFromPosition(this.Lines, position);
            int          startPositionCP            = this.Lines[lineFromPosition].StartPositionCP;
            ITextPointer backspaceCaretUnitPosition = this._owner.GetBackspaceCaretUnitPosition(position, startPositionCP, lineFromPosition);

            Invariant.Assert(backspaceCaretUnitPosition == null || backspaceCaretUnitPosition.HasValidLayout);
            return(backspaceCaretUnitPosition);
        }
        // Token: 0x060072AC RID: 29356 RVA: 0x0020F0D0 File Offset: 0x0020D2D0
        internal override TextSegment GetLineRange(ITextPointer position)
        {
            if (!this.IsValid)
            {
                throw new InvalidOperationException(SR.Get("TextViewInvalidLayout"));
            }
            if (position == null)
            {
                throw new ArgumentNullException("position");
            }
            ValidationHelper.VerifyPosition(this._textContainer, position, "position");
            ReadOnlyCollection <LineResult> lines = this.Lines;
            int lineFromPosition = TextParagraphView.GetLineFromPosition(lines, position);

            return(new TextSegment(lines[lineFromPosition].StartPosition, lines[lineFromPosition].GetContentEndPosition(), true));
        }
        // Token: 0x060072A8 RID: 29352 RVA: 0x0020EE9C File Offset: 0x0020D09C
        internal override ITextPointer GetPositionAtNextLine(ITextPointer position, double suggestedX, int count, out double newSuggestedX, out int linesMoved)
        {
            if (!this.IsValid)
            {
                throw new InvalidOperationException(SR.Get("TextViewInvalidLayout"));
            }
            if (position == null)
            {
                throw new ArgumentNullException("position");
            }
            ValidationHelper.VerifyPosition(this._textContainer, position, "position");
            newSuggestedX = suggestedX;
            linesMoved    = 0;
            if (count == 0)
            {
                return(position);
            }
            ReadOnlyCollection <LineResult> lines = this.Lines;
            int num = TextParagraphView.GetLineFromPosition(lines, position);

            if (num < 0 || num >= lines.Count)
            {
                throw new ArgumentOutOfRangeException("position");
            }
            int num2 = num;

            num        = Math.Max(0, num + count);
            num        = Math.Min(lines.Count - 1, num);
            linesMoved = num - num2;
            ITextPointer textPointer;

            if (linesMoved == 0)
            {
                textPointer = position;
            }
            else if (!DoubleUtil.IsNaN(suggestedX))
            {
                textPointer = lines[num].GetTextPositionFromDistance(suggestedX);
            }
            else
            {
                textPointer = lines[num].StartPosition.CreatePointer(LogicalDirection.Forward);
            }
            Invariant.Assert(textPointer == null || textPointer.HasValidLayout);
            return(textPointer);
        }