Ejemplo n.º 1
0
 /// <summary>
 ///   Creates a <see cref = "T:Microsoft.VisualStudio.Text.ITrackingSpan" /> against this snapshot.
 /// </summary>
 /// <param name = "start">The starting position of the tracking span.</param>
 /// <param name = "length">The length of the tracking span.</param>
 /// <param name = "trackingMode">How the tracking span should react to changes at its boundaries.</param>
 /// <param name = "trackingFidelity">The tracking fidelilty mode.</param>
 /// <returns>
 ///   A non-null <see cref = "T:Microsoft.VisualStudio.Text.ITrackingSpan" />..
 /// </returns>
 /// <exception cref = "T:System.ArgumentOutOfRangeException"><paramref name = "start" /> is negative or greater than <see cref = "P:Microsoft.VisualStudio.Text.ITextSnapshot.Length" />, or
 ///   <paramref name = "length" /> is negative, or <paramref name = "start" /> plus <paramref name = "length" />
 ///   is less than <paramref name = "start" />.</exception>
 public ITrackingSpan CreateTrackingSpan(int start,
                                         int length,
                                         SpanTrackingMode trackingMode,
                                         TrackingFidelityMode trackingFidelity)
 {
     throw new NotImplementedException();
 }
 public MockTrackingPoint(MockTextSnapshot snapshot, int position, PointTrackingMode mode = PointTrackingMode.Positive, TrackingFidelityMode fidelity = TrackingFidelityMode.Forward)
 {
     _position = position;
     _snapshot = snapshot;
     _mode     = mode;
     _fidelity = fidelity;
 }
Ejemplo n.º 3
0
		public ITrackingSpan CreateTrackingSpan(Span span, SpanTrackingMode trackingMode, TrackingFidelityMode trackingFidelity) {
			if (trackingMode == SpanTrackingMode.Custom)
				throw new NotSupportedException();
			if (trackingFidelity == TrackingFidelityMode.UndoRedo)
				throw new NotSupportedException();
			return new TrackingSpan(this, span, trackingMode, trackingFidelity);
		}
Ejemplo n.º 4
0
        internal HighFidelityTrackingPoint(ITextVersion version, int position, PointTrackingMode trackingMode, TrackingFidelityMode fidelity)
            : base(version, position, trackingMode)
        {
            if (fidelity != TrackingFidelityMode.UndoRedo && fidelity != TrackingFidelityMode.Backward)
            {
                throw new ArgumentOutOfRangeException(nameof(fidelity));
            }
            List <VersionNumberPosition> initialHistory = null;

            if (fidelity == TrackingFidelityMode.UndoRedo && version.VersionNumber > 0)
            {
                // The system may perform undo operations that reach prior to the initial version; if any of
                // those transitions are noninvertible, then redoing back to the initial version will give the
                // wrong answer. Thus we save the state of the point for the initial version, unless the
                // initial version happens to be version zero (in which case we could not undo past it).

                initialHistory = new List <VersionNumberPosition>();

                if (version.VersionNumber != version.ReiteratedVersionNumber)
                {
                    Debug.Assert(version.ReiteratedVersionNumber < version.VersionNumber);
                    // If the current version and reiterated version differ, also remember the position
                    // using the reiterated version number, since when undoing back to this point it
                    // will be the key that is used.
                    initialHistory.Add(new VersionNumberPosition(version.ReiteratedVersionNumber, position));
                }

                initialHistory.Add(new VersionNumberPosition(version.VersionNumber, position));
            }
            this.cachedPosition = new VersionPositionHistory(version, position, initialHistory);
            this.fidelity       = fidelity;
        }
Ejemplo n.º 5
0
 public TrackingPointMock(ITextBuffer textBuffer, int position, PointTrackingMode trackingMode, TrackingFidelityMode trackingFidelity)
 {
     _position = position;
     
     TextBuffer = textBuffer;
     TrackingFidelity = trackingFidelity;
     TrackingMode = trackingMode;
 }
Ejemplo n.º 6
0
 public ITrackingSpan CreateCustomTrackingSpan(Span span, TrackingFidelityMode trackingFidelity, object customState, CustomTrackToVersion behavior)
 {
     if (behavior == null)
     {
         throw new ArgumentNullException(nameof(behavior));
     }
     throw new NotImplementedException();
 }
Ejemplo n.º 7
0
        public TrackingPointMock(ITextBuffer textBuffer, int position, PointTrackingMode trackingMode, TrackingFidelityMode trackingFidelity)
        {
            _position = position;

            TextBuffer       = textBuffer;
            TrackingFidelity = trackingFidelity;
            TrackingMode     = trackingMode;
        }
Ejemplo n.º 8
0
		public TrackingSpan(ITextVersion textVersion, Span span, SpanTrackingMode trackingMode, TrackingFidelityMode trackingFidelity) {
			if (textVersion == null)
				throw new ArgumentNullException(nameof(textVersion));
			if ((uint)span.End > (uint)textVersion.Length)
				throw new ArgumentOutOfRangeException(nameof(span));
			TextBuffer = textVersion.TextBuffer;
			TrackingFidelity = trackingFidelity;
			TrackingMode = trackingMode;
			this.textVersion = textVersion;
			this.span = span;
		}
Ejemplo n.º 9
0
        public TrackingSpanMock(ITextBuffer textBuffer, Span span, SpanTrackingMode trackingMode, TrackingFidelityMode trackingFidelity)
        {
            _span = span;

            TextBuffer = textBuffer;
            TrackingMode = trackingMode;
            TrackingFidelity = trackingFidelity;

            var mock = textBuffer as TextBufferMock;
            mock.BeforeChanged += OnBeforeTextBufferChanged;
        }
Ejemplo n.º 10
0
		public TrackingPoint(ITextVersion textVersion, int position, PointTrackingMode trackingMode, TrackingFidelityMode trackingFidelity) {
			if (textVersion == null)
				throw new ArgumentNullException(nameof(textVersion));
			if ((uint)position > (uint)textVersion.Length)
				throw new ArgumentOutOfRangeException(nameof(position));
			TextBuffer = textVersion.TextBuffer;
			TrackingMode = trackingMode;
			TrackingFidelity = trackingFidelity;
			this.textVersion = textVersion;
			this.position = position;
		}
Ejemplo n.º 11
0
        public TrackingSpanMock(ITextBuffer textBuffer, Span span, SpanTrackingMode trackingMode, TrackingFidelityMode trackingFidelity)
        {
            _span = span;

            TextBuffer       = textBuffer;
            TrackingMode     = trackingMode;
            TrackingFidelity = trackingFidelity;

            var mock = textBuffer as TextBufferMock;

            mock.BeforeChanged += OnBeforeTextBufferChanged;
        }
Ejemplo n.º 12
0
 public ITrackingSpan CreateCustomTrackingSpan(Span span, TrackingFidelityMode trackingFidelity, object customState, CustomTrackToVersion behavior)
 {
     if (behavior == null)
     {
         throw new ArgumentNullException("behavior");
     }
     if (trackingFidelity != TrackingFidelityMode.Forward)
     {
         throw new NotImplementedException();
     }
     return(new ForwardFidelityCustomTrackingSpan(this, span, customState, behavior));
 }
Ejemplo n.º 13
0
 public TrackingPoint(ITextVersion textVersion, int position, PointTrackingMode trackingMode, TrackingFidelityMode trackingFidelity)
 {
     if (textVersion == null)
     {
         throw new ArgumentNullException(nameof(textVersion));
     }
     if ((uint)position > (uint)textVersion.Length)
     {
         throw new ArgumentOutOfRangeException(nameof(position));
     }
     TextBuffer       = textVersion.TextBuffer;
     TrackingMode     = trackingMode;
     TrackingFidelity = trackingFidelity;
     this.textVersion = textVersion;
     this.position    = position;
 }
Ejemplo n.º 14
0
 public TrackingSpan(ITextVersion textVersion, Span span, SpanTrackingMode trackingMode, TrackingFidelityMode trackingFidelity)
 {
     if (textVersion == null)
     {
         throw new ArgumentNullException(nameof(textVersion));
     }
     if ((uint)span.End > (uint)textVersion.Length)
     {
         throw new ArgumentOutOfRangeException(nameof(span));
     }
     TextBuffer       = textVersion.TextBuffer;
     TrackingFidelity = trackingFidelity;
     TrackingMode     = trackingMode;
     this.textVersion = textVersion;
     this.span        = span;
 }
Ejemplo n.º 15
0
 public ITrackingSpan CreateTrackingSpan(Span span, SpanTrackingMode trackingMode, TrackingFidelityMode trackingFidelity) =>
 _version.CreateTrackingSpan(span, trackingMode, trackingFidelity);
Ejemplo n.º 16
0
		public ITrackingPoint CreateTrackingPoint(int position, PointTrackingMode trackingMode, TrackingFidelityMode trackingFidelity) {
			if (trackingFidelity == TrackingFidelityMode.UndoRedo)
				throw new NotSupportedException();
			return new TrackingPoint(this, position, trackingMode, trackingFidelity);
		}
Ejemplo n.º 17
0
		public ITrackingSpan CreateTrackingSpan(Span span, SpanTrackingMode trackingMode, TrackingFidelityMode trackingFidelity) =>
			Version.CreateTrackingSpan(span, trackingMode, trackingFidelity);
Ejemplo n.º 18
0
 public ITrackingPoint CreateTrackingPoint(int position, PointTrackingMode trackingMode, TrackingFidelityMode trackingFidelity) =>
 _version.CreateTrackingPoint(position, trackingMode, trackingFidelity);
Ejemplo n.º 19
0
 public ITrackingSpan CreateTrackingSpan(Span span, SpanTrackingMode trackingMode, TrackingFidelityMode trackingFidelity)
 {
     if (trackingMode == SpanTrackingMode.Custom)
     {
         throw new ArgumentOutOfRangeException("trackingMode");
     }
     if (trackingFidelity == TrackingFidelityMode.Forward)
     {
         return(new ForwardFidelityTrackingSpan(this, span, trackingMode));
     }
     else
     {
         return(new HighFidelityTrackingSpan(this, span, trackingMode, trackingFidelity));
     }
 }
Ejemplo n.º 20
0
 public ITrackingPoint CreateTrackingPoint(int position, PointTrackingMode trackingMode, TrackingFidelityMode trackingFidelity)
 {
     return TextBuffer.CurrentSnapshot.CreateTrackingPoint(position, trackingMode, trackingFidelity);
 }
 public ITrackingSpan CreateCustomTrackingSpan(Span span, TrackingFidelityMode trackingFidelity, object customState, CustomTrackToVersion behavior) {
     throw new NotImplementedException();
 }
 public ITrackingPoint CreateTrackingPoint(int position, PointTrackingMode trackingMode, TrackingFidelityMode trackingFidelity) {
     return new MockTrackingPoint(this, position);
 }
Ejemplo n.º 23
0
 public ITrackingPoint CreateTrackingPoint(int position, PointTrackingMode trackingMode, TrackingFidelityMode trackingFidelity)
 {
     return(new TrackingPointMock(TextBuffer, position, trackingMode, trackingFidelity));
 }
Ejemplo n.º 24
0
 public ITrackingSpan CreateTrackingSpan(Span span, SpanTrackingMode trackingMode, TrackingFidelityMode trackingFidelity)
 {
     return(new TrackingSpanMock(TextBuffer, span, trackingMode, trackingFidelity));
 }
Ejemplo n.º 25
0
 public MockTrackingPoint(MockTextSnapshot snapshot, int position, PointTrackingMode mode = PointTrackingMode.Positive, TrackingFidelityMode fidelity = TrackingFidelityMode.Forward) {
     _position = position;
     _snapshot = snapshot;
     _mode = mode;
     _fidelity = fidelity;
 }
Ejemplo n.º 26
0
 public ITrackingSpan CreateTrackingSpan(Span span, SpanTrackingMode trackingMode, TrackingFidelityMode trackingFidelity)
 {
     return TextBuffer.CurrentSnapshot.CreateTrackingSpan(span, trackingMode, trackingFidelity);
 }
Ejemplo n.º 27
0
 public ITrackingSpan CreateTrackingSpan(int start, int length, SpanTrackingMode trackingMode, TrackingFidelityMode trackingFidelity)
 {
     return TextBuffer.CurrentSnapshot.CreateTrackingSpan(start, length, trackingMode, trackingFidelity);
 }
Ejemplo n.º 28
0
 public ITrackingPoint CreateTrackingPoint(int position, PointTrackingMode trackingMode, TrackingFidelityMode trackingFidelity)
 {
     if (trackingFidelity == TrackingFidelityMode.Forward)
     {
         return(new ForwardFidelityTrackingPoint(this, position, trackingMode));
     }
     else
     {
         return(new HighFidelityTrackingPoint(this, position, trackingMode, trackingFidelity));
     }
 }
 public ITrackingSpan CreateTrackingSpan(Span span, SpanTrackingMode trackingMode, TrackingFidelityMode trackingFidelity) {
     throw new NotImplementedException();
 }
Ejemplo n.º 30
0
 public ITrackingSpan CreateTrackingSpan(int start, int length, SpanTrackingMode trackingMode, TrackingFidelityMode trackingFidelity)
 {
     return(CreateTrackingSpan(new Span(start, length), trackingMode, trackingFidelity));
 }
Ejemplo n.º 31
0
 public ITrackingPoint CreateTrackingPoint(int position, PointTrackingMode trackingMode, TrackingFidelityMode trackingFidelity)
 {
     return(new MockTrackingPoint(this, position, trackingMode, trackingFidelity));
 }
Ejemplo n.º 32
0
 public ITrackingSpan CreateTrackingSpan(Span span, SpanTrackingMode trackingMode, TrackingFidelityMode trackingFidelity)
 {
     return new TrackingSpanMock(TextBuffer, span, trackingMode, trackingFidelity);
 }
Ejemplo n.º 33
0
 public ITrackingSpan CreateCustomTrackingSpan(Span span, TrackingFidelityMode trackingFidelity, object customState, CustomTrackToVersion behavior)
 {
     return new TrackingSpanMock(TextBuffer, span, SpanTrackingMode.EdgePositive, trackingFidelity);
 }
Ejemplo n.º 34
0
 public ITrackingPoint CreateTrackingPoint(int position, PointTrackingMode trackingMode, TrackingFidelityMode trackingFidelity)
 {
     throw new NotImplementedException();
 }
Ejemplo n.º 35
0
 public ITrackingSpan CreateTrackingSpan(int start, int length, SpanTrackingMode trackingMode, TrackingFidelityMode trackingFidelity)
 {
     return new TrackingSpanMock(TextBuffer, new Span(start, length), trackingMode, trackingFidelity);
 }
 public ITrackingSpan CreateTrackingSpan(int start, int length, SpanTrackingMode trackingMode, TrackingFidelityMode trackingFidelity) {
     throw new NotImplementedException();
 }
Ejemplo n.º 37
0
        internal static int TrackPositionForwardInTime(PointTrackingMode trackingMode,
                                                       TrackingFidelityMode fidelity,
                                                       ref List <VersionNumberPosition> noninvertibleHistory,
                                                       int currentPosition,
                                                       ITextVersion currentVersion,
                                                       ITextVersion targetVersion)
        {
            System.Diagnostics.Debug.Assert(targetVersion.VersionNumber > currentVersion.VersionNumber);

            // track forward in time
            ITextVersion roverVersion = currentVersion;

            while (roverVersion != targetVersion)
            {
                currentVersion = roverVersion;
                roverVersion   = currentVersion.Next;

                if (fidelity == TrackingFidelityMode.UndoRedo &&
                    roverVersion.ReiteratedVersionNumber != roverVersion.VersionNumber &&
                    noninvertibleHistory != null)
                {
                    int p = noninvertibleHistory.BinarySearch
                                (new VersionNumberPosition(roverVersion.ReiteratedVersionNumber, 0),
                                VersionNumberPositionComparer.Instance);
                    if (p >= 0)
                    {
                        currentPosition = noninvertibleHistory[p].Position;
                        continue;
                    }
                }

                int changeCount = currentVersion.Changes.Count;
                if (changeCount == 0)
                {
                    // A version which has no text changes preserves the reiterated version number of the previous version,
                    // so its version number and reiterated version number will be different. We need to record a possibly
                    // noninvertible change with the reiterated version number as well as with the version number.
                    Debug.Assert(roverVersion.VersionNumber != roverVersion.ReiteratedVersionNumber);
                    if (roverVersion.VersionNumber != roverVersion.ReiteratedVersionNumber)
                    {
                        RecordNoninvertibleTransition(ref noninvertibleHistory, currentPosition, roverVersion.ReiteratedVersionNumber);
                    }
                    continue;
                }

                int currentVersionStartingPosition = currentPosition;
                for (int c = 0; c < changeCount; ++c)
                {
                    ITextChange textChange = currentVersion.Changes[c];
                    if (IsOpaque(textChange))
                    {
                        if (textChange.NewPosition + textChange.OldLength <= currentPosition)
                        {
                            // point is to the right of the opaque change. shift it.
                            currentPosition += textChange.Delta;
                            continue;
                        }
                        else if (textChange.NewPosition <= currentPosition)
                        {
                            // point is within the opaque change. stay put (but within the change)
                            if (textChange.NewEnd <= currentPosition)
                            {
                                // we shift to the left because the new text is shorter than what
                                // it replaced. this is a noninvertible transition, so remember it.
                                RecordNoninvertibleTransition(ref noninvertibleHistory, currentVersionStartingPosition, currentVersion.VersionNumber);
                                currentPosition = textChange.NewEnd;
                            }
                            // No further change in this version can affect us.
                            break;
                        }
                        else
                        {
                            // point is to the left of the opaque change. no effect, and we are done.
                            break;
                        }
                    }

                    if (trackingMode == PointTrackingMode.Positive)
                    {
                        // Positive tracking mode: point moves with insertions at its location.
                        if (textChange.NewPosition <= currentPosition)
                        {
                            if (textChange.NewPosition + textChange.OldLength <= currentPosition)
                            {
                                // easy: the change is entirely to the left of our position.
                                // if NewPosition + OldLength == currentPosition, it means that the character
                                // immediately before our position was deleted (or replaced). When going back
                                // in time we will see this as an insertion, and since our tracking mode is positive,
                                // we will put ourselves after it.
                                currentPosition += textChange.Delta;
                            }
                            else
                            {
                                // textChange deleted text at the position of the tracked point; now the point is
                                // pushed to the end of the textChange insertion.

                                // This is a noninvertible transition. Remember it.
                                RecordNoninvertibleTransition(ref noninvertibleHistory, currentVersionStartingPosition, currentVersion.VersionNumber);
                                currentPosition = textChange.NewEnd;
                                break;
                            }
                        }
                        else
                        {
                            // the change is entirely to the right of our position; since changes are
                            // sorted, we are done.
                            break;
                        }
                    }
                    else
                    {
                        // Negative tracking mode: point doesn't move with respect to insertions at its location.
                        if (textChange.NewPosition < currentPosition)
                        {
                            if (textChange.NewPosition + textChange.OldLength < currentPosition)
                            {
                                // easy: the change is entirely to the left of our position. Since we
                                // are paying attention to the tracking mode when tracking back (to handle the
                                // before-the-origin-version case), we need to consider NewPosition + OldLength ==
                                // currentPosition case as noninvertible.
                                currentPosition += textChange.Delta;
                            }
                            else
                            {
                                // textChange deleted text at the position of the tracked point; now the point is
                                // at the position of the change, prior to any insertion.

                                // This is a nonivertible transition.
                                RecordNoninvertibleTransition(ref noninvertibleHistory, currentVersionStartingPosition, currentVersion.VersionNumber);
                                currentPosition = textChange.NewPosition;
                                break;
                            }
                        }
                        else
                        {
                            break;
                        }
                    }
                }
            }

            return(currentPosition);
        }
Ejemplo n.º 38
0
 public ITrackingPoint CreateTrackingPoint(int position, PointTrackingMode trackingMode, TrackingFidelityMode trackingFidelity)
 {
     return(TextBuffer.CurrentSnapshot.CreateTrackingPoint(position, trackingMode, trackingFidelity));
 }
Ejemplo n.º 39
0
 public ITrackingSpan CreateTrackingSpan(Span span, SpanTrackingMode trackingMode, TrackingFidelityMode trackingFidelity)
 {
     return(TextBuffer.CurrentSnapshot.CreateTrackingSpan(span, trackingMode, trackingFidelity));
 }
Ejemplo n.º 40
0
		public ITrackingPoint CreateTrackingPoint(int position, PointTrackingMode trackingMode, TrackingFidelityMode trackingFidelity) =>
			Version.CreateTrackingPoint(position, trackingMode, trackingFidelity);
Ejemplo n.º 41
0
 public ITrackingSpan CreateTrackingSpan(Span span, SpanTrackingMode trackingMode, TrackingFidelityMode trackingFidelity)
 {
     throw new NotImplementedException();
 }
Ejemplo n.º 42
0
		public ITrackingSpan CreateTrackingSpan(int start, int length, SpanTrackingMode trackingMode, TrackingFidelityMode trackingFidelity) =>
			Version.CreateTrackingSpan(start, length, trackingMode, trackingFidelity);
Ejemplo n.º 43
0
 public ITrackingPoint CreateTrackingPoint(int position, PointTrackingMode trackingMode, TrackingFidelityMode trackingFidelity)
 {
     return new TrackingPointMock(TextBuffer, position, trackingMode, trackingFidelity);
 }
Ejemplo n.º 44
0
 public ITrackingSpan CreateTrackingSpan(int start, int length, SpanTrackingMode trackingMode, TrackingFidelityMode trackingFidelity) =>
 _version.CreateTrackingSpan(start, length, trackingMode, trackingFidelity);
 public ITrackingSpan CreateTrackingSpan(VisualStudio.Text.Span span, SpanTrackingMode trackingMode, TrackingFidelityMode trackingFidelity) => throw new NotImplementedException();
Ejemplo n.º 46
0
 public ITrackingSpan CreateCustomTrackingSpan(Span span, TrackingFidelityMode trackingFidelity, object customState, CustomTrackToVersion behavior)
 {
     return(new TrackingSpanMock(TextBuffer, span, SpanTrackingMode.EdgePositive, trackingFidelity));
 }
Ejemplo n.º 47
0
		public ITrackingSpan CreateTrackingSpan(int start, int length, SpanTrackingMode trackingMode, TrackingFidelityMode trackingFidelity) =>
			CreateTrackingSpan(new Span(start, length), trackingMode, trackingFidelity);
Ejemplo n.º 48
0
 public ITrackingSpan CreateTrackingSpan(int start, int length, SpanTrackingMode trackingMode, TrackingFidelityMode trackingFidelity)
 {
     return(TextBuffer.CurrentSnapshot.CreateTrackingSpan(start, length, trackingMode, trackingFidelity));
 }
Ejemplo n.º 49
0
 public ITrackingPoint CreateTrackingPoint(int position, PointTrackingMode trackingMode, TrackingFidelityMode trackingFidelity)
 {
     if (trackingFidelity == TrackingFidelityMode.UndoRedo)
     {
         throw new NotSupportedException();
     }
     return(new TrackingPoint(this, position, trackingMode, trackingFidelity));
 }
Ejemplo n.º 50
0
 public ITrackingPoint CreateTrackingPoint(int position, PointTrackingMode trackingMode, TrackingFidelityMode trackingFidelity)
 {
     throw new NotImplementedException();
 }
Ejemplo n.º 51
0
 public ITrackingSpan CreateTrackingSpan(Span span, SpanTrackingMode trackingMode, TrackingFidelityMode trackingFidelity)
 {
     if (trackingMode == SpanTrackingMode.Custom)
     {
         throw new NotSupportedException();
     }
     if (trackingFidelity == TrackingFidelityMode.UndoRedo)
     {
         throw new NotSupportedException();
     }
     return(new TrackingSpan(this, span, trackingMode, trackingFidelity));
 }
Ejemplo n.º 52
0
 public ITrackingSpan CreateCustomTrackingSpan(Span span, TrackingFidelityMode trackingFidelity, object customState, CustomTrackToVersion behavior)
 {
     throw new NotImplementedException();
 }
 public ITrackingSpan CreateCustomTrackingSpan(VisualStudio.Text.Span span, TrackingFidelityMode trackingFidelity, object customState, CustomTrackToVersion behavior) => throw new NotImplementedException();