Example #1
0
        /// <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);
        }
Example #2
0
        /// <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;
        }