/// <summary>キー文字列を取得する。</summary> /// <param name="iter">イテレータ。</param> /// <returns>キー文字列。</returns> internal static string GetKey(this TomlInnerBuffer.TomlIter iter) { var buf = new List <byte>(); UTF8 c; // 空白を読み飛ばす iter.SkipSpace(); // 範囲の開始、終了位置で評価 // // 1. 一文字取得する // 2. キー使用可能文字か判定する // 3. " なら文字列としてキー文字列を取得する while ((c = iter.GetChar(0)).ch1 != 0) // 1 { if ((c.ch1 >= 'a' && c.ch1 <= 'z') || // 2 (c.ch1 >= 'A' && c.ch1 <= 'Z') || (c.ch1 >= '0' && c.ch1 <= '9') || c.ch1 == '_' || c.ch1 == '-') { c.Expand(buf); iter.Skip(1); } else if (c.ch1 == '"' && buf.Count <= 0) // 3 { iter.Skip(1); return(iter.GetStringValue()); } else { break; } } // バイトリストを文字列に変換して返す if (buf.Count > 0) { return(Encoding.UTF8.GetString(buf.ToArray())); } else { throw new TomlAnalisysException(Resources.KEY_ANALISYS_ERR, iter); } }
/// <summary>数値(整数/実数/日付)を取得する。</summary> /// <param name="iter">イテレータ。</param> /// <returns>値情報。</returns> private ITomlValue ConvertValue(TomlInnerBuffer.TomlIter iter) { ITomlValue value = null; // 値リテラルを解析する if (iter.AnalisysKeyword(out value)) { return(value); } // 複数ライン文字列を返す if (iter.RemnantLength >= 3) { // 複数ライン文字列を返す if (iter.GetChar(2).ch1 == '"' && iter.GetChar(1).ch1 == '"' && iter.GetChar(0).ch1 == '"') { iter.Skip(3); return(TomlValue.Create(iter.GetMultiStringValue())); } // 複数ライン文字列(リテラル)を返す if (iter.GetChar(2).ch1 == '\'' && iter.GetChar(1).ch1 == '\'' && iter.GetChar(0).ch1 == '\'') { iter.Skip(3); return(TomlValue.Create(iter.GetMultiLiteralStringValue())); } } // 数値/日付/文字列 if (iter.RemnantLength > 0) { switch (iter.GetChar(0).ch1) { case (byte)'"': // 文字列を取得する iter.Skip(1); return(TomlValue.Create(iter.GetStringValue())); case (byte)'\'': // リテラル文字列を取得する iter.Skip(1); return(TomlValue.Create(iter.GetLiteralStringValue())); case (byte)'#': // コメントを取得する iter.Skip(1); return(null); case (byte)'+': // 数値を取得する iter.Skip(1); return(iter.GetNumberValue(false)); case (byte)'-': // 数値を取得する iter.Skip(1); return(iter.GetNumberValue(true)); default: // 日付/数値を取得する return(iter.GetNumberOrDateValue()); } } else { throw new TomlAnalisysException(Resources.NOT_DEFINED_VALUE_ERR, iter); } }