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); }
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); }
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)); }
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)); }
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); }
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); }
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); }
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); }