public override void ProcessStringCharacter(char currentStringCharacter, int currentPatternPosition, WildcardPatternMatcher.PatternPositionsVisitor patternPositionsForCurrentStringPosition, WildcardPatternMatcher.PatternPositionsVisitor patternPositionsForNextStringPosition)
 {
     if (this._regex.IsMatch(new string(currentStringCharacter, 1)))
     {
         base.ProcessStringCharacter(currentStringCharacter, currentPatternPosition, patternPositionsForCurrentStringPosition, patternPositionsForNextStringPosition);
     }
 }
Exemple #2
0
        /// <summary>
        /// Instantiate internal regex member if not already done.
        /// </summary>
        /// <returns>True on success, false otherwise.</returns>
        private void Init()
        {
            StringComparison GetStringComparison()
            {
                StringComparison stringComparison;

                if (Options.HasFlag(WildcardOptions.IgnoreCase))
                {
                    stringComparison = Options.HasFlag(WildcardOptions.CultureInvariant)
                        ? StringComparison.InvariantCultureIgnoreCase
                        : CultureInfo.CurrentCulture.Name.Equals("en-US-POSIX", StringComparison.OrdinalIgnoreCase)
                                       // The collation behavior of the POSIX locale (also known as the C locale) is case sensitive.
                                       // For this specific locale, we use 'OrdinalIgnoreCase'.
                            ? StringComparison.OrdinalIgnoreCase
                            : StringComparison.CurrentCultureIgnoreCase;
                }
                else
                {
                    stringComparison = Options.HasFlag(WildcardOptions.CultureInvariant)
                        ? StringComparison.InvariantCulture
                        : StringComparison.CurrentCulture;
                }

                return(stringComparison);
            }

            if (_isMatch != null)
            {
                return;
            }

            if (Pattern.Length == 1 && Pattern[0] == '*')
            {
                _isMatch = s_matchAll;
                return;
            }

            int index = Pattern.IndexOfAny(s_specialChars);

            if (index == -1)
            {
                // No special characters present in the pattern, so we can just do a string comparison.
                _isMatch = str => string.Equals(str, Pattern, GetStringComparison());
                return;
            }

            if (index == Pattern.Length - 1 && Pattern[index] == '*')
            {
                // No special characters present in the pattern before last position and last character is asterisk.
                var patternWithoutAsterisk = Pattern.AsMemory().Slice(0, index);
                _isMatch = str => str.AsSpan().StartsWith(patternWithoutAsterisk.Span, GetStringComparison());
                return;
            }

            var matcher = new WildcardPatternMatcher(this);

            _isMatch = matcher.IsMatch;
        }
Exemple #3
0
        /// <summary>
        /// Instantiate internal regex member if not already done.
        /// </summary>
        /// <returns>True on success, false otherwise.</returns>
        private void Init()
        {
            StringComparison GetStringComparison()
            {
                StringComparison stringComparison;

                if (Options.HasFlag(WildcardOptions.IgnoreCase))
                {
                    stringComparison = Options.HasFlag(WildcardOptions.CultureInvariant)
                        ? StringComparison.InvariantCultureIgnoreCase
                        : StringComparison.CurrentCultureIgnoreCase;
                }
                else
                {
                    stringComparison = Options.HasFlag(WildcardOptions.CultureInvariant)
                        ? StringComparison.InvariantCulture
                        : StringComparison.CurrentCulture;
                }

                return(stringComparison);
            }

            if (_isMatch != null)
            {
                return;
            }

            if (Pattern.Length == 1 && Pattern[0] == '*')
            {
                _isMatch = s_matchAll;
                return;
            }

            int index = Pattern.IndexOfAny(s_specialChars);

            if (index == -1)
            {
                // No special characters present in the pattern, so we can just do a string comparison.
                _isMatch = str => string.Equals(str, Pattern, GetStringComparison());
                return;
            }

            if (index == Pattern.Length - 1 && Pattern[index] == '*')
            {
                // No special characters present in the pattern before last position and last character is asterisk.
                var patternWithoutAsterisk = Pattern.AsMemory().Slice(0, index);
                _isMatch = str => str.AsSpan().StartsWith(patternWithoutAsterisk.Span, GetStringComparison());
                return;
            }

            var matcher = new WildcardPatternMatcher(this);

            _isMatch = matcher.IsMatch;
        }
Exemple #4
0
 /// <summary>
 /// Instantiate internal regex member if not already done.
 /// </summary>
 ///
 /// <returns> true on success, false otherwise </returns>
 ///
 /// <remarks>  </remarks>
 ///
 private void Init()
 {
     if (_isMatch == null)
     {
         if (Pattern.Length == 1 && Pattern[0] == '*')
         {
             _isMatch = _ => true;
         }
         else
         {
             var matcher = new WildcardPatternMatcher(this);
             _isMatch = matcher.IsMatch;
         }
     }
 }
 private bool Init()
 {
     if (this._isMatch == null)
     {
         if (false)
         {
             Regex regex = WildcardPatternToRegexParser.Parse(this);
             this._isMatch = new Predicate <string>(regex.IsMatch);
         }
         else
         {
             WildcardPatternMatcher matcher = new WildcardPatternMatcher(this);
             this._isMatch = new Predicate <string>(matcher.IsMatch);
         }
     }
     return(this._isMatch != null);
 }
Exemple #6
0
        /// <summary>
        /// Instantiate internal regex member if not already done.
        /// </summary>
        /// <returns>True on success, false otherwise.</returns>
        private void Init()
        {
            if (_isMatch != null)
            {
                return;
            }

            if (Pattern.Length == 1 && Pattern[0] == '*')
            {
                _isMatch = s_matchAll;
                return;
            }

            if (Pattern.IndexOfAny(s_specialChars) == -1)
            {
                // No special characters present in the pattern, so we can just do a string comparison.
                StringComparison stringComparison;
                if (Options.HasFlag(WildcardOptions.IgnoreCase))
                {
                    stringComparison = Options.HasFlag(WildcardOptions.CultureInvariant)
                        ? StringComparison.InvariantCultureIgnoreCase
                        : StringComparison.CurrentCultureIgnoreCase;
                }
                else
                {
                    stringComparison = Options.HasFlag(WildcardOptions.CultureInvariant)
                        ? StringComparison.InvariantCulture
                        : StringComparison.CurrentCulture;
                }

                _isMatch = str => string.Equals(str, Pattern, stringComparison);
                return;
            }

            var matcher = new WildcardPatternMatcher(this);

            _isMatch = matcher.IsMatch;
        }
Exemple #7
0
 private bool Init()
 {
     if (this._isMatch == null)
     {
         if (false)
         {
             Regex regex = WildcardPatternToRegexParser.Parse(this);
             this._isMatch = new Predicate<string>(regex.IsMatch);
         }
         else
         {
             WildcardPatternMatcher matcher = new WildcardPatternMatcher(this);
             this._isMatch = new Predicate<string>(matcher.IsMatch);
         }
     }
     return (this._isMatch != null);
 }
Exemple #8
0
 /// <summary>
 /// Instantiate internal regex member if not already done.
 /// </summary>
 ///
 /// <returns> true on success, false otherwise </returns>
 ///
 /// <remarks>  </remarks>
 ///
 private void Init()
 {
     if (_isMatch == null)
     {
         if (Pattern.Length == 1 && Pattern[0] == '*')
         {
             _isMatch = _ => true;
         }
         else
         {
             var matcher = new WildcardPatternMatcher(this);
             _isMatch = matcher.IsMatch;
         }
     }
 }
 public override void ProcessStringCharacter(char currentStringCharacter, int currentPatternPosition, WildcardPatternMatcher.PatternPositionsVisitor patternPositionsForCurrentStringPosition, WildcardPatternMatcher.PatternPositionsVisitor patternPositionsForNextStringPosition)
 {
     patternPositionsForCurrentStringPosition.Add(currentPatternPosition + 1);
     patternPositionsForNextStringPosition.Add(currentPatternPosition);
 }
 public override void ProcessEndOfString(int currentPatternPosition, WildcardPatternMatcher.PatternPositionsVisitor patternPositionsForEndOfStringPosition)
 {
     patternPositionsForEndOfStringPosition.Add(currentPatternPosition + 1);
 }
 public abstract void ProcessStringCharacter(char currentStringCharacter, int currentPatternPosition, WildcardPatternMatcher.PatternPositionsVisitor patternPositionsForCurrentStringPosition, WildcardPatternMatcher.PatternPositionsVisitor patternPositionsForNextStringPosition);
 public abstract void ProcessEndOfString(int currentPatternPosition, WildcardPatternMatcher.PatternPositionsVisitor patternPositionsForEndOfStringPosition);
 public static WildcardPatternMatcher.PatternElement[] Parse(WildcardPattern pattern, WildcardPatternMatcher.CharacterNormalizer characterNormalizer)
 {
     WildcardPatternMatcher.MyWildcardPatternParser parser = new WildcardPatternMatcher.MyWildcardPatternParser {
         _characterNormalizer = characterNormalizer,
         _regexOptions = WildcardPatternToRegexParser.TranslateWildcardOptionsIntoRegexOptions(pattern.Options)
     };
     WildcardPatternParser.Parse(pattern, parser);
     return parser._patternElements.ToArray();
 }
 public override void ProcessStringCharacter(char currentStringCharacter, int currentPatternPosition, WildcardPatternMatcher.PatternPositionsVisitor patternPositionsForCurrentStringPosition, WildcardPatternMatcher.PatternPositionsVisitor patternPositionsForNextStringPosition)
 {
     if (this._literalCharacter == currentStringCharacter)
     {
         base.ProcessStringCharacter(currentStringCharacter, currentPatternPosition, patternPositionsForCurrentStringPosition, patternPositionsForNextStringPosition);
     }
 }