private ParserState VisitJson() { Token lastToken = null; while (this.stream.Consume()) { var currentToken = this.stream.Current; if (currentToken.Kind == TokenKind.JsonEnd && lastToken != null && lastToken.Kind == TokenKind.NewLine) { this.stream.Consume(); var value = this.stream.GetWord(); this.result.Add(this.lastWord, value); currentToken = this.stream.Current; while (this.stream.Consume()) { currentToken = this.stream.Current; if (currentToken.Kind == TokenKind.NewLine) { this.valueState = ValueStates.None; return(ParserState.None); } } return(ParserState.End); } lastToken = currentToken; } return(ParserState.End); }
private ParserState VisitSingleQuote(Token token) { while (token.Kind != TokenKind.SingleQuote) { // transform \n into line break if (token.Kind == TokenKind.LineBreak) { if (!this.stream.Consume()) { return(ParserState.End); } token = this.stream.Current; continue; } if (!this.stream.Consume()) { return(ParserState.End); } token = this.stream.Current; } this.valueState = ValueStates.None; this.result.Add(this.lastWord, this.stream.GetWord().TrimEnd('\'')); while (token.Kind != TokenKind.NewLine) { if (!this.stream.MoveNext()) { return(ParserState.End); } token = this.stream.Current; } return(ParserState.None); }
private ParserState VisitValue(Token token) { if (this.stream.WordLength == 0 && this.valueState.HasFlag(ValueStates.None)) { switch (token.Kind) { case TokenKind.NewLine: this.result.Add(this.lastWord, null); return(ParserState.None); case TokenKind.WhiteSpace: return(ParserState.Value); case TokenKind.DoubleQuote: this.valueState = ValueStates.DoubleQuote; if (!this.stream.MoveNext()) { return(ParserState.End); } token = this.stream.Current; break; case TokenKind.SingleQuote: this.valueState = ValueStates.SingleQuote; if (!this.stream.MoveNext()) { return(ParserState.End); } token = this.stream.Current; break; case TokenKind.JsonStart: return(this.VisitJson()); } } if (this.valueState != ValueStates.None) { if (token.Kind == TokenKind.NewLine) { this.stream.Consume(); return(this.VisitMultiline(token)); } switch (this.valueState) { case ValueStates.DoubleQuote: return(this.VisitDoubleQuoteLine(token)); case ValueStates.SingleQuote: return(this.VisitSingleQuoteLine(token)); } } while (token.Kind != TokenKind.NewLine) { if (!this.stream.Consume()) { return(ParserState.End); } token = this.stream.Current; } this.result.Add(this.lastWord, this.stream.GetWord().Trim()); return(ParserState.None); }
/// <inheritdoc /> public void Freeze() { _state |= ValueStates.ReadOnly; }
public FreezableValue(T value, ValueStates state = ValueStates.Defined) { Value = value; _state = state; }
public FreezableValue() { _state = ValueStates.Undefined; }
internal AutoFreezingValue(T value, ValueStates state) { _value = value; _state = state; }