Esempio n. 1
0
        internal static string decode(ParseStringRunner parseStringRunner)
        {
            // At this point, StringPointer has passed starting "
            StringPointer sp = parseStringRunner.getStringPointer();

            StringBuilder sb = new StringBuilder();

            do
            {
                char chr = sp.getNextChar();
                if (chr == '"')
                {
                    return(sb.ToString());
                }
                if (chr == '\\')
                {
                    chr = sp.getNextChar();
                    if (chr == '"' || chr == '\\' || chr == '/')
                    {
                        // 'chr' works as is
                    }
                    else if (chr == 'b')
                    {
                        chr = '\b';
                    }
                    else if (chr == 'f')
                    {
                        chr = '\f';
                    }
                    else if (chr == 'n')
                    {
                        chr = '\n';
                    }
                    else if (chr == 'r')
                    {
                        chr = '\r';
                    }
                    else if (chr == 't')
                    {
                        chr = '\t';
                    }
                    else if (chr == 'u')
                    {
                        int ucode = 0;
                        for (int n = 0; n < 4; n++)
                        {
                            chr = sp.getNextChar();
                            int uvalue = HEX.IndexOf(char.ToUpperInvariant(chr));
                            if (uvalue < 0)
                            {
                                throw ParseException.forInvalidCharacter("Invalid hexadecimal character '" + chr + "' after '\\u' in string value", parseStringRunner);
                            }
                            ucode = ucode * 16 + uvalue;
                        }
                        chr = (char)(ucode);
                    }
                    else
                    {
                        throw ParseException.forInvalidCharacter("Invalid character '" + chr + "' after '\\' in string value", parseStringRunner);
                    }
                }
                sb.Append(chr);
            } while (true);
        }
Esempio n. 2
0
        private static bool parseCheck(StringPointer sp, char chr)
        {
            int state;

            if (chr == '-')
            {
                chr = sp.getNextChar();
            }
            if (chr == '0')
            {
                chr = sp.getNextChar();
                if (chr == '.')
                {
                    state = 5;
                }
                else if (chr == 'e' || chr == 'E')
                {
                    state = 7;
                }
                else
                {
                    return(true);                    // (-)0
                }
            }
            else if (chr >= '1' && chr <= '9')
            {
                state = 4;
            }
            else
            {
                return(false);
            }
            do
            {
                chr = sp.getNextChar();
                if (state == 4)
                {
                    if (chr >= '0' && chr <= '9')
                    {
                        state = 4;
                    }
                    else if (chr == '.')
                    {
                        state = 5;
                    }
                    else if (chr == 'e' || chr == 'E')
                    {
                        state = 7;
                    }
                    else
                    {
                        return(true);                        // (-)##
                    }
                }
                else if (state == 5)
                {
                    if (chr >= '0' && chr <= '9')
                    {
                        state = 6;
                    }
                    else
                    {
                        return(false);
                    }
                }
                else if (state == 6)
                {
                    if (chr >= '0' && chr <= '9')
                    {
                        state = 6;
                    }
                    else if (chr == 'e' || chr == 'E')
                    {
                        state = 7;
                    }
                    else
                    {
                        return(true);                        // (-)(##).##
                    }
                }
                else if (state == 7)
                {
                    if (chr == '+' || chr == '-')
                    {
                        chr = sp.getNextChar();
                        if (chr >= '0' && chr <= '9')
                        {
                            state = 9;
                        }
                        else
                        {
                            return(false);
                        }
                    }
                    else if (chr >= '0' && chr <= '9')
                    {
                        state = 9;
                    }
                    else
                    {
                        return(false);
                    }
                }
                else if (state == 9)
                {
                    if (chr >= '0' && chr <= '9')
                    {
                        state = 9;
                    }
                    else
                    {
                        return(true);                        // (-)(##).##[e/E](+/-)##
                    }
                }
            } while (true);
        }