Ejemplo n.º 1
0
        /// <summary>配列を解析する。</summary>
        /// <param name="iter">イテレータ。</param>
        /// <returns>値情報。</returns>
        private ITomlValue GetValueArray(TomlInnerBuffer.TomlIter iter)
        {
            var array = new List <ITomlValue>();

            while (iter.GetChar(0).ch1 != 0)
            {
                // 改行、空白部を取り除く
                iter.SkipLineFeedAndSpace();

                // 値を取り込む
                var value = this.AnalisysValue(iter);

                // 空値以外は取り込む
                if (value.ValueType != TomlValueType.TomlNoneValue)
                {
                    array.Add(value);
                }

                // 配列が閉じられているか確認
                //
                // 1. テーブルが閉じられている
                // 2. 次のキー/値を取得
                // 3. エラー
                switch (iter.CloseValueArray())
                {
                case 1:                             // 1
                    return(CheckArrayValueType(array, iter));

                case 2:                             // 2
                    if (value.ValueType != TomlValueType.TomlNoneValue)
                    {
                        break;
                    }
                    else
                    {
                        throw new TomlAnalisysException(Resources.EMPTY_COMMA_ERR, iter);
                    }

                default:                            // 3
                    break;
                }
            }
            // 配列が閉じられていない
            throw new TomlAnalisysException(Resources.ARRAY_NOT_CLOSE_ERR, iter);
        }