/// <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); }
/// <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); }