internal static IEnumerable <TokenInfo> ReverseTokenInfoEnumerable(Genero4glClassifier classifier, SnapshotPoint startPoint)
        {
            var startLine = startPoint.GetContainingLine();
            int curLine   = startLine.LineNumber;
            var tokens    = classifier.GetTokens(new SnapshotSpan(startLine.Start, startPoint));

            for (; ;)
            {
                for (int i = tokens.Count - 1; i >= 0; i--)
                {
                    yield return(tokens[i]);
                }

                // indicate the line break
                yield return(default(TokenInfo));

                curLine--;
                if (curLine >= 0)
                {
                    var prevLine = startPoint.Snapshot.GetLineFromLineNumber(curLine);
                    tokens = classifier.GetTokens(prevLine.Extent);
                }
                else
                {
                    break;
                }
            }
        }
Exemple #2
0
 public GeneroTextViewChangedListener(IWpfTextView textView)
 {
     _textView                     = textView;
     _options                      = _textView.Options;
     _textView.Closed             += _textView_Closed;
     _textView.TextBuffer.Changed += TextBuffer_Changed;
     _classifier                   = textView.TextBuffer.GetGeneroClassifier();
 }
        internal static ClassificationTypeDefinition OperatorClassificationDefinition = null; // Set via MEF

        #endregion

        #region IDlrClassifierProvider

        public IClassifier GetClassifier(ITextBuffer buffer)
        {
            if (_categoryMap == null)
            {
                _categoryMap = FillCategoryMap(_classificationRegistry);
            }

            Genero4glClassifier res = null;

            if (buffer != null && buffer.Properties != null)
            {
                if (!buffer.Properties.TryGetProperty <Genero4glClassifier>(typeof(Genero4glClassifier), out res) &&
                    ContentTypes != null &&
                    ContentTypes.Any(x => x != null &&
                                     buffer.ContentType != null &&
                                     buffer.ContentType.IsOfType(x.TypeName)))
                {
                    res = new Genero4glClassifier(this, buffer);
                    buffer.Properties.AddProperty(typeof(Genero4glClassifier), res);
                }
            }

            if (VSGeneroPackage.Instance != null)
            {
                if (VSGeneroPackage.Instance.GlobalFunctionProvider == null)
                {
                    VSGeneroPackage.Instance.GlobalFunctionProvider = _PublicFunctionProvider;
                }

                if (VSGeneroPackage.Instance.ProgramFileProvider == null)
                {
                    VSGeneroPackage.Instance.ProgramFileProvider = _ProgramFileProvider;
                }

                if (VSGeneroPackage.Instance.GlobalDatabaseProvider == null)
                {
                    VSGeneroPackage.Instance.GlobalDatabaseProvider = _DatabaseInfoProvider;
                }

                if (VSGeneroPackage.Instance.BuildTaskProvider == null)
                {
                    VSGeneroPackage.Instance.BuildTaskProvider = _BuildTaskProvider;
                }

                if (VSGeneroPackage.Instance.CommentValidators == null)
                {
                    VSGeneroPackage.Instance.CommentValidators = _CommentValidators;
                }
            }

            if (res == null)
            {
                return(GetClassifier());
            }
            return(res);
        }
        internal static IEnumerator <ClassificationSpan> ReverseClassificationSpanEnumerator(Genero4glClassifier classifier, SnapshotPoint startPoint)
        {
            if (classifier != null && startPoint != null)
            {
                var startLine = startPoint.GetContainingLine();
                if (startLine != null)
                {
                    int curLine = startLine.LineNumber;
                    var tokens  = classifier.GetClassificationSpans(new SnapshotSpan(startLine.Start, startPoint));

                    for (;;)
                    {
                        for (int i = tokens.Count - 1; i >= 0; i--)
                        {
                            yield return(tokens[i]);
                        }

                        // indicate the line break
                        yield return(null);

                        curLine--;
                        if (curLine >= 0 && startPoint.Snapshot != null)
                        {
                            var prevLine = startPoint.Snapshot.GetLineFromLineNumber(curLine);
                            tokens = classifier.GetClassificationSpans(prevLine.Extent);
                        }
                        else
                        {
                            break;
                        }
                    }
                }
            }
        }