public IEnumerable <IMappingTagSpan <T> > GetTags(NormalizedSnapshotSpanCollection snapshotSpans, CancellationToken cancellationToken) { if (snapshotSpans == null) { throw new ArgumentNullException(nameof(snapshotSpans)); } if (snapshotSpans.Count == 0) { yield break; } var snapshotSpansSnapshot = snapshotSpans[0].Snapshot; foreach (var tagger in taggers) { var syncTagger = tagger as ISynchronousTagger <T>; var tags = syncTagger != null?syncTagger.GetTags(snapshotSpans, cancellationToken) : tagger.GetTags(snapshotSpans); cancellationToken.ThrowIfCancellationRequested(); foreach (var tagSpan in tags) { var newSpan = tagSpan.Span.TranslateTo(snapshotSpansSnapshot, SpanTrackingMode.EdgeExclusive); if (snapshotSpans.IntersectsWith(newSpan)) { yield return(new MappingTagSpan <T>(BufferGraph.CreateMappingSpan(tagSpan.Span, SpanTrackingMode.EdgeExclusive), tagSpan.Tag)); } } } }
void RaiseTagsChanged(SnapshotSpan span, object sender = null) { if (IsDisposed) { return; } IMappingSpan mappingSpan = null; TagsChanged?.Invoke(sender ?? this, new TagsChangedEventArgs(mappingSpan = BufferGraph.CreateMappingSpan(span, SpanTrackingMode.EdgeExclusive))); if (BatchedTagsChanged != null) { lock (lockObj) { batchedTagsChangedList.Add(mappingSpan ?? BufferGraph.CreateMappingSpan(span, SpanTrackingMode.EdgeExclusive)); if (batchedTagsChangedList.Count == 1) { dispatcher.BeginInvoke(new Action(RaiseOnUIThread), DispatcherPriority.Normal); } } } }
public IEnumerable <IMappingTagSpan <T> > GetTags(NormalizedSnapshotSpanCollection snapshotSpans) { if (snapshotSpans == null) { throw new ArgumentNullException(nameof(snapshotSpans)); } if (snapshotSpans.Count == 0) { yield break; } var snapshotSpansSnapshot = snapshotSpans[0].Snapshot; foreach (var tagger in taggers) { foreach (var tagSpan in tagger.GetTags(snapshotSpans)) { var newSpan = tagSpan.Span.TranslateTo(snapshotSpansSnapshot, SpanTrackingMode.EdgeExclusive); if (snapshotSpans.IntersectsWith(newSpan)) { yield return(new MappingTagSpan <T>(BufferGraph.CreateMappingSpan(tagSpan.Span, SpanTrackingMode.EdgeExclusive), tagSpan.Tag)); } } } }