コード例 #1
0
		/// <summary>
		/// Gets the new offset where the specified offset moves after this document change.
		/// </summary>
		public override int GetNewOffset(int offset, AnchorMovementType movementType = AnchorMovementType.Default)
		{
			if (offsetChangeMap != null)
				return offsetChangeMap.GetNewOffset(offset, movementType);
			else
				return CreateSingleChangeMapEntry().GetNewOffset(offset, movementType);
		}
コード例 #2
0
        /// <summary>
        /// Gets the new offset where the specified offset moves after this document change.
        /// </summary>
        public int GetNewOffset(int offset, AnchorMovementType movementType = AnchorMovementType.Default)
        {
            IList <OffsetChangeMapEntry> items = this.Items;
            int count = items.Count;

            for (int i = 0; i < count; i++)
            {
                offset = items[i].GetNewOffset(offset, movementType);
            }
            return(offset);
        }
コード例 #3
0
 /// <summary>
 /// Gets the new offset where the specified offset moves after this document change.
 /// </summary>
 public int GetNewOffset(int offset, AnchorMovementType movementType)
 {
     if (offsetChangeMap != null)
     {
         return(offsetChangeMap.GetNewOffset(offset, movementType));
     }
     else
     {
         return(CreateSingleChangeMapEntry().GetNewOffset(offset, movementType));
     }
 }
コード例 #4
0
 public override int GetNewOffset(int offset, AnchorMovementType movementType)
 {
     if (offset == this.Offset && movementType == AnchorMovementType.Default)
     {
         return(offset);
     }
     else
     {
         return(base.GetNewOffset(offset, movementType));
     }
 }
コード例 #5
0
ファイル: TextDocument.cs プロジェクト: yeganaaa/UyghurEditPP
 /// <summary>
 /// Inserts text.
 /// </summary>
 /// <param name="offset">The offset at which the text is inserted.</param>
 /// <param name="text">The new text.</param>
 /// <param name="defaultAnchorMovementType">
 /// Anchors positioned exactly at the insertion offset will move according to the anchor's movement type.
 /// For AnchorMovementType.Default, they will move according to the movement type specified by this parameter.
 /// The caret will also move according to the <paramref name="defaultAnchorMovementType"/> parameter.
 /// </param>
 public void Insert(int offset, ITextSource text, AnchorMovementType defaultAnchorMovementType)
 {
     if (defaultAnchorMovementType == AnchorMovementType.BeforeInsertion)
     {
         Replace(offset, 0, text, OffsetChangeMappingType.KeepAnchorBeforeInsertion);
     }
     else
     {
         Replace(offset, 0, text, null);
     }
 }
コード例 #6
0
 public void Insert(int offset, string text, AnchorMovementType defaultAnchorMovementType)
 {
     if (defaultAnchorMovementType == AnchorMovementType.BeforeInsertion)
     {
         document.Replace(offset, 0, text, OffsetChangeMappingType.KeepAnchorBeforeInsertion);
     }
     else
     {
         document.Insert(offset, text);
     }
 }
コード例 #7
0
 /// <summary>
 /// Gets the new offset where the specified offset moves after this document change.
 /// </summary>
 public virtual int GetNewOffset(int offset, AnchorMovementType movementType = AnchorMovementType.Default)
 {
     if (offset >= this.Offset && offset <= this.Offset + this.RemovalLength) {
         if (movementType == AnchorMovementType.BeforeInsertion)
             return this.Offset;
         else
             return this.Offset + this.InsertionLength;
     } else if (offset > this.Offset) {
         return offset + this.InsertionLength - this.RemovalLength;
     } else {
         return offset;
     }
 }
コード例 #8
0
		/// <summary>
		/// Gets the new offset where the specified offset moves after this document change.
		/// </summary>
		public virtual int GetNewOffset(int offset, AnchorMovementType movementType = AnchorMovementType.Default)
		{
			if (offset >= this.Offset && offset <= this.Offset + this.RemovalLength) {
				if (movementType == AnchorMovementType.BeforeInsertion)
					return this.Offset;
				else
					return this.Offset + this.InsertionLength;
			} else if (offset > this.Offset) {
				return offset + this.InsertionLength - this.RemovalLength;
			} else {
				return offset;
			}
		}
コード例 #9
0
			public int MoveOffsetTo(ITextBufferVersion other, int oldOffset, AnchorMovementType movement)
			{
				SnapshotVersion otherVersion = other as SnapshotVersion;
				if (otherVersion == null)
					throw new ArgumentException("Does not belong to same document");
				switch (movement) {
					case AnchorMovementType.AfterInsertion:
						return checkpoint.MoveOffsetTo(otherVersion.checkpoint, oldOffset, ICSharpCode.AvalonEdit.Document.AnchorMovementType.AfterInsertion);
					case AnchorMovementType.BeforeInsertion:
						return checkpoint.MoveOffsetTo(otherVersion.checkpoint, oldOffset, ICSharpCode.AvalonEdit.Document.AnchorMovementType.BeforeInsertion);
					default:
						throw new NotSupportedException();
				}
			}
コード例 #10
0
 /// <inheritdoc/>
 public void Insert(int offset, string text, AnchorMovementType defaultAnchorMovementType)
 {
     if (offset < 0 || offset > this.TextLength)
     {
         throw new ArgumentOutOfRangeException("offset");
     }
     if (defaultAnchorMovementType == AnchorMovementType.BeforeInsertion)
     {
         PerformChange(new InsertionWithMovementBefore(offset, text));
     }
     else
     {
         Replace(offset, 0, text);
     }
 }
コード例 #11
0
 /// <summary>
 /// Gets the new offset where the specified offset moves after this document change.
 /// </summary>
 public virtual int GetNewOffset(int offset, AnchorMovementType movementType = AnchorMovementType.Default)
 {
     if (offset >= Offset && offset <= Offset + RemovalLength)
     {
         if (movementType == AnchorMovementType.BeforeInsertion)
         {
             return(Offset);
         }
         return(Offset + InsertionLength);
     }
     if (offset > Offset)
     {
         return(offset + InsertionLength - RemovalLength);
     }
     return(offset);
 }
コード例 #12
0
 /// <summary>
 /// Gets the new offset where the specified offset moves after this document change.
 /// </summary>
 public int GetNewOffset(int offset, AnchorMovementType movementType)
 {
     if (offset >= this.Offset)
     {
         if (offset <= this.Offset + this.RemovalLength)
         {
             offset = this.Offset;
             if (movementType == AnchorMovementType.AfterInsertion)
             {
                 offset += this.InsertionLength;
             }
         }
         else
         {
             offset += this.InsertionLength - this.RemovalLength;
         }
     }
     return(offset);
 }
コード例 #13
0
        /// <summary>
        /// Gets the new offset where the specified offset moves after this document change.
        /// </summary>
        public int GetNewOffset(int oldOffset, AnchorMovementType movementType)
        {
            int insertionLength = this.InsertionLength;
            int removalLength   = this.RemovalLength;

            if (!(removalLength == 0 && oldOffset == offset))
            {
                // we're getting trouble (both if statements in here would apply)
                // if there's no removal and we insert at the offset
                // -> we'd need to disambiguate by movementType, which is handled after the if

                // offset is before start of change: no movement
                if (oldOffset <= offset)
                {
                    return(oldOffset);
                }
                // offset is after end of change: movement by normal delta
                if (oldOffset >= offset + removalLength)
                {
                    return(oldOffset + insertionLength - removalLength);
                }
            }
            // we reach this point if
            // a) the oldOffset is inside the deleted segment
            // b) there was no removal and we insert at the caret position
            if (movementType == AnchorMovementType.AfterInsertion)
            {
                return(offset + insertionLength);
            }
            else if (movementType == AnchorMovementType.BeforeInsertion)
            {
                return(offset);
            }
            else
            {
                return(this.DefaultAnchorMovementIsBeforeInsertion ? offset : offset + insertionLength);
            }
        }
コード例 #14
0
			public int MoveOffsetTo(ITextSourceVersion other, int oldOffset, AnchorMovementType movement)
			{
				int offset = oldOffset;
				foreach (var e in GetChangesTo(other)) {
					offset = e.GetNewOffset(offset, movement);
				}
				return offset;
			}
コード例 #15
0
		public void Replace(int offset, int length, string newText, AnchorMovementType defaultAnchorMovementType)
		{
			document.Replace(offset, length, newText);
		}
コード例 #16
0
 public void Replace(int offset, int length, string newText, AnchorMovementType defaultAnchorMovementType)
 {
     document.Replace(offset, length, newText);
 }
コード例 #17
0
ファイル: XmlViewModel.cs プロジェクト: Xtremrules/dot42
 void IDocument.Insert(int offset, string text, AnchorMovementType defaultAnchorMovementType)
 {
     throw new NotImplementedException();
 }
コード例 #18
0
		void ICSharpCode.NRefactory.Editor.IDocument.Insert (int offset, string text, AnchorMovementType anchorMovementType)
		{
			Insert (offset, text, anchorMovementType);
		}
コード例 #19
0
 void IDocument.Insert(int offset, ITextSource text, AnchorMovementType defaultAnchorMovementType)
 {
     throw new NotImplementedException();
 }
コード例 #20
0
		public void Insert(int offset, ITextSource text, AnchorMovementType defaultAnchorMovementType)
		{
			throw new NotImplementedException();
		}
コード例 #21
0
ファイル: TextDocument.cs プロジェクト: Zolniu/DigitalRune
 /// <summary>
 /// Inserts text.
 /// </summary>
 /// <param name="offset">The offset at which the text is inserted.</param>
 /// <param name="text">The new text.</param>
 /// <param name="defaultAnchorMovementType">
 /// Anchors positioned exactly at the insertion offset will move according to the anchor's movement type.
 /// For AnchorMovementType.Default, they will move according to the movement type specified by this parameter.
 /// The caret will also move according to the <paramref name="defaultAnchorMovementType"/> parameter.
 /// </param>
 public void Insert(int offset, ITextSource text, AnchorMovementType defaultAnchorMovementType)
 {
     if (defaultAnchorMovementType == AnchorMovementType.BeforeInsertion) {
         Replace(offset, 0, text, OffsetChangeMappingType.KeepAnchorBeforeInsertion);
     } else {
         Replace(offset, 0, text, null);
     }
 }
コード例 #22
0
		void IDocument.Insert(int offset, ITextSource text, AnchorMovementType defaultAnchorMovementType)
		{
			throw new NotSupportedException();
		}
コード例 #23
0
		public int GetNewOffset(int offset, AnchorMovementType movementType) 
		{ 
			//TODO: DocumentChangeEventArgs.GetNewOffset()
			throw new NotImplementedException();
		}
コード例 #24
0
		public int MoveOffsetTo(ITextSourceVersion other, int oldOffset, AnchorMovementType movement)
		{
			if (this != other)
				throw new ArgumentException("other belongs to different document");
			return oldOffset;
		}
コード例 #25
0
		public DocumentChangeEventArgs (int offset, string removedText, string insertedText, AnchorMovementType anchorMovementType = AnchorMovementType.Default) : base (offset, removedText, insertedText)
		{
			AnchorMovementType = anchorMovementType;
		}
コード例 #26
0
			public int MoveOffsetTo(ITextBufferVersion other, int oldOffset, AnchorMovementType movement)
			{
				SnapshotVersion otherVersion = other as SnapshotVersion;
				if (otherVersion == null)
					throw new ArgumentException("Does not belong to same document");
				switch (movement) {
					case AnchorMovementType.AfterInsertion:
						return checkpoint.MoveOffsetTo(otherVersion.checkpoint, oldOffset, ICSharpCode.AvalonEdit.Document.AnchorMovementType.AfterInsertion);
					case AnchorMovementType.BeforeInsertion:
						return checkpoint.MoveOffsetTo(otherVersion.checkpoint, oldOffset, ICSharpCode.AvalonEdit.Document.AnchorMovementType.BeforeInsertion);
					default:
						throw new NotSupportedException();
				}
			}
コード例 #27
0
 void IDocument.Insert(int offset, string text, AnchorMovementType defaultAnchorMovementType)
 {
     throw new NotSupportedException();
 }
コード例 #28
0
		/// <inheritdoc/>
		public void Insert(int offset, string text, AnchorMovementType defaultAnchorMovementType)
		{
			if (offset < 0 || offset > this.TextLength)
				throw new ArgumentOutOfRangeException("offset");
			if (text == null)
				throw new ArgumentNullException("text");
			if (defaultAnchorMovementType == AnchorMovementType.BeforeInsertion)
				PerformChange(new InsertionWithMovementBefore(offset, text));
			else
				Replace(offset, 0, text);
		}
コード例 #29
0
		/// <inheritdoc/>
		public void Insert(int offset, ITextSource text, AnchorMovementType defaultAnchorMovementType)
		{
			if (text == null)
				throw new ArgumentNullException("text");
			Insert(offset, text.Text, defaultAnchorMovementType);
		}
コード例 #30
0
			public override int GetNewOffset(int offset, AnchorMovementType movementType)
			{
				if (offset == this.Offset && movementType == AnchorMovementType.Default)
					return offset;
				else
					return base.GetNewOffset(offset, movementType);
			}
コード例 #31
0
 /// <summary>
 /// Calculates where the offset has moved in the other buffer version.
 /// </summary>
 /// <remarks>This method is thread-safe.</remarks>
 /// <exception cref="ArgumentException">Raised if 'other' belongs to a different document than this checkpoint.</exception>
 public int MoveOffsetTo(ChangeTrackingCheckpoint other, int oldOffset, AnchorMovementType movement)
 {
     int offset = oldOffset;
     foreach (DocumentChangeEventArgs e in GetChangesTo(other)) {
         offset = e.GetNewOffset(offset, movement);
     }
     return offset;
 }
コード例 #32
0
		/// <summary>
		///     Gets the new offset where the specified offset moves after this document change.
		/// </summary>
		public virtual int GetNewOffset(int offset, AnchorMovementType movementType = AnchorMovementType.Default)
		{
			if (offset >= Offset && offset <= Offset + RemovalLength)
			{
				if (movementType == AnchorMovementType.BeforeInsertion)
					return Offset;
				return Offset + InsertionLength;
			}
			if (offset > Offset)
			{
				return offset + InsertionLength - RemovalLength;
			}
			return offset;
		}
コード例 #33
0
 public void Insert(int offset, string text, AnchorMovementType defaultAnchorMovementType)
 {
     throw new NotImplementedException();
 }
コード例 #34
0
		public void Insert(int offset, string text, AnchorMovementType defaultAnchorMovementType)
		{
			if (defaultAnchorMovementType == AnchorMovementType.BeforeInsertion) {
				document.Replace(offset, 0, text, OffsetChangeMappingType.KeepAnchorBeforeInsertion);
			} else {
				document.Insert(offset, text);
			}
		}
コード例 #35
0
 public DocumentChangeEventArgs(int offset, string removedText, string insertedText, AnchorMovementType anchorMovementType = AnchorMovementType.Default) : base(offset, removedText, insertedText)
 {
     AnchorMovementType = anchorMovementType;
 }
コード例 #36
0
 public int MoveOffsetTo(ITextSourceVersion other, int oldOffset, AnchorMovementType movement)
 {
     return(GetChangesTo(other)
            .Aggregate(oldOffset, (current, e) => e.GetNewOffset(current, movement)));
 }