Exemplo n.º 1
0
        public void Visit(NumberRangeToken token)
        {
            Success = false;
            var read = _Reader.Read();

            if (read == -1)
            {
                return;
            }
            var currentChar = (char)read;

            if (currentChar >= token.Start && currentChar <= token.End)
            {
                if (token.IsNegated)
                {
                    return; // failed to match
                }
            }
            else
            {
                if (!token.IsNegated)
                {
                    return; // failed to match
                }
            }


            AddMatch(new GlobTokenMatch()
            {
                Token = token, Value = currentChar.ToString()
            });
        }
Exemplo n.º 2
0
 void IGlobTokenVisitor.Visit(NumberRangeToken token)
 {
     _stringBuilder.Append('[');
     if (token.IsNegated)
     {
         _stringBuilder.Append('^');
     }
     _stringBuilder.Append(Regex.Escape(token.Start.ToString()));
     _stringBuilder.Append('-');
     _stringBuilder.Append(Regex.Escape(token.End.ToString()));
     _stringBuilder.Append(']');
 }
Exemplo n.º 3
0
        void IGlobTokenVisitor.Visit(NumberRangeToken token)
        {
            _stringBuilder.Append('[');

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

            _stringBuilder.Append(token.Start);
            _stringBuilder.Append('-');
            _stringBuilder.Append(token.End);
            _stringBuilder.Append(']');
        }
Exemplo n.º 4
0
 void IGlobTokenVisitor.Visit(NumberRangeToken token)
 {
     AddMatchGenerator(new NumberRangeTokenMatchGenerator(token, _random));
 }
Exemplo n.º 5
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);
        }
Exemplo n.º 6
0
 public IGlobTokenEvaluator CreateTokenEvaluator(NumberRangeToken token)
 {
     return(new NumberRangeTokenEvaluator(token));
 }
Exemplo n.º 7
0
 public NumberRangeTokenMatchGenerator(NumberRangeToken token, Random _random)
 {
     this.token   = token;
     this._random = _random;
 }
Exemplo n.º 8
0
 public void Visit(NumberRangeToken token)
 {
     AddEvaluator(_evaluatorFactory.CreateTokenEvaluator(token));
 }
Exemplo n.º 9
0
 public NumberRangeTokenEvaluator(NumberRangeToken token)
 {
     _token = token;
 }
Exemplo n.º 10
0
 public void Visit(NumberRangeToken token)
 {
     AddEvaluator(new NumberRangeTokenEvaluator(token));
 }