Beispiel #1
0
        /// <summary>
        /// Constructor
        /// </summary>
        public StringFilter(FilterSyntax syntax, string filter)
        {
            if (filter != null)
            {
                switch (syntax)
                {
                case FilterSyntax.Auto:
                    if (filter.StartsWith("^", StringComparison.Ordinal))
                    {
                        goto case FilterSyntax.Pattern;
                    }
                    goto case FilterSyntax.Wildcard;

                case FilterSyntax.Wildcard:
                    foreach (string s in filter.TrimEnd(';').Split(';'))
                    {
                        processFilter(s, true);
                    }
                    break;

                case FilterSyntax.Pattern:
                    processFilter(filter, false);
                    break;
                }
            }
        }
Beispiel #2
0
 /// constructor
 public FullPathFilter(FilterSyntax syntax, string filter, BackslashOption backslash)
     : base(syntax, filter)
 {
     _backslash = backslash;
 }
Beispiel #3
0
 public SelfIgnoreFilenameOnlyFilter(string except, FilterSyntax syntax, string filter) : base(syntax, filter)
 {
     _except = Path.GetFullPath(except);
 }
Beispiel #4
0
 /// Constructor
 public FileNameOnlyFilter(FilterSyntax syntax, string filter)
     : base(syntax, filter)
 {
 }
Beispiel #5
0
 public SelfIgnoreFilenameOnlyFilter(string except, FilterSyntax syntax, string filter)
     : base(syntax, filter)
 {
     _except = Path.GetFullPath(except);
 }
Beispiel #6
0
 /// Constructor
 public FileNameOnlyFilter(FilterSyntax syntax, string filter)
     : base(syntax, filter)
 {
 }
Beispiel #7
0
        /// <summary>
        /// Constructor
        /// </summary>
        public StringFilter(FilterSyntax syntax, string filter)
        {
            if (filter != null)
            {
                switch (syntax)
                {
                    case FilterSyntax.Auto:
                        if (filter.StartsWith("^", StringComparison.Ordinal))
                            goto case FilterSyntax.Pattern;
                        goto case FilterSyntax.Wildcard;

                    case FilterSyntax.Wildcard:
                        foreach (string s in filter.TrimEnd(';').Split(';'))
                            processFilter(s, true);
                        break;
                    case FilterSyntax.Pattern:
                        processFilter(filter, false);
                        break;
                }
            }
        }
Beispiel #8
0
 /// constructor
 public FullPathFilter(FilterSyntax syntax, string filter, BackslashOption backslash)
     : base(syntax, filter)
 {
     _backslash = backslash;
 }
    protected IEnumerable <OmniboxFilterResult> GetFilterQueries(string rawQuery, QueryDescription queryDescription, FilterSyntax syntax, List <OmniboxToken> tokens)
    {
        List <OmniboxFilterResult> result = new List <OmniboxFilterResult>();

        int operatorIndex = syntax.Index + syntax.TokenLength;

        List <(QueryToken token, ImmutableStack <OmniboxMatch> stack)> ambiguousTokens = GetAmbiguousTokens(null, ImmutableStack <OmniboxMatch> .Empty,
                                                                                                            queryDescription, tokens, syntax.Index, operatorIndex).ToList();

        foreach ((QueryToken token, ImmutableStack <OmniboxMatch> stack)pair in ambiguousTokens)
        {
            var distance     = pair.stack.Sum(a => a.Distance);
            var tokenMatches = pair.stack.Reverse().ToArray();
            var token        = pair.token;

            if (syntax.Completion == FilterSyntaxCompletion.Token)
            {
                if (tokens[operatorIndex - 1].Next(rawQuery) == '.' && pair.stack.All(a => ((QueryToken)a.Value).ToString().ToOmniboxPascal() == a.Text))
                {
                    foreach (var qt in QueryUtils.SubTokens(pair.token, queryDescription, SubTokensOptions.CanAnyAll | SubTokensOptions.CanElement))
                    {
                        result.Add(new OmniboxFilterResult(distance, syntax, qt, tokenMatches));
                    }
                }
                else
                {
                    result.Add(new OmniboxFilterResult(distance, syntax, token, tokenMatches));
                }
            }
            else
            {
                string?canFilter = QueryUtils.CanFilter(pair.token);

                if (canFilter.HasText())
                {
                    result.Add(new OmniboxFilterResult(distance, syntax, token, tokenMatches)
                    {
                        CanFilter = canFilter,
                    });
                }
                else
                {
                    FilterOperation operation = FilterValueConverter.ParseOperation(tokens[operatorIndex].Value);

                    if (syntax.Completion == FilterSyntaxCompletion.Operation)
                    {
                        var suggested = SugestedValues(pair.token);

                        if (suggested == null)
                        {
                            result.Add(new OmniboxFilterResult(distance, syntax, token, tokenMatches)
                            {
                                Operation = operation,
                            });
                        }
                        else
                        {
                            foreach (var item in suggested)
                            {
                                result.Add(new OmniboxFilterResult(distance, syntax, token, tokenMatches)
                                {
                                    Operation = operation,
                                    Value     = item.Value
                                });
                            }
                        }
                    }
                    else
                    {
                        var values = GetValues(pair.token, tokens[operatorIndex + 1]);

                        foreach (var value in values)
                        {
                            result.Add(new OmniboxFilterResult(distance, syntax, token, tokenMatches)
                            {
                                Operation  = operation,
                                Value      = value.Value,
                                ValueMatch = value.Match,
                            });
                        }
                    }
                }
            }
        }

        return(result);
    }