public KeyValueSyntax GetOrCreateConfig([NotNull] string key) { var kvs = GetConfig(key); if (kvs != null) { return(kvs); } kvs = new KeyValueSyntax(key, new BareKeySyntax()); _toml.KeyValues.Add(kvs); return(kvs); }
public KeyValueSyntax GetOrCreateConfig([NotNull] TableSyntaxBase t, [NotNull] string key) { var kvs = GetConfig(t, key); if (kvs != null) { return(kvs); } kvs = new KeyValueSyntax(key, new BareKeySyntax()); t.Items.Add(kvs); return(kvs); }
private static void Set <T>(KeyValueSyntax entry, T value) { long iVal; switch (value) { // @formatter:off case bool v: entry.Value = new BooleanValueSyntax(v); break; case string v: entry.Value = new StringValueSyntax(v); break; case float v: entry.Value = new FloatValueSyntax(v); break; case double v: entry.Value = new FloatValueSyntax(v); break; case sbyte v: iVal = v; goto setIVal; case short v: iVal = v; goto setIVal; case int v: iVal = v; goto setIVal; case long v: iVal = v; goto setIVal; case byte v: iVal = v; goto setIVal; case ushort v: iVal = v; goto setIVal; case uint v: iVal = v; goto setIVal; case ulong v: iVal = (long)v; goto setIVal; // @formatter:on default: throw new NotImplementedException(typeof(T).FullName); } return; setIVal: entry.Value = new IntegerValueSyntax(iVal); }
public override void Visit(KeyValueSyntax keyValue) { if (_currentValue != null) { throw new InvalidOperationException("An KeyValue value must not have an active value."); } // Visit the key value, which will place the converted value into the current value keyValue.Value.Accept(this); if (_currentValue == null) { throw new InvalidOperationException("The current value must be set for KeyValue"); } // Resolve the key var(currentTable, valueName) = ResolveKey(keyValue.Key); // Move the value into the reference currentTable[valueName] = _currentValue; _currentValue = null; }
private static void SaveClass(Type type, DocumentSyntax document, KeySyntax key = null) { key ??= new KeySyntax(type.Name); var fields = type.GetFields(StaticFlags); var children = type.GetNestedTypes(StaticFlags); var table = new TableSyntax(key); var tableItems = table.Items; foreach (var field in fields) { if (field.IsPrivate || field.IsInitOnly || !field.IsStatic || field.IsLiteral) { continue; } if (field.GetCustomAttribute <Config.ConfigIgnoreAttribute>() != null) { continue; } ValueSyntax value = null; object fieldValue = field.GetValue(null); switch (fieldValue) { case string v: value = new StringValueSyntax(v); break; case sbyte v: value = new IntegerValueSyntax(v); break; case byte v: value = new IntegerValueSyntax(v); break; case short v: value = new IntegerValueSyntax(v); break; case ushort v: value = new IntegerValueSyntax(v); break; case int v: value = new IntegerValueSyntax(v); break; case uint v: value = new IntegerValueSyntax(v); break; case ulong v: value = new IntegerValueSyntax(unchecked ((long)v)); break; case float v: value = new FloatValueSyntax(v); break; case double v: value = new FloatValueSyntax(v); break; case bool v: value = new BooleanValueSyntax(v); break; default: if (fieldValue is List <string> slist) { value = new ArraySyntax(slist.ToArray()); } else if (fieldValue is List <int> ilist) { value = new ArraySyntax(ilist.ToArray()); } else if (fieldValue.GetType().IsEnum) { value = new StringValueSyntax(fieldValue.GetType().GetEnumName(fieldValue)); } break; } if (value == null) { continue; } var keyValue = new KeyValueSyntax( field.Name, value ); //if (field.GetAttribute<Config.CommentAttribute>(out var attribute)) { //keyValue.GetChildren(Math.Max(0, keyValue.ChildrenCount - 2)).AddComment(attribute.Message); //} tableItems.Add(keyValue); } if (table.Items.ChildrenCount != 0) { document.Tables.Add(table); } foreach (var child in children) { if (child.IsNestedPrivate) { continue; } if (child.GetCustomAttribute <Config.ConfigIgnoreAttribute>() != null) { continue; } var childKey = new KeySyntax(typeof(Config).Name); var parentKey = key.ToString().Split('.'); if (parentKey.Length != 0) { parentKey[0] = null; } foreach (var subKey in parentKey) { if (subKey == null) { continue; } childKey.DotKeys.Add(new DottedKeyItemSyntax(subKey)); } childKey.DotKeys.Add(new DottedKeyItemSyntax(child.Name)); SaveClass(child, document, childKey); } }
public override void Visit(KeyValueSyntax keyValue) { keyValue.Value.Accept(this); SetKeyValue(keyValue.Key, _currentValue, keyValue.Kind); }
public void SetProperties(IDictionary <string, string> value) { ValueTable?values; if (_table.TryGetValue(Property_Properties, out var propertiesValues)) { values = (ValueTable)propertiesValues.AsTable(); } else { var newTableSyntax = new InlineTableSyntax() { OpenBrace = SyntaxFactory.Token(TokenKind.OpenBrace), CloseBrace = SyntaxFactory.Token(TokenKind.CloseBrace), }; values = new ValueTable() { MirrorSyntax = newTableSyntax, }; _table[Property_Properties] = new Value(values); // Add the new syntax to the parent table syntax switch (_table.MirrorSyntax) { case TableSyntaxBase tableSyntax: tableSyntax.Items.Add(new KeyValueSyntax(Property_Properties, newTableSyntax)); break; default: throw new InvalidOperationException("Unknown Syntax on ValueTable"); } } // Add the new syntax to the parent table syntax // values.(); switch (values.MirrorSyntax) { case InlineTableSyntax tableSyntax: // Replace all items while (tableSyntax.Items.ChildrenCount > 0) { tableSyntax.Items.RemoveChildrenAt(0); } var index = 0; foreach (var item in value) { bool isLastItem = index == value.Keys.Count - 1; var equalToken = SyntaxFactory.Token(TokenKind.Equal); equalToken.AddLeadingWhitespace(); equalToken.AddTrailingWhitespace(); var newKeyValue = new KeyValueSyntax() { Key = new KeySyntax(item.Key), EqualToken = equalToken, Value = new StringValueSyntax(item.Value), }; var newInlineTableItem = new InlineTableItemSyntax(newKeyValue) { }; if (!isLastItem) { newInlineTableItem.Comma = SyntaxFactory.Token(TokenKind.Comma); } // newInlineTableItem.LeadingTrivia = new List<SyntaxTrivia>() { SyntaxFactory.Whitespace() }; tableSyntax.Items.Add(newInlineTableItem); index++; } break; default: throw new InvalidOperationException("Unknown Syntax on ValueList"); } }