Example #1
0
        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);
        }
Example #2
0
        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);
        }
Example #3
0
        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);
        }
Example #4
0
 /// <inheritdoc />
 public void Freeze()
 {
     _state |= ValueStates.ReadOnly;
 }
Example #5
0
 public FreezableValue(T value, ValueStates state = ValueStates.Defined)
 {
     Value  = value;
     _state = state;
 }
Example #6
0
 public FreezableValue()
 {
     _state = ValueStates.Undefined;
 }
 internal AutoFreezingValue(T value, ValueStates state)
 {
     _value = value;
     _state = state;
 }