Пример #1
0
        public void Visit(CharacterListToken token)
        {
            Success = false;
            var read = _Reader.Read();

            if (read == -1)
            {
                return;
            }
            var currentChar = (char)read;
            var contains    = token.Characters.Contains(currentChar);

            if (token.IsNegated)
            {
                if (contains)
                {
                    return;
                }
            }
            else
            {
                if (!contains)
                {
                    return;
                }
            }


            AddMatch(new GlobTokenMatch()
            {
                Token = token, Value = currentChar.ToString()
            });
        }
Пример #2
0
        public IGlobTokenEvaluator CreateTokenEvaluator(CharacterListToken token)
        {
            if (_options.CaseInsensitive)
            {
                return(new CharacterListTokenEvaluatorCaseInsensitive(token));
            }

            return(new CharacterListTokenEvaluator(token));
        }
Пример #3
0
 void IGlobTokenVisitor.Visit(CharacterListToken token)
 {
     _stringBuilder.Append('[');
     if (token.IsNegated)
     {
         _stringBuilder.Append('^');
     }
     _stringBuilder.Append(Regex.Escape(new string(token.Characters.ToArray())));
     _stringBuilder.Append(']');
 }
Пример #4
0
        public CharacterListTokenEvaluatorCaseInsensitive(CharacterListToken token)
        {
            _token = token;

            _charactersAsUpperInvariant = new char[token.Characters.Length];
            for (int i = 0; i < token.Characters.Length; i++)
            {
                var tokenChar = token.Characters[i];
                _charactersAsUpperInvariant[i] = Char.ToUpperInvariant(tokenChar);
            }
        }
Пример #5
0
        void IGlobTokenVisitor.Visit(CharacterListToken token)
        {
            _stringBuilder.Append('[');

            if (token.IsNegated)
            {
                _stringBuilder.Append('!');
            }

            foreach (var tokenChar in token.Characters)
            {
                _stringBuilder.Append(tokenChar);
            }
            _stringBuilder.Append(']');
        }
Пример #6
0
 void IGlobTokenVisitor.Visit(CharacterListToken token)
 {
     AddMatchGenerator(new CharacterListTokenMatchGenerator(token, _random));
 }
Пример #7
0
 public CharacterListTokenMatchGenerator(CharacterListToken token, Random random)
 {
     _token  = token;
     _random = random;
     PopulateNonMatchingCharList();
 }
Пример #8
0
        /// <summary>
        /// Parses a token for a range or list globbing expression.
        /// </summary>
        private IGlobToken ReadRangeOrListToken(GlobStringReader reader)
        {
            bool isNegated     = false;
            bool isNumberRange = false;
            bool isLetterRange = false;
            bool isCharList    = false;

            if (reader.PeekChar() == GlobStringReader.ExclamationMarkChar)
            {
                isNegated = true;
                reader.Read();
            }

            var nextChar = reader.PeekChar();

            if (Char.IsLetterOrDigit(nextChar))
            {
                reader.Read();
                nextChar = reader.PeekChar();
                if (nextChar == GlobStringReader.DashChar)
                {
                    if (Char.IsLetter(reader.CurrentChar))
                    {
                        isLetterRange = true;
                    }
                    else
                    {
                        isNumberRange = true;
                    }
                    //  throw new ArgumentOutOfRangeException("Range expressions must either be a letter range, i.e [a-z] or a number range i.e [0-9]");
                }
                else
                {
                    isCharList = true;
                }

                AcceptCurrentChar(reader);
            }
            else
            {
                isCharList = true;
                reader.Read();
                AcceptCurrentChar(reader);
            }

            if (isLetterRange || isNumberRange)
            {
                // skip over the dash char
                reader.ReadChar();
            }

            while (reader.ReadChar())
            {
                //  ReadCharacter(CharacterType.BracketedText, CurrentChar);
                if (reader.IsEndOfRangeOrList)
                {
                    var peekChar = reader.PeekChar();
                    // Close brackets within brackets are escaped with another
                    // Close bracket. e.g. [a]] matches a[
                    if (peekChar == GlobStringReader.CloseBracketChar)
                    {
                        AcceptCurrentChar(reader);
                        // Read();
                        //ReadCharacter(CharacterType.BracketedText, CurrentChar);
                    }
                    else
                    {
                        break;
                    }
                }
                else
                {
                    AcceptCurrentChar(reader);
                }
            }

            // construct token
            IGlobToken result = null;
            var        value  = GetBufferAndReset();

            if (isCharList)
            {
                result = new CharacterListToken(value.ToCharArray(), isNegated);
            }
            else if (isLetterRange)
            {
                var start = value[0];
                var end   = value[1];
                result = new LetterRangeToken(start, end, isNegated);
            }
            else if (isNumberRange)
            {
                var start = value[0]; // int.Parse(value[0].ToString());
                var end   = value[1]; // int.Parse(value[1].ToString());
                result = new NumberRangeToken(start, end, isNegated);
            }

            return(result);
        }
Пример #9
0
 public void Visit(CharacterListToken token)
 {
     AddEvaluator(_evaluatorFactory.CreateTokenEvaluator(token));
 }
 public CharacterListTokenEvaluator(CharacterListToken token)
 {
     _token = token;
 }
Пример #11
0
 public void Visit(CharacterListToken token)
 {
     AddEvaluator(new CharacterListTokenEvaluator(token));
 }