public Token PullValue() { if (IsObjectStart()) { return PullStartOfObject(); } if (IsStartOfTripleQuotedText()) { return PullTripleQuotedText(); } if (IsStartOfQuotedText()) { return PullQuotedText(); } if (IsUnquotedText()) { return PullUnquotedText(); } if (IsArrayStart()) { return PullArrayStart(); } if (IsArrayEnd()) { return PullArrayEnd(); } if (IsSubstitutionStart()) { return PullSubstitution(); } throw new FormatException( "Expected value: Null literal, Array, Quoted Text, Unquoted Text, Triple quoted Text, Object or End of array"); }
public void ParseValue(HoconValue owner) { if (reader.EoF) { throw new Exception("End of file reached while trying to read a value"); } bool isObject = owner.IsObject(); reader.PullWhitespaceAndComments(); while (reader.IsValue()) { Token t = reader.PullValue(); switch (t.Type) { case TokenType.EoF: break; case TokenType.LiteralValue: if (isObject) { //needed to allow for override objects isObject = false; owner.Clear(); } var lit = new HoconLiteral { Value = t.Value }; owner.AppendValue(lit); break; case TokenType.ObjectStart: ParseObject(owner, true); break; case TokenType.ArrayStart: HoconArray arr = ParseArray(); owner.AppendValue(arr); break; case TokenType.Substitute: HoconSubstitution sub = ParseSubstitution(t.Value); substitutions.Add(sub); owner.AppendValue(sub); break; } if (reader.IsSpaceOrTab()) { ParseTrailingWhitespace(owner); } } IgnoreComma(); }