Ejemplo n.º 1
0
 private static int IndexOfDelimiter(string self, int startIndex)
 {
     for (int index = startIndex; index < self.Length; ++index)
     {
         if (SearchPropositionOptions.IsDelimiter(self[index]))
         {
             return(index);
         }
     }
     return(-1);
 }
Ejemplo n.º 2
0
        public static string ReplaceText(string searchText, string replacement, int cursorPos, out int insertTokenPos)
        {
            var replaceFrom = cursorPos - 1;

            while (replaceFrom >= 0 && !SearchPropositionOptions.IsDelimiter(searchText[replaceFrom]))
            {
                replaceFrom--;
            }
            if (replaceFrom == -1)
            {
                replaceFrom = 0;
            }
            else
            {
                replaceFrom++;
            }

            var replaceTo = IndexOfDelimiter(searchText, cursorPos);

            if (replaceTo == -1)
            {
                replaceTo = searchText.Length;
            }

            if (searchText.Substring(replaceFrom, replaceTo - replaceFrom).StartsWith(replacement, StringComparison.OrdinalIgnoreCase))
            {
                insertTokenPos = cursorPos;
                return(searchText);
            }

            var sb = new StringBuilder(searchText);

            sb.Remove(replaceFrom, replaceTo - replaceFrom);
            sb.Insert(replaceFrom, replacement);

            var insertion = sb.ToString();

            insertTokenPos = insertion.LastIndexOf('\t');
            if (insertTokenPos != -1)
            {
                insertion = insertion.Remove(insertTokenPos, 1);
            }
            return(insertion);
        }
Ejemplo n.º 3
0
        public static bool Show(SearchContext context, Rect parentRect, SearchField searchField)
        {
            var te = searchField.GetTextEditor();

            if (te.controlID != GUIUtility.keyboardControl)
            {
                return(false);
            }

            parent       = parentRect;
            options      = new SearchPropositionOptions(context, te.cursorIndex, te.text);
            propositions = SearchProposition.Fetch(context, options);

            enabled = propositions.Count > 0;
            if (!enabled)
            {
                return(false);
            }

            SearchAnalytics.SendEvent(null, SearchAnalytics.GenericEventType.QuickSearchAutoCompleteTab, string.Join(",", options.tokens));
            UpdateCompleteList(te, options);
            return(true);
        }
Ejemplo n.º 4
0
        private static IEnumerable <SearchProposition> FetchPropositions(SearchContext context, SearchPropositionOptions options)
        {
            if (context.options.HasFlag(SearchFlags.NoIndexing))
            {
                return(null);
            }

            return(assetIndexes.SelectMany(db => db.index.GetKeywords().Select(kw => new SearchProposition(kw))));
        }
Ejemplo n.º 5
0
        static IEnumerable <SearchProposition> FetchPropositions(SearchContext context, SearchPropositionOptions options)
        {
            if (!options.flags.HasAny(SearchPropositionFlags.QueryBuilder))
            {
                yield break;
            }

            yield return(new SearchProposition(category: null, "Menu Path", "id:create/", "Filter by menu path.", priority: 9999));
        }
Ejemplo n.º 6
0
        static IEnumerable <SearchProposition> FetchPropositions(SearchContext context, SearchPropositionOptions options)
        {
            if (!options.flags.HasAny(SearchPropositionFlags.QueryBuilder))
            {
                yield break;
            }

            foreach (var proposition in queryEngine.GetPropositions())
            {
                yield return(proposition);
            }
        }
Ejemplo n.º 7
0
        internal IEnumerable <SearchProposition> FindPropositions(SearchContext context, SearchPropositionOptions options)
        {
            if (options.token.StartsWith("p("))
            {
                return(FetchPropertyPropositions(options.token.Substring(2)));
            }

            if (options.token.StartsWith("t:", StringComparison.OrdinalIgnoreCase))
            {
                return(FetchTypePropositions());
            }

            return(fixedPropositions);
        }
Ejemplo n.º 8
0
        private IEnumerable <SearchProposition> FetchPropositions(SearchContext context, SearchPropositionOptions options)
        {
            var category = options.HasAny(SearchPropositionFlags.QueryBuilder) ? "Expressions" : null;

            foreach (var e in EvaluatorManager.evaluators)
            {
                var help = e.description ?? "Expression evaluator";
                yield return(new SearchProposition(category: category, $"{e.name}{{}}", $"{e.name.ToLowerInvariant()}{{\t}}", help, 1));
            }

            if (options.tokens.Length > 0 && options.tokens[0].Length > 0)
            {
                var token = options.tokens[0][0];
                if (token == '#')
                {
                    foreach (var c in PropertySelectors.Enumerate(context.searchView.results.Take(10)))
                    {
                        yield return(new SearchProposition(category: category, label: $"{token}{c.content.text ?? c.path}", $"{c.selector}\t", $"Property ({c.selector})"));
                    }
                }

                if (token == '@')
                {
                    foreach (var s in SelectorManager.selectors.Where(s => s.printable))
                    {
                        yield return(new SearchProposition(category: category, label: $"{token}{s.label}", help: s.description ?? "Selector", replacement: $"@{s.label}\t"));
                    }
                }
            }
        }
Ejemplo n.º 9
0
        static IEnumerable <SearchProposition> FetchPropositions(SearchContext context, SearchPropositionOptions options)
        {
            if (!options.flags.HasAny(SearchPropositionFlags.QueryBuilder))
            {
                yield break;
            }

            foreach (var f in SettingsProviderCache.queryEngine.GetPropositions())
            {
                yield return(f);
            }
        }
Ejemplo n.º 10
0
        public static string ReplaceText(string searchText, string replacement, int cursorPos, out int insertTokenPos)
        {
            var replaceFrom = cursorPos - 1;

            while (replaceFrom >= 0 && !SearchPropositionOptions.IsDelimiter(searchText[replaceFrom]))
            {
                replaceFrom--;
            }
            if (replaceFrom == -1)
            {
                replaceFrom = 0;
            }
            else
            {
                replaceFrom++;
            }

            var activeProviders = SearchService.GetActiveProviders();

            foreach (var provider in activeProviders)
            {
                if (replaceFrom + provider.filterId.Length > searchText.Length || provider.filterId.Length == 1)
                {
                    continue;
                }

                var stringViewTest = new StringView(searchText, replaceFrom, replaceFrom + provider.filterId.Length);
                if (stringViewTest == provider.filterId)
                {
                    replaceFrom += provider.filterId.Length;
                    break;
                }
            }

            var replaceTo = IndexOfDelimiter(searchText, cursorPos);

            if (replaceTo == -1)
            {
                replaceTo = searchText.Length;
            }

            if (searchText.Substring(replaceFrom, replaceTo - replaceFrom).StartsWith(replacement, StringComparison.OrdinalIgnoreCase))
            {
                insertTokenPos = cursorPos;
                return(searchText);
            }

            var sb = new StringBuilder(searchText);

            sb.Remove(replaceFrom, replaceTo - replaceFrom);
            sb.Insert(replaceFrom, replacement);

            var insertion = sb.ToString();

            insertTokenPos = insertion.LastIndexOf('\t');
            if (insertTokenPos != -1)
            {
                insertion = insertion.Remove(insertTokenPos, 1);
            }
            return(insertion);
        }
Ejemplo n.º 11
0
        static IEnumerable <SearchProposition> FetchPropositions(SearchContext context, SearchPropositionOptions options)
        {
            if (!options.flags.HasAny(SearchPropositionFlags.QueryBuilder))
            {
                yield break;
            }

            foreach (var f in QueryListBlockAttribute.GetPropositions(typeof(QueryScopeFilterBlock)))
            {
                yield return(f);
            }
        }