public bool EatItemSeperatorOrMapEndChar(StringSegment value, ref int i)
        {
            for (; i < value.Length; i++)
            {
                var c = value.GetChar(i); if (!JsonUtils.IsWhiteSpace(c))
                {
                    break;
                }
            }                                                                                                  //Whitespace inline

            if (i == value.Length)
            {
                return(false);
            }

            var success = value.GetChar(i) == JsWriter.ItemSeperator ||
                          value.GetChar(i) == JsWriter.MapEndChar;

            i++;

            if (success)
            {
                for (; i < value.Length; i++)
                {
                    var c = value.GetChar(i); if (!JsonUtils.IsWhiteSpace(c))
                    {
                        break;
                    }
                }                                                                                                  //Whitespace inline
            }

            return(success);
        }
Example #2
0
        public bool EatItemSeperatorOrMapEndChar(ReadOnlySpan <char> value, ref int i)
        {
            for (; i < value.Length; i++)
            {
                var c = value[i]; if (!JsonUtils.IsWhiteSpace(c))
                {
                    break;
                }
            }                                                                                          //Whitespace inline

            if (i == value.Length)
            {
                return(false);
            }

            var success = value[i] == JsWriter.ItemSeperator || value[i] == JsWriter.MapEndChar;

            i++;

            if (success)
            {
                for (; i < value.Length; i++)
                {
                    var c = value[i]; if (!JsonUtils.IsWhiteSpace(c))
                    {
                        break;
                    }
                }                                                                                          //Whitespace inline
            }

            return(success);
        }
 public void EatWhitespace(string value, ref int i)
 {
     for (; i < value.Length; i++)
     {
         var c = value[i]; if (!JsonUtils.IsWhiteSpace(c))
         {
             break;
         }
     }                                                                                          //Whitespace inline
 }
 public void EatWhitespace(StringSegment value, ref int i)
 {
     for (; i < value.Length; i++)
     {
         var c = value.GetChar(i); if (!JsonUtils.IsWhiteSpace(c))
         {
             break;
         }
     }                                                                                                  //Whitespace inline
 }
 public bool EatMapStartChar(StringSegment value, ref int i)
 {
     for (; i < value.Length; i++)
     {
         var c = value.GetChar(i); if (!JsonUtils.IsWhiteSpace(c))
         {
             break;
         }
     }                                                                                                  //Whitespace inline
     return(value.GetChar(i++) == JsWriter.MapStartChar);
 }
Example #6
0
 public bool EatMapStartChar(ReadOnlySpan <char> value, ref int i)
 {
     for (; i < value.Length; i++)
     {
         var c = value[i]; if (!JsonUtils.IsWhiteSpace(c))
         {
             break;
         }
     }                                                                                          //Whitespace inline
     return(value[i++] == JsWriter.MapStartChar);
 }
        internal static StringSegment ParseJsonString(StringSegment json, ref int index)
        {
            for (; index < json.Length; index++)
            {
                var ch = json.GetChar(index); if (!JsonUtils.IsWhiteSpace(ch))
                {
                    break;
                }
            }                                                                                                              //Whitespace inline

            return(UnEscapeJsonString(json, ref index));
        }
Example #8
0
        internal static string ParseJsonString(string json, ref int index)
        {
            for (; index < json.Length; index++)
            {
                var ch = json[index]; if (!JsonUtils.IsWhiteSpace(ch))
                {
                    break;
                }
            }                                                                                                      //Whitespace inline

            return(UnEscapeJsonString(json, ref index));
        }
Example #9
0
        internal static ReadOnlySpan <char> ParseJsonString(ReadOnlySpan <char> json, ref int index)
        {
            for (; index < json.Length; index++)
            {
                var ch = json[index]; if (!JsonUtils.IsWhiteSpace(ch))
                {
                    break;
                }
            }                                                                                                      //Whitespace inline

            return(UnescapeJsonString(json, ref index));
        }
 public bool EatMapKeySeperator(StringSegment value, ref int i)
 {
     for (; i < value.Length; i++)
     {
         var c = value.GetChar(i); if (!JsonUtils.IsWhiteSpace(c))
         {
             break;
         }
     }                                                                                                  //Whitespace inline
     if (value.Length == i)
     {
         return(false);
     }
     return(value.GetChar(i++) == JsWriter.MapKeySeperator);
 }
Example #11
0
 public bool EatMapKeySeperator(ReadOnlySpan <char> value, ref int i)
 {
     for (; i < value.Length; i++)
     {
         var c = value[i]; if (!JsonUtils.IsWhiteSpace(c))
         {
             break;
         }
     }                                                                                          //Whitespace inline
     if (value.Length == i)
     {
         return(false);
     }
     return(value[i++] == JsWriter.MapKeySeperator);
 }
Example #12
0
 public static bool IsEmptyMap(ReadOnlySpan <char> value, int i = 1)
 {
     for (; i < value.Length; i++)
     {
         var c = value[i]; if (!JsonUtils.IsWhiteSpace(c))
         {
             break;
         }
     }                                                                                          //Whitespace inline
     if (value.Length == i)
     {
         return(true);
     }
     return(value[i++] == JsWriter.MapEndChar);
 }
 public static bool IsEmptyMap(StringSegment value, int i = 1)
 {
     for (; i < value.Length; i++)
     {
         var c = value.GetChar(i); if (!JsonUtils.IsWhiteSpace(c))
         {
             break;
         }
     }                                                                                                  //Whitespace inline
     if (value.Length == i)
     {
         return(true);
     }
     return(value.GetChar(i++) == JsWriter.MapEndChar);
 }
        public StringSegment EatMapKey(StringSegment value, ref int i)
        {
            var valueLength = value.Length;

            for (; i < value.Length; i++)
            {
                var c = value.GetChar(i); if (!JsonUtils.IsWhiteSpace(c))
                {
                    break;
                }
            }                                                                                                  //Whitespace inline

            var tokenStartPos = i;
            var valueChar     = value.GetChar(i);

            switch (valueChar)
            {
            //If we are at the end, return.
            case JsWriter.ItemSeperator:
            case JsWriter.MapEndChar:
                return(default(StringSegment));

            //Is Within Quotes, i.e. "..."
            case JsWriter.QuoteChar:
                return(ParseString(value, ref i));
            }

            //Is Value
            while (++i < valueLength)
            {
                valueChar = value.GetChar(i);

                if (valueChar == JsWriter.ItemSeperator
                    //If it doesn't have quotes it's either a keyword or number so also has a ws boundary
                    || (JsonUtils.IsWhiteSpace(valueChar))
                    )
                {
                    break;
                }
            }

            return(value.Subsegment(tokenStartPos, i - tokenStartPos));
        }
        public bool EatItemSeperatorOrMapEndChar(ReadOnlySpan <char> value, ref int i)
        {
            for (; i < value.Length; i++)
            {
                var c = value[i]; if (!JsonUtils.IsWhiteSpace(c))
                {
                    break;
                }
            }                                                                                          //Whitespace inline

            if (i == value.Length)
            {
                return(false);
            }

            var success = value[i] == JsWriter.ItemSeperator || value[i] == JsWriter.MapEndChar;

            if (success)
            {
                i++;

                for (; i < value.Length; i++)
                {
                    var c = value[i]; if (!JsonUtils.IsWhiteSpace(c))
                    {
                        break;
                    }
                }                                                                                          //Whitespace inline
            }
            else if (Env.StrictMode)
            {
                throw new Exception(
                          $"Expected '{JsWriter.ItemSeperator}' or '{JsWriter.MapEndChar}'");
            }

            return(success);
        }
        public StringSegment EatValue(StringSegment value, ref int i)
        {
            var buf         = value.Buffer;
            var valueLength = value.Length;
            var offset      = value.Offset;

            if (i == valueLength)
            {
                return(default(StringSegment));
            }

            while (i < valueLength && JsonUtils.IsWhiteSpace(buf[offset + i]))
            {
                i++;                                                                //Whitespace inline
            }
            if (i == valueLength)
            {
                return(default(StringSegment));
            }

            var tokenStartPos = i;
            var valueChar     = buf[offset + i];
            var withinQuotes  = false;
            var endsToEat     = 1;

            switch (valueChar)
            {
            //If we are at the end, return.
            case JsWriter.ItemSeperator:
            case JsWriter.MapEndChar:
                return(default(StringSegment));

            //Is Within Quotes, i.e. "..."
            case JsWriter.QuoteChar:
                return(ParseString(value, ref i));

            //Is Type/Map, i.e. {...}
            case JsWriter.MapStartChar:
                while (++i < valueLength)
                {
                    valueChar = buf[offset + i];

                    if (valueChar == JsonUtils.EscapeChar)
                    {
                        i++;
                        continue;
                    }

                    if (valueChar == JsWriter.QuoteChar)
                    {
                        withinQuotes = !withinQuotes;
                    }

                    if (withinQuotes)
                    {
                        continue;
                    }

                    if (valueChar == JsWriter.MapStartChar)
                    {
                        endsToEat++;
                    }

                    if (valueChar == JsWriter.MapEndChar && --endsToEat == 0)
                    {
                        i++;
                        break;
                    }
                }
                return(value.Subsegment(tokenStartPos, i - tokenStartPos));

            //Is List, i.e. [...]
            case JsWriter.ListStartChar:
                while (++i < valueLength)
                {
                    valueChar = buf[offset + i];

                    if (valueChar == JsonUtils.EscapeChar)
                    {
                        i++;
                        continue;
                    }

                    if (valueChar == JsWriter.QuoteChar)
                    {
                        withinQuotes = !withinQuotes;
                    }

                    if (withinQuotes)
                    {
                        continue;
                    }

                    if (valueChar == JsWriter.ListStartChar)
                    {
                        endsToEat++;
                    }

                    if (valueChar == JsWriter.ListEndChar && --endsToEat == 0)
                    {
                        i++;
                        break;
                    }
                }
                return(value.Subsegment(tokenStartPos, i - tokenStartPos));
            }

            //Is Value
            while (++i < valueLength)
            {
                valueChar = buf[offset + i];

                if (valueChar == JsWriter.ItemSeperator ||
                    valueChar == JsWriter.MapEndChar
                    //If it doesn't have quotes it's either a keyword or number so also has a ws boundary
                    || JsonUtils.IsWhiteSpace(valueChar)
                    )
                {
                    break;
                }
            }

            var strValue = value.Subsegment(tokenStartPos, i - tokenStartPos);

            return(strValue == new StringSegment(JsonUtils.Null) ? default(StringSegment) : strValue);
        }
Example #17
0
        public string EatValue(string value, ref int i)
        {
            var valueLength = value.Length;

            if (i == valueLength)
            {
                return(null);
            }

            for (; i < value.Length; i++)
            {
                var c = value[i]; if (!JsonUtils.IsWhiteSpace(c))
                {
                    break;
                }
            }                                                                                          //Whitespace inline
            if (i == valueLength)
            {
                return(null);
            }

            var tokenStartPos = i;
            var valueChar     = value[i];
            var withinQuotes  = false;
            var endsToEat     = 1;

            switch (valueChar)
            {
            //If we are at the end, return.
            case JsWriter.ItemSeperator:
            case JsWriter.MapEndChar:
                return(null);

            //Is Within Quotes, i.e. "..."
            case JsWriter.QuoteChar:
                return(ParseString(value, ref i));

            //Is Type/Map, i.e. {...}
            case JsWriter.MapStartChar:
                while (++i < valueLength && endsToEat > 0)
                {
                    valueChar = value[i];

                    if (valueChar == JsonUtils.EscapeChar)
                    {
                        i++;
                        continue;
                    }

                    if (valueChar == JsWriter.QuoteChar)
                    {
                        withinQuotes = !withinQuotes;
                    }

                    if (withinQuotes)
                    {
                        continue;
                    }

                    if (valueChar == JsWriter.MapStartChar)
                    {
                        endsToEat++;
                    }

                    if (valueChar == JsWriter.MapEndChar)
                    {
                        endsToEat--;
                    }
                }
                return(value.Substring(tokenStartPos, i - tokenStartPos));

            //Is List, i.e. [...]
            case JsWriter.ListStartChar:
                while (++i < valueLength && endsToEat > 0)
                {
                    valueChar = value[i];

                    if (valueChar == JsonUtils.EscapeChar)
                    {
                        i++;
                        continue;
                    }

                    if (valueChar == JsWriter.QuoteChar)
                    {
                        withinQuotes = !withinQuotes;
                    }

                    if (withinQuotes)
                    {
                        continue;
                    }

                    if (valueChar == JsWriter.ListStartChar)
                    {
                        endsToEat++;
                    }

                    if (valueChar == JsWriter.ListEndChar)
                    {
                        endsToEat--;
                    }
                }
                return(value.Substring(tokenStartPos, i - tokenStartPos));
            }

            //Is Value
            while (++i < valueLength)
            {
                valueChar = value[i];

                if (valueChar == JsWriter.ItemSeperator ||
                    valueChar == JsWriter.MapEndChar
                    //If it doesn't have quotes it's either a keyword or number so also has a ws boundary
                    || JsonUtils.IsWhiteSpace(valueChar)
                    )
                {
                    break;
                }
            }

            var strValue = value.Substring(tokenStartPos, i - tokenStartPos);

            return(strValue == JsonUtils.Null ? null : strValue);
        }