Пример #1
0
        private static bool State22(StateContext context)
        {
            int counter = 0;
            int mult    = 4096;

            context.Parser.UnicodeCharacter = 0;

            while (context.Parser.GetCharacter())
            {
                if (context.Parser.InputCharacter >= '0' && context.Parser.InputCharacter <= '9' ||
                    context.Parser.InputCharacter >= 'A' && context.Parser.InputCharacter <= 'F' ||
                    context.Parser.InputCharacter >= 'a' && context.Parser.InputCharacter <= 'f')
                {
                    context.Parser.UnicodeCharacter += HexValue(context.Parser.InputCharacter) * mult;

                    counter++;
                    mult /= 16;

                    if (counter == 4)
                    {
                        context.Parser.StringBuffer.Append(Convert.ToChar(context.Parser.UnicodeCharacter));
                        context.NextState = context.StateStack;
                        return(true);
                    }

                    continue;
                }

                return(false);
            }

            return(true);
        }
Пример #2
0
        private static bool State23(StateContext context)
        {
            while (context.Parser.GetCharacter())
            {
                switch (context.Parser.InputCharacter)
                {
                case '\'':
                    context.Parser.PreviousCharacter();
                    context.Return    = true;
                    context.NextState = 24;
                    return(true);

                case '\\':
                    context.StateStack = 23;
                    context.NextState  = 21;
                    return(true);

                default:
                    context.Parser.StringBuffer.Append((char)context.Parser.InputCharacter);
                    continue;
                }
            }

            return(true);
        }
Пример #3
0
        private static bool State8(StateContext context)
        {
            while (context.Parser.GetCharacter())
            {
                if (context.Parser.InputCharacter >= '0' && context.Parser.InputCharacter <= '9')
                {
                    context.Parser.StringBuffer.Append((char)context.Parser.InputCharacter);
                    continue;
                }

                if (context.Parser.InputCharacter == ' ' ||
                    context.Parser.InputCharacter >= '\t' && context.Parser.InputCharacter <= '\r')
                {
                    context.Return    = true;
                    context.NextState = 1;
                    return(true);
                }

                switch (context.Parser.InputCharacter)
                {
                case ',':
                case ']':
                case '}':
                    context.Parser.PreviousCharacter();
                    context.Return    = true;
                    context.NextState = 1;
                    return(true);

                default:
                    return(false);
                }
            }

            return(true);
        }
Пример #4
0
        private static bool State21(StateContext context)
        {
            context.Parser.GetCharacter();

            switch (context.Parser.InputCharacter)
            {
            case 'u':
                context.NextState = 22;
                return(true);

            case '"':
            case '\'':
            case '/':
            case '\\':
            case 'b':
            case 'f':
            case 'n':
            case 'r':
            case 't':
                context.Parser.StringBuffer.Append(ProcessEscChar(context.Parser.InputCharacter));
                context.NextState = context.StateStack;
                return(true);

            default:
                return(false);
            }
        }
Пример #5
0
        private static bool State5(StateContext context)
        {
            context.Parser.GetCharacter();

            if (context.Parser.InputCharacter >= '0' && context.Parser.InputCharacter <= '9')
            {
                context.Parser.StringBuffer.Append((char)context.Parser.InputCharacter);
                context.NextState = 6;
                return(true);
            }

            return(false);
        }
Пример #6
0
        private static bool State27(StateContext context)
        {
            while (context.Parser.GetCharacter())
            {
                if (context.Parser.InputCharacter == '*')
                {
                    context.NextState = 28;
                    return(true);
                }
            }

            return(true);
        }
Пример #7
0
        private static bool State17(StateContext context)
        {
            context.Parser.GetCharacter();

            switch (context.Parser.InputCharacter)
            {
            case 'l':
                context.NextState = 18;
                return(true);

            default:
                return(false);
            }
        }
Пример #8
0
        public JsonParser(TextReader reader)
        {
            InputBuffer  = 0;
            StringBuffer = new StringBuilder(128);
            State        = 1;

            AllowComments            = false;
            AllowSingleQuotedStrings = false;
            EndOfInput = false;

            this.Reader = reader;

            Context        = new StateContext();
            Context.Parser = this;
        }
Пример #9
0
        public JsonParser(TextReader reader)
        {
            InputBuffer = 0;
            StringBuffer = new StringBuilder(128);
            State = 1;

            AllowComments = false;
            AllowSingleQuotedStrings = false;
            EndOfInput = false;

            this.Reader = reader;

            Context = new StateContext();
            Context.Parser = this;
        }
Пример #10
0
        private static bool State24(StateContext context)
        {
            context.Parser.GetCharacter();

            switch (context.Parser.InputCharacter)
            {
            case '\'':
                context.Parser.InputCharacter = '"';
                context.Return    = true;
                context.NextState = 1;
                return(true);

            default:
                return(false);
            }
        }
Пример #11
0
        private static bool State25(StateContext context)
        {
            context.Parser.GetCharacter();

            switch (context.Parser.InputCharacter)
            {
            case '*':
                context.NextState = 27;
                return(true);

            case '/':
                context.NextState = 26;
                return(true);

            default:
                return(false);
            }
        }
Пример #12
0
        private static bool State28(StateContext context)
        {
            while (context.Parser.GetCharacter())
            {
                if (context.Parser.InputCharacter == '*')
                {
                    continue;
                }

                if (context.Parser.InputCharacter == '/')
                {
                    context.NextState = 1;
                    return(true);
                }

                context.NextState = 27;
                return(true);
            }

            return(true);
        }
Пример #13
0
        private static bool State2(StateContext context)
        {
            context.Parser.GetCharacter();

            if (context.Parser.InputCharacter >= '1' && context.Parser.InputCharacter <= '9')
            {
                context.Parser.StringBuffer.Append((char)context.Parser.InputCharacter);
                context.NextState = 3;
                return(true);
            }

            switch (context.Parser.InputCharacter)
            {
            case '0':
                context.Parser.StringBuffer.Append((char)context.Parser.InputCharacter);
                context.NextState = 4;
                return(true);

            default:
                return(false);
            }
        }
Пример #14
0
        private static bool State28(StateContext context)
        {
            while (context.Parser.GetCharacter())
            {
                if (context.Parser.InputCharacter == '*')
                    continue;

                if (context.Parser.InputCharacter == '/')
                {
                    context.NextState = 1;
                    return true;
                }

                context.NextState = 27;
                return true;
            }

            return true;
        }
Пример #15
0
        private static bool State27(StateContext context)
        {
            while (context.Parser.GetCharacter())
            {
                if (context.Parser.InputCharacter == '*')
                {
                    context.NextState = 28;
                    return true;
                }
            }

            return true;
        }
Пример #16
0
        private static bool State25(StateContext context)
        {
            context.Parser.GetCharacter();

            switch (context.Parser.InputCharacter)
            {
                case '*':
                    context.NextState = 27;
                    return true;

                case '/':
                    context.NextState = 26;
                    return true;

                default:
                    return false;
            }
        }
Пример #17
0
        private static bool State24(StateContext context)
        {
            context.Parser.GetCharacter();

            switch (context.Parser.InputCharacter)
            {
                case '\'':
                    context.Parser.InputCharacter = '"';
                    context.Return = true;
                    context.NextState = 1;
                    return true;

                default:
                    return false;
            }
        }
Пример #18
0
        private static bool State23(StateContext context)
        {
            while (context.Parser.GetCharacter())
            {
                switch (context.Parser.InputCharacter)
                {
                    case '\'':
                        context.Parser.PreviousCharacter();
                        context.Return = true;
                        context.NextState = 24;
                        return true;

                    case '\\':
                        context.StateStack = 23;
                        context.NextState = 21;
                        return true;

                    default:
                        context.Parser.StringBuffer.Append((char) context.Parser.InputCharacter);
                        continue;
                }
            }

            return true;
        }
Пример #19
0
        private static bool State22(StateContext context)
        {
            int counter = 0;
            int mult = 4096;

            context.Parser.UnicodeCharacter = 0;

            while (context.Parser.GetCharacter())
            {
                if (context.Parser.InputCharacter >= '0' && context.Parser.InputCharacter <= '9' ||
                    context.Parser.InputCharacter >= 'A' && context.Parser.InputCharacter <= 'F' ||
                    context.Parser.InputCharacter >= 'a' && context.Parser.InputCharacter <= 'f')
                {

                    context.Parser.UnicodeCharacter += HexValue(context.Parser.InputCharacter) * mult;

                    counter++;
                    mult /= 16;

                    if (counter == 4)
                    {
                        context.Parser.StringBuffer.Append(Convert.ToChar(context.Parser.UnicodeCharacter));
                        context.NextState = context.StateStack;
                        return true;
                    }

                    continue;
                }

                return false;
            }

            return true;
        }
Пример #20
0
        private static bool State21(StateContext context)
        {
            context.Parser.GetCharacter();

            switch (context.Parser.InputCharacter)
            {
                case 'u':
                    context.NextState = 22;
                    return true;

                case '"':
                case '\'':
                case '/':
                case '\\':
                case 'b':
                case 'f':
                case 'n':
                case 'r':
                case 't':
                    context.Parser.StringBuffer.Append(ProcessEscChar(context.Parser.InputCharacter));
                    context.NextState = context.StateStack;
                    return true;

                default:
                    return false;
            }
        }
Пример #21
0
        private static bool State5(StateContext context)
        {
            context.Parser.GetCharacter();

            if (context.Parser.InputCharacter >= '0' && context.Parser.InputCharacter <= '9')
            {
                context.Parser.StringBuffer.Append((char)context.Parser.InputCharacter);
                context.NextState = 6;
                return true;
            }

            return false;
        }
Пример #22
0
        private static bool State8(StateContext context)
        {
            while (context.Parser.GetCharacter())
            {
                if (context.Parser.InputCharacter >= '0' && context.Parser.InputCharacter<= '9')
                {
                    context.Parser.StringBuffer.Append((char)context.Parser.InputCharacter);
                    continue;
                }

                if (context.Parser.InputCharacter == ' ' ||
                    context.Parser.InputCharacter >= '\t' && context.Parser.InputCharacter<= '\r')
                {
                    context.Return = true;
                    context.NextState = 1;
                    return true;
                }

                switch (context.Parser.InputCharacter)
                {
                    case ',':
                    case ']':
                    case '}':
                        context.Parser.PreviousCharacter();
                        context.Return = true;
                        context.NextState = 1;
                        return true;

                    default:
                        return false;
                }
            }

            return true;
        }
Пример #23
0
        private static bool State7(StateContext context)
        {
            context.Parser.GetCharacter();

            if (context.Parser.InputCharacter >= '0' && context.Parser.InputCharacter<= '9')
            {
                context.Parser.StringBuffer.Append((char)context.Parser.InputCharacter);
                context.NextState = 8;
                return true;
            }

            switch (context.Parser.InputCharacter)
            {
                case '+':
                case '-':
                    context.Parser.StringBuffer.Append((char)context.Parser.InputCharacter);
                    context.NextState = 8;
                    return true;

                default:
                    return false;
            }
        }
Пример #24
0
        private static bool State1(StateContext context)
        {
            while (context.Parser.GetCharacter())
            {
                if (context.Parser.InputCharacter == ' ' ||
                    context.Parser.InputCharacter >= '\t' && context.Parser.InputCharacter <= '\r')
                    continue;

                if (context.Parser.InputCharacter >= '1' && context.Parser.InputCharacter <= '9')
                {
                    context.Parser.StringBuffer.Append((char)context.Parser.InputCharacter);
                    context.NextState = 3;
                    return true;
                }

                switch (context.Parser.InputCharacter)
                {
                    case '"':
                        context.NextState = 19;
                        context.Return = true;
                        return true;

                    case ',':
                    case ':':
                    case '[':
                    case ']':
                    case '{':
                    case '}':
                        context.NextState = 1;
                        context.Return = true;
                        return true;

                    case '-':
                        context.Parser.StringBuffer.Append((char)context.Parser.InputCharacter);
                        context.NextState = 2;
                        return true;

                    case '0':
                        context.Parser.StringBuffer.Append((char)context.Parser.InputCharacter);
                        context.NextState = 4;
                        return true;

                    case 'f':
                        context.NextState = 12;
                        return true;

                    case 'n':
                        context.NextState = 16;
                        return true;

                    case 't':
                        context.NextState = 9;
                        return true;

                    case '\'':
                        if (!context.Parser.AllowSingleQuotedStrings)
                            return false;

                        context.Parser.InputCharacter = '"';
                        context.NextState = 23;
                        context.Return = true;
                        return true;

                    case '/':
                        if (!context.Parser.AllowComments)
                            return false;

                        context.NextState = 25;
                        return true;

                    default:
                        return false;
                }
            }

            return true;
        }
Пример #25
0
        private static bool State9(StateContext context)
        {
            context.Parser.GetCharacter();

            switch (context.Parser.InputCharacter)
            {
                case 'r':
                    context.NextState = 10;
                    return true;

                default:
                    return false;
            }
        }
Пример #26
0
        private static bool State1(StateContext context)
        {
            while (context.Parser.GetCharacter())
            {
                if (context.Parser.InputCharacter == ' ' ||
                    context.Parser.InputCharacter >= '\t' && context.Parser.InputCharacter <= '\r')
                {
                    continue;
                }

                if (context.Parser.InputCharacter >= '1' && context.Parser.InputCharacter <= '9')
                {
                    context.Parser.StringBuffer.Append((char)context.Parser.InputCharacter);
                    context.NextState = 3;
                    return(true);
                }

                switch (context.Parser.InputCharacter)
                {
                case '"':
                    context.NextState = 19;
                    context.Return    = true;
                    return(true);

                case ',':
                case ':':
                case '[':
                case ']':
                case '{':
                case '}':
                    context.NextState = 1;
                    context.Return    = true;
                    return(true);

                case '-':
                    context.Parser.StringBuffer.Append((char)context.Parser.InputCharacter);
                    context.NextState = 2;
                    return(true);

                case '0':
                    context.Parser.StringBuffer.Append((char)context.Parser.InputCharacter);
                    context.NextState = 4;
                    return(true);

                case 'f':
                    context.NextState = 12;
                    return(true);

                case 'n':
                    context.NextState = 16;
                    return(true);

                case 't':
                    context.NextState = 9;
                    return(true);

                case '\'':
                    if (!context.Parser.AllowSingleQuotedStrings)
                    {
                        return(false);
                    }

                    context.Parser.InputCharacter = '"';
                    context.NextState             = 23;
                    context.Return = true;
                    return(true);

                case '/':
                    if (!context.Parser.AllowComments)
                    {
                        return(false);
                    }

                    context.NextState = 25;
                    return(true);

                default:
                    return(false);
                }
            }

            return(true);
        }