Ejemplo n.º 1
0
        private bool ParseRemaining()
        {
            int start = _parsePoint;

            if (CharacterUtilities.IsNumberStart(_expression[_parsePoint])) // numeric
            {
                if (!ParseNumeric(start))
                {
                    return(false);
                }
            }
            else if (CharacterUtilities.IsSimpleStringStart(_expression[_parsePoint])) // simple string (handle 'and' and 'or')
            {
                if (!ParseSimpleStringOrFunction(start))
                {
                    return(false);
                }
            }
            else
            {
                // Something that wasn't a number or a letter, like a newline (%0a)
                _errorState        = true;
                _errorPosition     = start + 1;
                _errorResource     = "UnexpectedCharacterInCondition";
                _unexpectedlyFound = Convert.ToString(_expression[_parsePoint], CultureInfo.InvariantCulture);
                return(false);
            }
            return(true);
        }
Ejemplo n.º 2
0
 private void SkipSimpleStringChars()
 {
     while (_parsePoint < _expression.Length && CharacterUtilities.IsSimpleStringChar(_expression[_parsePoint]))
     {
         _parsePoint++;
     }
     return;
 }
Ejemplo n.º 3
0
 private void SkipHexDigits()
 {
     while (_parsePoint < _expression.Length && CharacterUtilities.IsHexDigit(_expression[_parsePoint]))
     {
         _parsePoint++;
     }
     return;
 }
Ejemplo n.º 4
0
 private bool ParseNumeric(int start)
 {
     if ((_expression.Length - _parsePoint) > 2 && _expression[_parsePoint] == '0' && (_expression[_parsePoint + 1] == 'x' || _expression[_parsePoint + 1] == 'X'))
     {
         // Hex number
         _parsePoint += 2;
         SkipHexDigits();
         _lookahead = new Token(Token.TokenType.Numeric, _expression.Substring(start, _parsePoint - start));
     }
     else if (CharacterUtilities.IsNumberStart(_expression[_parsePoint]))
     {
         // Decimal number
         if (_expression[_parsePoint] == '+')
         {
             _parsePoint++;
         }
         else if (_expression[_parsePoint] == '-')
         {
             _parsePoint++;
         }
         do
         {
             SkipDigits();
             if (_parsePoint < _expression.Length && _expression[_parsePoint] == '.')
             {
                 _parsePoint++;
             }
             if (_parsePoint < _expression.Length)
             {
                 SkipDigits();
             }
         } while (_parsePoint < _expression.Length && _expression[_parsePoint] == '.');
         // Do we need to error on malformed input like 0.00.00)? or will the conversion handle it?
         // For now, let the conversion generate the error.
         _lookahead = new Token(Token.TokenType.Numeric, _expression.Substring(start, _parsePoint - start));
     }
     else
     {
         // Unreachable
         _errorState    = true;
         _errorPosition = start + 1;
         return(false);
     }
     return(true);
 }