public TokenTagCollection Match(SnapshotSpan span)
        {
            _builder.Snapshot = span.Snapshot;

            var    tokenTags = new TokenTagCollection(span);
            string token     = span.GetText();
            int    position  = span.Start + token.Length;

            if (token.StartsWith("#"))
            {
                int start = position - token.Length;

                if (!_builder.Start.HasValue)
                {
                    _builder.Start = start;
                    string text = span.Snapshot.GetText();

                    int nConsumed = _builder.ConsumeUntil(text, start, "\r", "\n");
                    if (nConsumed >= 0)
                    {
                        _builder.End = _builder.Start + nConsumed;
                        var preprocessorSpan = _builder.ToSpan();

                        _builder.Clear();
                        _spans.Add(preprocessorSpan);

                        tokenTags.Consumed          = preprocessorSpan.Length - token.Length;
                        tokenTags.ClassifierTagSpan = new TagSpan <GLSLClassifierTag>(preprocessorSpan, new GLSLClassifierTag(TOKEN_TYPE));
                    }
                }
            }

            return(tokenTags);
        }
Exemplo n.º 2
0
        public void Clear()
        {
            _parenthesisSpans.Clear();
            _curlyBracketSpans.Clear();
            _squareBracketSpans.Clear();

            _parenthesisBuilder.Clear();
            _curlyBracketBuilder.Clear();
            _squareBracketBuilder.Clear();

            _rootScope = null;
        }
Exemplo n.º 3
0
        private SnapshotSpan?GetSpan(SpanBuilder spanBuilder, string text, int position, char openingChar, char closingChar)
        {
            if (!spanBuilder.Start.HasValue)
            {
                spanBuilder.Start = position;

                int end = GetClosingPosition(text, position, openingChar, closingChar, spanBuilder);
                if (end >= 0)
                {
                    spanBuilder.End = end + 1;
                    var span = spanBuilder.ToSpan();
                    spanBuilder.Clear();

                    return(span);
                }
            }

            return(null);
        }
Exemplo n.º 4
0
        public TokenTagCollection Match(SnapshotSpan span)
        {
            _singleLineCommentBuilder.Snapshot = span.Snapshot;
            _multiLineCommentBuilder.Snapshot  = span.Snapshot;

            var    tokenTags = new TokenTagCollection(span);
            string token     = span.GetText();
            int    position  = span.Start + token.Length;

            if (token.Contains("//"))
            {
                int tokenIndex = token.IndexOf("//");
                int start      = position - token.Length + tokenIndex;

                if (!_singleLineCommentBuilder.Start.HasValue)
                {
                    _singleLineCommentBuilder.Start = start;
                    string text = span.Snapshot.GetText();

                    int end = _singleLineCommentBuilder.ConsumeUntil(text, start, "\r", "\n");
                    if (end >= 0)
                    {
                        _singleLineCommentBuilder.End = end;
                        var commentSpan = _singleLineCommentBuilder.ToSpan();
                        _singleLineCommentBuilder.Clear();

                        var commentTagSpan = new TagSpan <GLSLClassifierTag>(commentSpan, new GLSLClassifierTag(TOKEN_TYPE));
                        _singleLineComments.Add(commentTagSpan);

                        tokenTags.Consumed = commentSpan.Length - token.Length;
                    }
                }
            }

            if (token.Contains("/*"))
            {
                int tokenIndex = token.IndexOf("/*");
                int start      = position - token.Length + tokenIndex;

                if (!_multiLineCommentBuilder.Start.HasValue)
                {
                    _multiLineCommentBuilder.Start = start;
                    string text = span.Snapshot.GetText();

                    int end = _multiLineCommentBuilder.ConsumeUntil(text, start, "*/");
                    if (end >= 0)
                    {
                        _multiLineCommentBuilder.End = end + 1;
                        var commentSpan = _multiLineCommentBuilder.ToSpan();
                        _multiLineCommentBuilder.Clear();

                        var commentTagSpan = new TagSpan <IGLSLTag>(commentSpan, new GLSLClassifierTag(TOKEN_TYPE));
                        _multiLineComments.Add(commentTagSpan);

                        int outlineEnd = _multiLineCommentBuilder.ConsumeUntil(text, start, "\r", "\n");
                        if (outlineEnd >= 0)
                        {
                            var outlineTagSpan = new TagSpan <IGLSLTag>(commentSpan, new GLSLOutlineTag(TOKEN_TYPE, text.Substring(start, outlineEnd - start) + "...*/"));
                            _multiLineComments.Add(outlineTagSpan);
                        }

                        tokenTags.Consumed = commentSpan.Length - token.Length;
                    }
                }
            }

            tokenTags.SetClassifierTag(_singleLineComments);
            tokenTags.SetClassifierTag(_multiLineComments.OfType <TagSpan <GLSLClassifierTag> >());
            tokenTags.AddOutlineTagSpans(_multiLineComments.OfType <TagSpan <GLSLOutlineTag> >());

            return(tokenTags);
        }