aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/Scripting/Tango.Scripting.Editors/Editing/TextSegmentReadOnlySectionProvider.cs
diff options
context:
space:
mode:
authorVictoria Plitt <Victoria.Plitt@twine-s.com>2019-04-08 13:49:55 +0300
committerVictoria Plitt <Victoria.Plitt@twine-s.com>2019-04-08 13:49:55 +0300
commitfc8a05358a92cc3c77c5f1e30d536807ef0614fd (patch)
treec65f696ebd60f3790145721307c255e5a339923f /Software/Visual_Studio/Scripting/Tango.Scripting.Editors/Editing/TextSegmentReadOnlySectionProvider.cs
parentb4a71931ea52636c6b36376aa9d71697ccf73524 (diff)
downloadTango-fc8a05358a92cc3c77c5f1e30d536807ef0614fd.tar.gz
Tango-fc8a05358a92cc3c77c5f1e30d536807ef0614fd.zip
were added scripting projects
Diffstat (limited to 'Software/Visual_Studio/Scripting/Tango.Scripting.Editors/Editing/TextSegmentReadOnlySectionProvider.cs')
-rw-r--r--Software/Visual_Studio/Scripting/Tango.Scripting.Editors/Editing/TextSegmentReadOnlySectionProvider.cs80
1 files changed, 80 insertions, 0 deletions
diff --git a/Software/Visual_Studio/Scripting/Tango.Scripting.Editors/Editing/TextSegmentReadOnlySectionProvider.cs b/Software/Visual_Studio/Scripting/Tango.Scripting.Editors/Editing/TextSegmentReadOnlySectionProvider.cs
new file mode 100644
index 000000000..c582301d4
--- /dev/null
+++ b/Software/Visual_Studio/Scripting/Tango.Scripting.Editors/Editing/TextSegmentReadOnlySectionProvider.cs
@@ -0,0 +1,80 @@
+// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
+// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
+
+using System;
+using System.Collections.Generic;
+using Tango.Scripting.Editors.Document;
+
+namespace Tango.Scripting.Editors.Editing
+{
+ /// <summary>
+ /// Implementation for <see cref="IReadOnlySectionProvider"/> that stores the segments
+ /// in a <see cref="TextSegmentCollection{T}"/>.
+ /// </summary>
+ public class TextSegmentReadOnlySectionProvider<T> : IReadOnlySectionProvider where T : TextSegment
+ {
+ readonly TextSegmentCollection<T> segments;
+
+ /// <summary>
+ /// Gets the collection storing the read-only segments.
+ /// </summary>
+ public TextSegmentCollection<T> Segments {
+ get { return segments; }
+ }
+
+ /// <summary>
+ /// Creates a new TextSegmentReadOnlySectionProvider instance for the specified document.
+ /// </summary>
+ public TextSegmentReadOnlySectionProvider(TextDocument textDocument)
+ {
+ segments = new TextSegmentCollection<T>(textDocument);
+ }
+
+ /// <summary>
+ /// Creates a new TextSegmentReadOnlySectionProvider instance using the specified TextSegmentCollection.
+ /// </summary>
+ public TextSegmentReadOnlySectionProvider(TextSegmentCollection<T> segments)
+ {
+ if (segments == null)
+ throw new ArgumentNullException("segments");
+ this.segments = segments;
+ }
+
+ /// <summary>
+ /// Gets whether insertion is possible at the specified offset.
+ /// </summary>
+ public virtual bool CanInsert(int offset)
+ {
+ foreach (TextSegment segment in segments.FindSegmentsContaining(offset)) {
+ if (segment.StartOffset < offset && offset < segment.EndOffset)
+ return false;
+ }
+ return true;
+ }
+
+ /// <summary>
+ /// Gets the deletable segments inside the given segment.
+ /// </summary>
+ public virtual IEnumerable<ISegment> GetDeletableSegments(ISegment segment)
+ {
+ if (segment == null)
+ throw new ArgumentNullException("segment");
+
+ int readonlyUntil = segment.Offset;
+ foreach (TextSegment ts in segments.FindOverlappingSegments(segment)) {
+ int start = ts.StartOffset;
+ int end = start + ts.Length;
+ if (start > readonlyUntil) {
+ yield return new SimpleSegment(readonlyUntil, start - readonlyUntil);
+ }
+ if (end > readonlyUntil) {
+ readonlyUntil = end;
+ }
+ }
+ int endOffset = segment.EndOffset;
+ if (readonlyUntil < endOffset) {
+ yield return new SimpleSegment(readonlyUntil, endOffset - readonlyUntil);
+ }
+ }
+ }
+}