示例#1
0
 private bool IsMarkup(IContentType contentType)
 {
     return(CommentTagger.IsHtmlMarkup(contentType) || CommentTagger.IsXmlMarkup(contentType));
 }
示例#2
0
        private IEnumerable <ITagSpan <ClassificationTag> > GetTagsInternal(NormalizedSnapshotSpanCollection spans)
        {
            if (!CommentTagger._enabled || spans.Count == 0)
            {
                return(CommentTagger.EmptyTags);
            }
            ITextSnapshot snapshot    = spans[0].Snapshot;
            IContentType  contentType = snapshot.TextBuffer.ContentType;

            if (!contentType.IsOfType("code"))
            {
                return(CommentTagger.EmptyTags);
            }
            bool flag = this.IsMarkup(contentType);
            Dictionary <Classification, ClassificationTag> dictionary = this._classifications;

            if (CommentTagger.IsHtmlMarkup(contentType))
            {
                dictionary = this._htmlClassifications;
            }
            else if (CommentTagger.IsXmlMarkup(contentType))
            {
                dictionary = this._xmlClassifications;
            }
            List <ITagSpan <ClassificationTag> > list = null;

            foreach (IMappingTagSpan <IClassificationTag> current in this._aggregator.GetTags(spans))
            {
                string classification = current.Tag.ClassificationType.Classification;
                if (classification.Contains("comment", StringComparison.OrdinalIgnoreCase))
                {
                    NormalizedSnapshotSpanCollection spans2 = current.Span.GetSpans(snapshot);
                    if (spans2.Count > 0)
                    {
                        SnapshotSpan snapshotSpan = spans2[0];
                        string       text         = snapshotSpan.GetText();
                        if (!string.IsNullOrWhiteSpace(text))
                        {
                            string text2 = text.StartsWithOneOf(CommentTagger.Comments, StringComparison.Ordinal);
                            if (text2 == null)
                            {
                                if (!flag)
                                {
                                    continue;
                                }
                                text2 = "";
                            }
                            int length = text2.Length;
                            int num    = 0;
                            if (flag && text2.Length > 0)
                            {
                                if (!text.EndsWith("-->"))
                                {
                                    continue;
                                }
                                num = 3;
                            }
                            ClassificationTag classificationTag = null;
                            string            text3;
                            if (CommentTagger.Match(text, length, CommentTagger.ImportantComments, out text3))
                            {
                                classificationTag = dictionary[Classification.Important];
                            }
                            else if (CommentTagger.Match(text, length, CommentTagger.QuestionComments, out text3))
                            {
                                classificationTag = dictionary[Classification.Question];
                            }
                            else if (CommentTagger.Match(text, length, CommentTagger.RemovedComments, out text3))
                            {
                                if (text2 == "//" && text3 == "//")
                                {
                                    int num2 = length + text3.Length;
                                    if (text.Length > num2 && text[num2] != '/')
                                    {
                                        classificationTag = dictionary[Classification.Removed];
                                    }
                                }
                                else
                                {
                                    classificationTag = dictionary[Classification.Removed];
                                }
                            }
                            else if (CommentTagger.Match(text, length, CommentTagger.TaskComments, StringComparison.OrdinalIgnoreCase, out text3))
                            {
                                CommentTagger.FixTaskComment(text, length, ref text3);
                                classificationTag = dictionary[Classification.Task];
                            }
                            else if (CommentTagger.Match(text, length, CommentTagger.WtfComments, out text3))
                            {
                                classificationTag = dictionary[Classification.Wtf];
                            }
                            if (classificationTag != null)
                            {
                                int          num3                = text2.Length + text3.Length;
                                int          num4                = snapshotSpan.Length - (num3 + num);
                                SnapshotSpan snapshotSpan2       = new SnapshotSpan(snapshotSpan.Snapshot, snapshotSpan.Start + num3, num4);
                                TagSpan <ClassificationTag> item = new TagSpan <ClassificationTag>(snapshotSpan2, classificationTag);
                                if (list == null)
                                {
                                    list = new List <ITagSpan <ClassificationTag> >();
                                }
                                list.Add(item);
                            }
                        }
                    }
                }
            }
            return(list ?? CommentTagger.EmptyTags);
        }