Exemplo n.º 1
0
        private static TokenPosition LocateSubtoken(string filePath, string searchText, bool fullTokensOnly, EditorInfo editorInfo)
        {
            int startLine = 1;
            int startColumnInFirstLine = 0;

            if (editorInfo != null)
            {
                startLine = editorInfo.CurrentLineNum;
                startColumnInFirstLine = editorInfo.CurrentColumn;
            }
            int queryLen             = searchText.Length;
            var bestSubtokenPosition = new TokenPosition(-1, 0, 0);

            foreach (LineInfo lineInfo in FileReader.ReadFileAsEnumerableWithWrap(filePath, startLine))
            {
                int           columnsToIgnore = (lineInfo.LineNumber == startLine ? startColumnInFirstLine : 0);
                TokenPosition tokenPos        = GetLongestSubtoken(lineInfo.LineNumber, lineInfo.LineText, searchText, columnsToIgnore);
                if (tokenPos.MatchLength > bestSubtokenPosition.MatchLength)
                {
                    bestSubtokenPosition = tokenPos;
                    if (tokenPos.MatchLength == queryLen)
                    {
                        break;
                    }
                }
            }
            if (fullTokensOnly && bestSubtokenPosition.MatchLength != queryLen)
            {
                return(new TokenPosition(-1, 0, 0));
            }
            return(bestSubtokenPosition);
        }
        private TokenPosition LocateSubtoken(string filePath, SearchOptions searchOptions, bool fullTokensOnly, EditorInfo editorInfo)
        {
            int startLine = 1;
            int startColumnInFirstLine = 0;

            if (editorInfo != null)
            {
                startLine = editorInfo.CurrentLineNum;
                startColumnInFirstLine = editorInfo.CurrentColumn;
            }
            string searchText = searchOptions.SearchText;

            if (!searchOptions.SearchRegex)
            {
                searchText = searchText.Replace("\"", string.Empty);
            }
            int   queryLen             = searchText.Length;
            var   bestSubtokenPosition = new TokenPosition(-1, 0, 0);
            Regex regex     = searchOptions.SearchRegex ? new Regex(searchText, RegexOptions.Compiled | RegexOptions.IgnoreCase) : null;
            bool  firstLine = true;

            foreach (LineInfo lineInfo in fileReader.ReadFileAsEnumerableWithWrap(filePath, startLine))
            {
                int columnsToIgnore = (firstLine ? startColumnInFirstLine : 0);
                firstLine = false;
                TokenPosition tokenPos = GetLongestSubtoken(lineInfo.LineNumber, lineInfo.LineText, searchText, regex, columnsToIgnore);
                if (tokenPos.MatchLength > bestSubtokenPosition.MatchLength)
                {
                    bestSubtokenPosition = tokenPos;
                    if (tokenPos.MatchLength == queryLen)
                    {
                        break;
                    }
                }
            }
            if (!searchOptions.SearchRegex && fullTokensOnly && bestSubtokenPosition.MatchLength != queryLen)
            {
                return(new TokenPosition(-1, 0, 0));
            }
            return(bestSubtokenPosition);
        }