private TomlTable SetKeyValue(KeySyntax key, object value, SyntaxKind kind) { var currentTable = _currentTable; var name = GetStringFromBasic(key.Key); var items = key.DotKeys; for (int i = 0; i < items.ChildrenCount; i++) { currentTable = GetTable(currentTable, name, false); name = GetStringFromBasic(items.GetChildren(i).Key); } var isTableArray = kind == SyntaxKind.TableArray; if (kind == SyntaxKind.Table || isTableArray) { currentTable = GetTable(currentTable, name, isTableArray); } else { currentTable[name] = value; } return(currentTable); }
private static List <String> GetPrimaryKeyFieldsNames(KeyListSyntax keyList) { if (keyList == null) { return(null); } List <string> keys = new List <string>(); if (keyList.Keys == null) { return(null); } SyntaxList <KeySyntax> keysList = keyList.Keys; if (keysList != null) { KeySyntax keySyntax = keysList.First(); SeparatedSyntaxList <IdentifierNameSyntax> fields = keySyntax.Fields; foreach (IdentifierNameSyntax identifierNameSyntax in fields) { keys.Add(identifierNameSyntax.Identifier.Value.ToString()); } } return(keys); }
private (ValueTable Table, string Name) ResolveKey(KeySyntax key) { var currentTable = _currentTable; var name = GetStringFromBasic(key.Key); // Resolve dot references from the current table var items = key.DotKeys; for (int i = 0; i < items.ChildrenCount; i++) { currentTable = GetTable(currentTable, name, false); name = GetStringFromBasic(items.GetChildren(i).Key); } return(currentTable, name); }
public static string AsText(this KeySyntax key) { var bareKey = AsText(key.Key); if (key.DotKeys.ChildrenCount == 0) { return(bareKey); } var builder = new StringBuilder(); builder.Append(bareKey); foreach (var dottedKeyItemSyntax in key.DotKeys) { builder.Append('.'); builder.Append(AsText(dottedKeyItemSyntax.Key)); } return(builder.ToString()); }
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); } }
/// <summary> /// $hack(jefflill): This extension returns the actual string name for a <see cref="KeySyntax"/>. /// </summary> /// <param name="key">The source key.</param> /// <returns>The key's string name.</returns> public static string GetName(this KeySyntax key) => Normalize(key.ToString());
protected void ProcessKeyNode(ALSymbolInformation symbol, KeySyntax syntax) { symbol.fullName = ALSyntaxHelper.EncodeName(symbol.name) + ": " + syntax.Fields.ToFullString(); }