Example #1
0
        /// <summary>インラインテーブルを解析する。</summary>
        /// <param name="iter">イテレータ。</param>
        /// <returns>値情報。</returns>
        private ITomlValue GetInlineTable(TomlInnerBuffer.TomlIter iter)
        {
            var  table = new TomlTable();
            UTF8 c;

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

                // キー/値部分を取り込む
                this.AnalisysKeyAndValue(iter, table, true);

                // インラインテーブルが閉じられているか確認
                //
                // 1. テーブルが閉じられている
                // 2. 次のキー/値を取得
                // 3. エラー
                switch (iter.CloseInlineTable())
                {
                case 1:                             // 1
                    return(table);

                case 2:                             // 2
                    // 空実装
                    break;

                default:                            // 3
                    break;
                }
            }
            throw new TomlAnalisysException(Resources.INLINE_TABLE_NOT_CLOSE_ERR, iter);
        }
        /// <summary>配列が閉じられていることを確認する。</summary>
        /// <param name="iter"></param>
        /// <returns>閉じられていたら 1、次のキー取得ならば 2。</returns>
        internal static int CloseValueArray(this TomlInnerBuffer.TomlIter iter)
        {
            UTF8 c;

            while ((c = iter.GetChar(0)).ch1 != 0)
            {
                iter.SkipLineFeedAndSpace();

                switch (iter.GetChar(0).ch1)
                {
                case (byte)']':
                    // 配列が閉じられた
                    iter.Skip(1);
                    return(1);

                case (byte)',':
                    // 続けて次のキー/値判定へ
                    iter.Skip(1);
                    return(2);

                default:
                    // インラインテーブルが閉じられていない
                    goto EXIT_WHILE;
                }
            }
EXIT_WHILE:
            throw new TomlAnalisysException(Resources.ARRAY_NOT_CLOSE_ERR, iter);
        }
Example #3
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);
        }