Esempio n. 1
0
        private IJSONItemNumber ReadItemNumber()
        {
            Debug.Assert(currentSource.currentChar == '-' || (currentSource.currentChar >= '0' && currentSource.currentChar <= '9'));
            var num = new StringBuilder();

            if (currentSource.currentChar == '-')
            {
                num.Append('-');
                currentSource.ReadNextCharNoEOF();
            }
            if (currentSource.currentChar == '0')
            {
                num.Append('0');
                currentSource.ReadNextChar();
            }
            else
            {
                if (currentSource.currentChar >= '1' && currentSource.currentChar <= '9')
                {
                    while (currentSource.currentChar >= '0' && currentSource.currentChar <= '9')
                    {
                        num.Append((char)currentSource.currentChar);
                        currentSource.ReadNextChar();
                    }
                }
                else
                {
                    throw new JSONUnexpectedCharException(currentSource.currentChar, currentSource.pos);
                }
            }
            if (currentSource.currentChar == '.')
            {
                num.Append('.');
                currentSource.ReadNextCharNoEOF();
                if (currentSource.currentChar >= '0' && currentSource.currentChar <= '9')
                {
                    while (currentSource.currentChar >= '0' && currentSource.currentChar <= '9')
                    {
                        num.Append((char)currentSource.currentChar);
                        currentSource.ReadNextChar();
                    }
                }
                else
                {
                    throw new JSONUnexpectedCharException(currentSource.currentChar, currentSource.pos);
                }
            }
            if (currentSource.currentChar == 'e' || currentSource.currentChar == 'E')
            {
                num.Append('E');
                currentSource.ReadNextCharNoEOF();
                if (currentSource.currentChar == '+' || currentSource.currentChar == '-')
                {
                    if (currentSource.currentChar == '-')
                    {
                        num.Append((char)currentSource.currentChar);
                    }
                    currentSource.ReadNextCharNoEOF();
                }
                if (currentSource.currentChar >= '0' && currentSource.currentChar <= '9')
                {
                    while (currentSource.currentChar >= '0' && currentSource.currentChar <= '9')
                    {
                        num.Append((char)currentSource.currentChar);
                        currentSource.ReadNextChar();
                    }
                }
                else
                {
                    throw new JSONUnexpectedCharException(currentSource.currentChar, currentSource.pos);
                }
            }
            return(currentDoc.CreateItemNumber(num.ToString()));
        }