Exemple #1
0
        IList <ClassificationSpan> IClassifier.GetClassificationSpans(SnapshotSpan toClassifySpan)
        {
            List <ClassificationSpan> list = new List <ClassificationSpan>();

            if (_document.IsMassiveChangeInProgress)
            {
                return(list);
            }
            EnsureInitialized();
            ITextSnapshot snapshot = toClassifySpan.Snapshot;

            for (int i = GetFirstClassificationDataAfterOrAtPosition(toClassifySpan.Start, snapshot); i < _spansToClassify.Count; i++)
            {
                ClassificationData classificationData = _spansToClassify[i];
                SnapshotSpan       span = classificationData.TrackingSpan.GetSpan(snapshot);
                if (span.Start >= toClassifySpan.End)
                {
                    break;
                }
                Microsoft.VisualStudio.Text.Span span2 = Microsoft.VisualStudio.Text.Span.FromBounds(Math.Max(span.Start, toClassifySpan.Start), Math.Min(span.End, toClassifySpan.End));
                SnapshotSpan        arg_C4_0           = new SnapshotSpan(snapshot, span2);
                IClassificationType classificationType = classificationData.ClassificationType;
                ClassificationSpan  item = new ClassificationSpan(arg_C4_0, classificationType);
                list.Add(item);
            }
            return(list);
        }
Exemple #2
0
        private void OnSpansChanged(object sender, SpansChangedEventArgs eventArgs)
        {
            IEnumerable <System.Web.Razor.Parser.SyntaxTree.Span> arg_8C_0 = eventArgs.Spans;

            Microsoft.VisualStudio.Text.Span?span = null;
            ITextSnapshot currentSnapshot         = _diskBuffer.CurrentSnapshot;

            if (_spansToClassify.Count > 0)
            {
                SnapshotPoint startPoint = _spansToClassify[0].TrackingSpan.GetStartPoint(currentSnapshot);
                SnapshotPoint endPoint   = _spansToClassify[_spansToClassify.Count - 1].TrackingSpan.GetEndPoint(currentSnapshot);
                span = new Microsoft.VisualStudio.Text.Span?(Microsoft.VisualStudio.Text.Span.FromBounds(startPoint.Position, endPoint.Position));
            }
            _spansToClassify = new List <ClassificationData>();
            IClassificationType classificationType = null;

            foreach (System.Web.Razor.Parser.SyntaxTree.Span current in arg_8C_0)
            {
                switch (current.Kind)
                {
                case SpanKind.Transition:
                case SpanKind.MetaCode:
                    classificationType = _razorDelimiterClassificationType;
                    break;

                case SpanKind.Comment:
                    classificationType = _razorCommentClassificationType;
                    break;
                }
                if (classificationType != null)
                {
                    Microsoft.VisualStudio.Text.Span span2 = new Microsoft.VisualStudio.Text.Span(current.Start.AbsoluteIndex, current.Length);
                    ClassificationData item = new ClassificationData(currentSnapshot.CreateTrackingSpan(span2, SpanTrackingMode.EdgeExclusive), classificationType);
                    _spansToClassify.Add(item);
                    classificationType = null;
                }
            }
            if (_spansToClassify.Count > 0)
            {
                SnapshotPoint startPoint2 = _spansToClassify[0].TrackingSpan.GetStartPoint(currentSnapshot);
                SnapshotPoint endPoint2   = _spansToClassify[_spansToClassify.Count - 1].TrackingSpan.GetEndPoint(currentSnapshot);
                if (!span.HasValue)
                {
                    span = new Microsoft.VisualStudio.Text.Span?(Microsoft.VisualStudio.Text.Span.FromBounds(startPoint2.Position, endPoint2.Position));
                }
                else
                {
                    span = new Microsoft.VisualStudio.Text.Span?(Microsoft.VisualStudio.Text.Span.FromBounds(Math.Min(span.Value.Start, startPoint2.Position), Math.Max(span.Value.End, endPoint2.Position)));
                }
            }
            if (span.HasValue)
            {
                EventHandler <ClassificationChangedEventArgs> classificationChanged = ClassificationChanged;
                if (classificationChanged != null)
                {
                    SnapshotSpan changeSpan = new SnapshotSpan(currentSnapshot, span.Value);
                    classificationChanged(this, new ClassificationChangedEventArgs(changeSpan));
                }
            }
        }
 private void OnSpansChanged(object sender, SpansChangedEventArgs eventArgs)
 {
     IEnumerable<System.Web.Razor.Parser.SyntaxTree.Span> arg_8C_0 = eventArgs.Spans;
     Microsoft.VisualStudio.Text.Span? span = null;
     ITextSnapshot currentSnapshot = _diskBuffer.CurrentSnapshot;
     if (_spansToClassify.Count > 0)
     {
         SnapshotPoint startPoint = _spansToClassify[0].TrackingSpan.GetStartPoint(currentSnapshot);
         SnapshotPoint endPoint = _spansToClassify[_spansToClassify.Count - 1].TrackingSpan.GetEndPoint(currentSnapshot);
         span = new Microsoft.VisualStudio.Text.Span?(Microsoft.VisualStudio.Text.Span.FromBounds(startPoint.Position, endPoint.Position));
     }
     _spansToClassify = new List<ClassificationData>();
     IClassificationType classificationType = null;
     foreach (System.Web.Razor.Parser.SyntaxTree.Span current in arg_8C_0)
     {
         switch (current.Kind)
         {
         case SpanKind.Transition:
         case SpanKind.MetaCode:
             classificationType = _razorDelimiterClassificationType;
             break;
         case SpanKind.Comment:
             classificationType = _razorCommentClassificationType;
             break;
         }
         if (classificationType != null)
         {
             Microsoft.VisualStudio.Text.Span span2 = new Microsoft.VisualStudio.Text.Span(current.Start.AbsoluteIndex, current.Length);
             ClassificationData item = new ClassificationData(currentSnapshot.CreateTrackingSpan(span2, SpanTrackingMode.EdgeExclusive), classificationType);
             _spansToClassify.Add(item);
             classificationType = null;
         }
     }
     if (_spansToClassify.Count > 0)
     {
         SnapshotPoint startPoint2 = _spansToClassify[0].TrackingSpan.GetStartPoint(currentSnapshot);
         SnapshotPoint endPoint2 = _spansToClassify[_spansToClassify.Count - 1].TrackingSpan.GetEndPoint(currentSnapshot);
         if (!span.HasValue)
         {
             span = new Microsoft.VisualStudio.Text.Span?(Microsoft.VisualStudio.Text.Span.FromBounds(startPoint2.Position, endPoint2.Position));
         }
         else
         {
             span = new Microsoft.VisualStudio.Text.Span?(Microsoft.VisualStudio.Text.Span.FromBounds(Math.Min(span.Value.Start, startPoint2.Position), Math.Max(span.Value.End, endPoint2.Position)));
         }
     }
     if (span.HasValue)
     {
         EventHandler<ClassificationChangedEventArgs> classificationChanged = ClassificationChanged;
         if (classificationChanged != null)
         {
             SnapshotSpan changeSpan = new SnapshotSpan(currentSnapshot, span.Value);
             classificationChanged(this, new ClassificationChangedEventArgs(changeSpan));
         }
     }
 }