Exemplo n.º 1
0
        /// <summary>
        /// Pick the next state given just a single character.  This is used
        /// at the start of a new token.
        /// </summary>
        /// <param name="ctype">The type of the character.</param>
        /// <param name="c">The character.</param>
        /// <param name="excludeState">Exclude this state from the possible next state.</param>
        /// <returns>The state.</returns>
        private NextTokenState PickNextState(byte ctype, int c, NextTokenState excludeState)
        {
            if (c == '/')
            {
                return(NextTokenState.MaybeComment);                 // overrides all other cats
            }
            else if ((excludeState != NextTokenState.MaybeHex) &&
                     settings.ParseHexNumbers && (c == '0'))
            {
                return(NextTokenState.MaybeHex);
            }
            else if ((excludeState != NextTokenState.MaybeNumber) &&
                     settings.ParseNumbers &&
                     (settings.IsCharType(ctype, CharTypeBits.Digit) ||
                      (c == '-') || (c == '.')))
            {
                return(NextTokenState.MaybeNumber);
            }
            else if (settings.IsCharType(ctype, CharTypeBits.Word))
            {
                return(NextTokenState.Word);
            }
            else if (settings.GrabEol && (c == 10))
            {
                return(NextTokenState.Eol);
            }
            else if (settings.IsCharType(ctype, CharTypeBits.Whitespace))
            {
                return(NextTokenState.Whitespace);
            }
            else if (settings.IsCharType(ctype, CharTypeBits.Comment))
            {
                return(NextTokenState.LineComment);
            }
            else if (settings.IsCharType(ctype, CharTypeBits.Quote))
            {
                return(NextTokenState.Quote);
            }
            else if ((c == EOF) ||
                     (settings.IsCharType(ctype, CharTypeBits.Eof)))
            {
                return(NextTokenState.Eof);
            }

            return(NextTokenState.Char);
        }