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);
        }
Beispiel #3
0
        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);
        }
Beispiel #4
0
        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);
            }
        }
Beispiel #6
0
 /// <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());
Beispiel #7
0
 protected void ProcessKeyNode(ALSymbolInformation symbol, KeySyntax syntax)
 {
     symbol.fullName = ALSyntaxHelper.EncodeName(symbol.name) + ": " + syntax.Fields.ToFullString();
 }