internal ISegment[] GetDeletableSegments(ISegment segment) { var deletableSegments = ReadOnlySectionProvider.GetDeletableSegments(segment); if (deletableSegments == null) { throw new InvalidOperationException("ReadOnlySectionProvider.GetDeletableSegments returned null"); } var array = deletableSegments.ToArray(); int lastIndex = segment.Offset; for (int i = 0; i < array.Length; i++) { if (array[i].Offset < lastIndex) { throw new InvalidOperationException("ReadOnlySectionProvider returned incorrect segments (outside of input segment / wrong order)"); } lastIndex = array[i].EndOffset; } if (lastIndex > segment.EndOffset) { throw new InvalidOperationException("ReadOnlySectionProvider returned incorrect segments (outside of input segment / wrong order)"); } return(array); }
internal void RemoveSelectedText() { if (this.Document == null) { throw ThrowUtil.NoDocumentAssigned(); } selection.RemoveSelectedText(this); #if DEBUG if (!selection.IsEmpty) { foreach (ISegment s in selection.Segments) { Debug.Assert(ReadOnlySectionProvider.GetDeletableSegments(s).Count() == 0); } } #endif }
internal void ReplaceSelectionWithText(string newText) { if (newText == null) { throw new ArgumentNullException("newText"); } if (this.Document == null) { throw ThrowUtil.NoDocumentAssigned(); } using (this.Document.RunUpdate()) { RemoveSelectedText(); if (newText.Length > 0) { if (ReadOnlySectionProvider.CanInsert(Caret.Offset)) { this.Document.Insert(Caret.Offset, newText); } } } }