AppendValue() public method

Adds the given element to the list of elements inside this HoconValue.
public AppendValue ( IHoconElement value ) : void
value IHoconElement The element to add to the list.
return void
示例#1
0
        public void ParseValue(HoconValue owner)
        {
            if (reader.EoF)
            {
                throw new Exception("End of file reached while trying to read a value");
            }

            bool isObject = owner.IsObject();

            reader.PullWhitespaceAndComments();
            while (reader.IsValue())
            {
                Token t = reader.PullValue();

                switch (t.Type)
                {
                case TokenType.EoF:
                    break;

                case TokenType.LiteralValue:
                    if (isObject)
                    {
                        //needed to allow for override objects
                        isObject = false;
                        owner.Clear();
                    }
                    var lit = new HoconLiteral
                    {
                        Value = t.Value
                    };
                    owner.AppendValue(lit);

                    break;

                case TokenType.ObjectStart:
                    ParseObject(owner, true);
                    break;

                case TokenType.ArrayStart:
                    HoconArray arr = ParseArray();
                    owner.AppendValue(arr);
                    break;

                case TokenType.Substitute:
                    HoconSubstitution sub = ParseSubstitution(t.Value);
                    substitutions.Add(sub);
                    owner.AppendValue(sub);
                    break;
                }
                if (reader.IsSpaceOrTab())
                {
                    ParseTrailingWhitespace(owner);
                }
            }

            IgnoreComma();
        }
示例#2
0
        /// <summary>
        /// Merges the specified object with this instance producing new one.
        /// </summary>
        /// <param name="other">The object to merge into this instance.</param>
        internal HoconObject MergeImmutable(HoconObject other)
        {
            var thisItems  = new Dictionary <string, HoconValue>(Items);
            var otherItems = other.Items;

            foreach (var otherItem in otherItems)
            {
                //if other key was present in this object and if we have a value,
                //just ignore the other value, unless it is an object
                if (thisItems.TryGetValue(otherItem.Key, out var thisItem))
                {
                    //if both values are objects, merge them
                    if (thisItem.IsObject() && otherItem.Value.IsObject())
                    {
                        var mergedObject = thisItem.GetObject().MergeImmutable(otherItem.Value.GetObject());
                        var mergedValue  = new HoconValue();
                        mergedValue.AppendValue(mergedObject);
                        thisItems[otherItem.Key] = mergedValue;
                    }
                }
                else
                {
                    //other key was not present in this object, just copy it over
                    thisItems.Add(otherItem.Key, new HoconValue(otherItem.Value.Values));
                }
            }
            return(new HoconObject {
                Items = thisItems
            });
        }
示例#3
0
        private void ParseTrailingWhitespace(HoconValue owner)
        {
            Token ws = _reader.PullSpaceOrTab();

            //single line ws should be included if string concat
            if (ws.Value.Length > 0)
            {
                var wsLit = new HoconLiteral
                {
                    Value = ws.Value,
                };
                owner.AppendValue(wsLit);
            }
        }
示例#4
0
 private void ParseTrailingWhitespace(HoconValue owner)
 {
     Token ws = _reader.PullSpaceOrTab();
     //single line ws should be included if string concat
     if (ws.Value.Length > 0)
     {
         var wsLit = new HoconLiteral
         {
             Value = ws.Value,
         };
         owner.AppendValue(wsLit);
     }
 }
示例#5
0
        /// <summary>
        /// Retrieves the next value token from the tokenizer and appends it
        /// to the supplied element <paramref name="owner"/>.
        /// </summary>
        /// <param name="owner">The element to append the next token.</param>
        /// <exception cref="System.Exception">End of file reached while trying to read a value</exception>
        public void ParseValue(HoconValue owner,string currentPath)
        {
            if (_reader.EoF)
                throw new Exception("End of file reached while trying to read a value");

            _reader.PullWhitespaceAndComments();
            while (_reader.IsValue())
            {
                Token t = _reader.PullValue();

                switch (t.Type)
                {
                    case TokenType.EoF:
                        break;
                    case TokenType.LiteralValue:
                        if (owner.IsObject())
                        {
                            //needed to allow for override objects
                            owner.Clear();
                        }
                        var lit = new HoconLiteral
                        {
                            Value = t.Value
                        };
                        owner.AppendValue(lit);

                        break;
                    case TokenType.ObjectStart:
                        ParseObject(owner, true,currentPath);
                        break;
                    case TokenType.ArrayStart:
                        HoconArray arr = ParseArray(currentPath);
                        owner.AppendValue(arr);
                        break;
                    case TokenType.Substitute:
                        HoconSubstitution sub = ParseSubstitution(t.Value);
                        _substitutions.Add(sub);
                        owner.AppendValue(sub);
                        break;
                }
                if (_reader.IsSpaceOrTab())
                {
                    ParseTrailingWhitespace(owner);
                }
            }

            IgnoreComma();
        }
示例#6
0
        /// <summary>
        /// Retrieves the next value token from the tokenizer and appends it
        /// to the supplied element <paramref name="owner"/>.
        /// </summary>
        /// <param name="owner">The element to append the next token.</param>
        /// <exception cref="System.Exception">End of file reached while trying to read a value</exception>
        public void ParseValue(HoconValue owner,string currentPath)
        {
            if (_reader.EoF)
                throw new HoconParserException("End of file reached while trying to read a value");

            _reader.PullWhitespaceAndComments();
            var start = _reader.Index;
            try
            {
                while (_reader.IsValue())
                {
                    Token t = _reader.PullValue();

                    switch (t.Type)
                    {
                        case TokenType.EoF:
                            break;
                        case TokenType.LiteralValue:
                            if (owner.IsObject())
                            {
                                //needed to allow for override objects
                                owner.Clear();
                            }
                            var lit = new HoconLiteral
                            {
                                Value = t.Value
                            };
                            owner.AppendValue(lit);

                            break;
                        case TokenType.ObjectStart:
                            ParseObject(owner, true, currentPath);
                            break;
                        case TokenType.ArrayStart:
                            HoconArray arr = ParseArray(currentPath);
                            owner.AppendValue(arr);
                            break;
                        case TokenType.Substitute:
                            HoconSubstitution sub = ParseSubstitution(t.Value);
                            _substitutions.Add(sub);
                            owner.AppendValue(sub);
                            break;
                    }
                    if (_reader.IsSpaceOrTab())
                    {
                        ParseTrailingWhitespace(owner);
                    }
                }

                IgnoreComma();
            }
            catch(HoconTokenizerException tokenizerException)
            {
                throw new HoconParserException(string.Format("{0}\r{1}", tokenizerException.Message, GetDiagnosticsStackTrace()),tokenizerException);
            }
            finally
            {
                //no value was found, tokenizer is still at the same position
                if (_reader.Index == start)
                {
                    throw new HoconParserException(string.Format("Hocon syntax error {0}\r{1}",_reader.GetHelpTextAtIndex(start),GetDiagnosticsStackTrace()));
                }
            }
        }
示例#7
0
        /// <summary>
        /// Retrieves the next value token from the tokenizer and appends it
        /// to the supplied element <paramref name="owner"/>.
        /// </summary>
        /// <param name="owner">The element to append the next token.</param>
        /// <exception cref="System.Exception">End of file reached while trying to read a value</exception>
        public void ParseValue(HoconValue owner, string currentPath)
        {
            if (_reader.EoF)
            {
                throw new HoconParserException("End of file reached while trying to read a value");
            }

            _reader.PullWhitespaceAndComments();
            var start = _reader.Index;

            try
            {
                while (_reader.IsValue())
                {
                    Token t = _reader.PullValue();

                    switch (t.Type)
                    {
                    case TokenType.EoF:
                        break;

                    case TokenType.LiteralValue:
                        if (owner.IsObject())
                        {
                            //needed to allow for override objects
                            owner.Clear();
                        }
                        var lit = new HoconLiteral
                        {
                            Value = t.Value
                        };
                        owner.AppendValue(lit);

                        break;

                    case TokenType.ObjectStart:
                        ParseObject(owner, true, currentPath);
                        break;

                    case TokenType.ArrayStart:
                        HoconArray arr = ParseArray(currentPath);
                        owner.AppendValue(arr);
                        break;

                    case TokenType.Substitute:
                        HoconSubstitution sub = ParseSubstitution(t.Value);
                        _substitutions.Add(sub);
                        owner.AppendValue(sub);
                        break;
                    }
                    if (_reader.IsSpaceOrTab())
                    {
                        ParseTrailingWhitespace(owner);
                    }
                }

                IgnoreComma();
            }
            catch (HoconTokenizerException tokenizerException)
            {
                throw new HoconParserException(string.Format("{0}\r{1}", tokenizerException.Message, GetDiagnosticsStackTrace()), tokenizerException);
            }
            finally
            {
                //no value was found, tokenizer is still at the same position
                if (_reader.Index == start)
                {
                    throw new HoconParserException(string.Format("Hocon syntax error {0}\r{1}", _reader.GetHelpTextAtIndex(start), GetDiagnosticsStackTrace()));
                }
            }
        }