/// <summary> /// Processes a quoted string /// assumes a quote has just been read from the "reader". /// </summary> /// <param name="reader">BufferdByteReader to acces the underlying stream</param> /// <returns>QuotedStringResult (quoted string value & EbdType</returns> internal async Task <QuotedStringResult> ReadQuotedString(BufferedByteReader reader) { var valueBuilder = new StringBuilder(); var nextByte = await reader.ReadByteAsync(); var endType = EndType.None; while ((endType == EndType.None) && (nextByte != (byte)SpecialByte.Quote)) { switch (nextByte) { case (byte)SpecialByte.CarriageReturn: endType = await ProcessEol(reader); break; case (byte)SpecialByte.BackSlash: nextByte = await reader.ReadByteAsync(); valueBuilder.Append(Convert.ToChar(nextByte)); break; default: valueBuilder.Append(Convert.ToChar(nextByte)); break; } if (endType == EndType.None) { nextByte = await reader.ReadByteAsync(); } } var thisResult = new QuotedStringResult() { End = endType, QuotedStringValue = valueBuilder.ToString() }; return(thisResult); }
/// <summary> /// Processes a quoted string /// assumes a quote has just been read from the "reader". /// </summary> /// <param name="reader">BufferdByteReader to acces the underlying stream</param> /// <returns>QuotedStringResult (quoted string value & EbdType</returns> internal async Task<QuotedStringResult> ReadQuotedString(BufferedByteReader reader) { var valueBuilder = new StringBuilder(); var nextByte = await reader.ReadByteAsync(); var endType = EndType.None; while ((endType == EndType.None) && (nextByte != (byte)SpecialByte.Quote)) { switch (nextByte) { case (byte)SpecialByte.CarriageReturn: endType = await ProcessEol(reader); break; case (byte)SpecialByte.BackSlash: nextByte = await reader.ReadByteAsync(); valueBuilder.Append(Convert.ToChar(nextByte)); break; default: valueBuilder.Append(Convert.ToChar(nextByte)); break; } if (endType == EndType.None) nextByte = await reader.ReadByteAsync(); } var thisResult = new QuotedStringResult() { End = endType, QuotedStringValue = valueBuilder.ToString() }; return thisResult; }