Esempio n. 1
0
        public bool ScanTokenAndProvideInfoAboutIt(TokenInfo tokenInfo, ref int state)
        {
            if (_lexer == null)
            {
                return(false);
            }

            ScanTokenInfo info = _lexer.GetToken((ScanState)state);

            if (info == null)
            {
                return(false);
            }

            state = (int)info.State;

            _lastColor   = (TokenColor)info.Color;
            _colorizeEnd = info.ColorizeEnd;

            tokenInfo.Color   = _lastColor;
            tokenInfo.Type    = (TokenType)info.Type;
            tokenInfo.Trigger = (TokenTriggers)info.Triggers;

            if (info.Token == null)
            {
                return(false);
            }

            tokenInfo.StartIndex = info.Token.Location.Column - 1;
            tokenInfo.EndIndex   = info.Token.Location.EndColumn - 2;

            return(!info.IsEndOfLine);
        }
Esempio n. 2
0
        public BracketFinder(NemerleSource source, int startLine,
                             int startCol, NemerleScanner scanner, IVsTextColorState colorState)
        {
            #region Init fields

            Scanner   = scanner;
            Source    = source;
            StartLine = startLine;
            Lex       = scanner.GetNewLexer();
            Lex.SetFileName(source.GetFilePath());
            ColorState = colorState;
            _lineCount = source.GetLineCount();
            var line = startLine - 1;
            _buffer = new string[1] {
                source.GetText(line, 0, line, source.GetLineLength(line))
            };
            _startBufferLine = line;

            #endregion

            #region 2. Determine that it is a paired token. 3. Determine paired token.

            // Get tokens of line under text carret into dynamic array.
            List <ScanTokenInfo> lineToks = GetLineTokens(startLine, true);
            // Find index of token which located under text carret.
            int index = FindIndex(lineToks, x => x.Token.Location.Contains(startLine, startCol));

            if (index < 0)
            {
                return;
            }

            // If index is corret get corresponding token.
            ScanTokenInfo startBraceInfo = lineToks[index];
            // Remember it, if token have paired token.
            if (IsPairedToken(startBraceInfo.Token))
            {
                StartBraceInfo = startBraceInfo;
            }
            else
            {
                // otherwise try get right-hand token...
                startBraceInfo = RightHand(lineToks, index);
                // Remember it, if token have paired token.
                if (IsPairedToken(startBraceInfo.Token))
                {
                    StartBraceInfo = startBraceInfo;
                }
            }

            #endregion
        }
Esempio n. 3
0
        /// <summary>
        /// Implementation of<c>GetLineTokens</c>(). Don't use this method directly!
        /// </summary>
        IEnumerable <ScanTokenInfo> GetLineTokens(ScanLexer lex, ScanState scanState)
        {
            ScanTokenInfo info = lex.GetToken(scanState);

            scanState = info.State;
            while (!info.IsEndOfLine)
            {
                yield return(info);

                info      = lex.GetToken(scanState);
                scanState = info.State;
            }
        }