Exemplo n.º 1
0
        internal static JBoolean zParse(ParseStringRunner parseStringRunner, bool expectingTrue)
        {
            StringPointer sp = parseStringRunner.getStringPointer();

            if (expectingTrue)
            {
                if (sp.isNextChars(TRUE.Substring(1)))
                {
                    return(new JBoolean(true));
                }
                else
                {
                    throw ParseException.forInvalidCharacter("Invalid string when expecting '" + TRUE + "'", parseStringRunner);
                }
            }
            else
            {
                if (sp.isNextChars(FALSE.Substring(1)))
                {
                    return(new JBoolean(false));
                }
                else
                {
                    throw ParseException.forInvalidCharacter("Invalid string when expecting '" + FALSE + "'", parseStringRunner);
                }
            }
        }
Exemplo n.º 2
0
 private static string getExceptionMessageTail(ParseStringRunner parseStringRunner)
 {
     if (parseStringRunner != null)
     {
         return(getExceptionMessageTailForID(parseStringRunner.getParseDebugIDForExceptions()));
     }
     return(getExceptionMessageTailForID(null));
 }
Exemplo n.º 3
0
        internal static JNull zParse(ParseStringRunner parseStringRunner)
        {
            StringPointer sp = parseStringRunner.getStringPointer();

            if (sp.isNextChars(NULL.Substring(1)))
            {
                return(new JNull());
            }
            else
            {
                throw ParseException.forInvalidCharacter("Invalid string when expecting '" + NULL + "'", parseStringRunner);
            }
        }
Exemplo n.º 4
0
        internal static JNumber zParse(ParseStringRunner parseStringRunner, char firstChr)
        {
            StringPointer sp = parseStringRunner.getStringPointer();

            int  start = sp.getCurrentIndex() - 1;        // -1 since first character is already read
            bool valid = parseCheck(sp, firstChr);

            if (!valid)
            {
                throw ParseException.forInvalidCharacter("Invalid number value \"" + sp.getSubStringStartingFrom(start) + "\"", parseStringRunner);
            }
            else
            {
                sp.stepBack();
                string validNumber = sp.getSubStringStartingFrom(start);
                return(new JNumber(validNumber, parseStringRunner));
            }
        }
Exemplo n.º 5
0
        internal static JString zParse(ParseStringRunner parseStringRunner, bool expectStartOfString)
        {
            StringPointer sp = parseStringRunner.getStringPointer();

            if (expectStartOfString)
            {
                char chr;
                if (!sp.tryGetNextNonWhiteChar(out chr))
                {
                    throw ParseException.forInvalidStart("Parameter string didn't contain any non-white characters", parseStringRunner);
                }
                if (chr != '"')
                {
                    throw ParseException.forInvalidStart("Invalid character '" + chr + "' when expecting start of string '\"'", parseStringRunner);
                }
            }

            return(new JString(decode(parseStringRunner)));
        }
Exemplo n.º 6
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);
        }
Exemplo n.º 7
0
 private JNumber(string safeValueAsString, ParseStringRunner parseStringRunner) : base()
 {
     valueAsString = parseStringRunner.getPossiblyFixedNumber(safeValueAsString);
 }