Example #1
0
        private Section ParseSection()
        {
            _tokenizer.NextToken();
            CheckOrThrow(IniToken.SectionName);
            var sectionName    = _tokenizer.GetValue();
            var currentSection = new Section(sectionName);

            _tokenizer.NextToken();
            CheckOrThrow(IniToken.SectionClose);
            _tokenizer.NextToken();
            while (_tokenizer.CurrentToken != IniToken.SectionOpen && _tokenizer.CurrentToken != IniToken.End)
            {
                CheckOrThrow(IniToken.Variable);
                var currentField = _tokenizer.GetValue();
                _tokenizer.NextToken();
                CheckOrThrow(IniToken.Equals);
                _tokenizer.NextToken();
                CheckOrThrow(IniToken.Value);
                var value     = _tokenizer.GetValue();
                var valueType = ValidateValue(value);
                switch (valueType)
                {
                case ValueType.Integer: {
                    var result = int.Parse(value);
                    currentSection.AddInt(currentField, result);
                    break;
                }

                case ValueType.Float: {
                    var result = float.Parse(value);
                    currentSection.AddFloat(currentField, result);
                    break;
                }

                case ValueType.String: {
                    currentSection.AddString(currentField, value);
                    break;
                }
                }
                _tokenizer.NextToken();
                SkipComments();
            }

            return(currentSection);
        }