private DSCToken ReadUntil(string prefix, DSCTokenEnding end) { int c; DSCToken token = new DSCToken(); token.StartPosition = _bufferedStream.Position - prefix.Length; StringBuilder text = new StringBuilder(prefix, 64); int lastAppendedChar = 0; while ((c = this.ReadChar()) > -1) { if (c == '\n' && (end & DSCTokenEnding.LineEnd) == DSCTokenEnding.LineEnd) { token.Length = _bufferedStream.Position - 1 - token.StartPosition; token.Text = text.ToString().Trim(); token.Ending = DSCTokenEnding.LineEnd; return(token); } else if (c == '\r' && this.ReadChar() == '\n' && (end & DSCTokenEnding.LineEnd) == DSCTokenEnding.LineEnd) { token.Length = _bufferedStream.Position - 2 - token.StartPosition; token.Text = text.ToString().Trim(); token.Ending = DSCTokenEnding.LineEnd; return(token); } else if (c == ' ' && text.Length > 0 && lastAppendedChar != ' ' && (end & DSCTokenEnding.Whitespace) == DSCTokenEnding.Whitespace) { token.Length = _bufferedStream.Position - 1 - token.StartPosition; token.Text = text.ToString().Trim(); token.Ending = DSCTokenEnding.Whitespace; return(token); } else { text.Append((char)c); lastAppendedChar = c; } } return(null); }
private DSCToken ReadUntil(string prefix, DSCTokenEnding end) { int c; DSCToken token = new DSCToken(); token.StartPosition = _bufferedStream.Position - prefix.Length; StringBuilder text = new StringBuilder(prefix, 64); int lastAppendedChar = 0; while ((c = this.ReadChar()) > -1) { if (c == '\n' && (end & DSCTokenEnding.LineEnd) == DSCTokenEnding.LineEnd) { token.Length = _bufferedStream.Position - 1 - token.StartPosition; token.Text = text.ToString().Trim(); token.Ending = DSCTokenEnding.LineEnd; return token; } else if (c == '\r' && this.ReadChar() == '\n' && (end & DSCTokenEnding.LineEnd) == DSCTokenEnding.LineEnd) { token.Length = _bufferedStream.Position - 2 - token.StartPosition; token.Text = text.ToString().Trim(); token.Ending = DSCTokenEnding.LineEnd; return token; } else if (c == ' ' && text.Length > 0 && lastAppendedChar != ' ' && (end & DSCTokenEnding.Whitespace) == DSCTokenEnding.Whitespace) { token.Length = _bufferedStream.Position - 1 - token.StartPosition; token.Text = text.ToString().Trim(); token.Ending = DSCTokenEnding.Whitespace; return token; } else { text.Append((char)c); lastAppendedChar = c; } } return null; }
public DSCToken GetNextDSCValueToken(DSCTokenEnding end) { return(this.ReadUntil(string.Empty, end)); }
public DSCToken GetNextDSCValueToken(DSCTokenEnding end) { return this.ReadUntil(string.Empty, end); }