예제 #1
0
        public IList <SDKConfig> GetSDKs()
        {
            if (_table.TryGetValue(Property_SDKs, out var sdksValue))
            {
                var values = sdksValue.AsList();
                var result = new List <SDKConfig>();
                foreach (var value in values)
                {
                    result.Add(new SDKConfig((ValueTable)value.AsTable()));
                }

                return(result);
            }
            else
            {
                throw new InvalidOperationException("No SDKs.");
            }
        }
예제 #2
0
        /// <summary>
        /// Generate the collection of build extensions
        /// </summary>
        private IList <Path> GenerateBuildExtensionSet(
            Recipe recipe,
            ValueTable dependenciesSharedState)
        {
            var buildExtensionLibraries = new List <Path>();

            // Run the RecipeBuild extension to inject core build tasks
            var recipeBuildExtensionPath = new Path();
            var language = recipe.Language;

            if (language == "C++")
            {
                var moduleFolder = new Path(Assembly.GetExecutingAssembly().Location).GetParent();
                recipeBuildExtensionPath = moduleFolder + new Path("Extensions/Soup.Cpp/Soup.Cpp.dll");
            }
            else if (language == "C#")
            {
                var moduleFolder = new Path(Assembly.GetExecutingAssembly().Location).GetParent();
                recipeBuildExtensionPath = moduleFolder + new Path("Extensions/Soup.CSharp/Soup.CSharp.dll");
            }
            else
            {
                throw new InvalidOperationException("Unknown language.");
            }

            buildExtensionLibraries.Add(recipeBuildExtensionPath);

            // Check for any dynamic libraries in the shared state
            if (dependenciesSharedState.TryGetValue("Build", out var buildDependenciesValue))
            {
                foreach (var dependencyValue in buildDependenciesValue.AsTable())
                {
                    var dependency = dependencyValue.Value.AsTable();
                    if (dependency.TryGetValue("Build", out var buildTableValue))
                    {
                        var buildTable = buildTableValue.AsTable();
                        if (buildTable.TryGetValue("TargetFile", out var targetFileValue))
                        {
                            var targetFile = new Path(targetFileValue.AsString().ToString());
                            buildExtensionLibraries.Add(targetFile);
                        }
                        else
                        {
                            Log.Warning("Found build dependency with no target file.");
                        }
                    }
                    else
                    {
                        Log.Warning("Found build dependency with no build table.");
                    }
                }
            }

            return(buildExtensionLibraries);
        }
예제 #3
0
        private ValueTable GetTable(ValueTable table, string key, bool createTableArrayItem)
        {
            if (table.TryGetValue(key, out var subTableObject))
            {
                if (subTableObject.Type == ValueType.List)
                {
                    var tomlArray = subTableObject.AsList();
                    if (createTableArrayItem)
                    {
                        var newTableForArray = new Value(new ValueTable());
                        tomlArray.Add(newTableForArray);
                        subTableObject = newTableForArray;
                    }
                    else
                    {
                        subTableObject = tomlArray[tomlArray.Count - 1];
                    }
                }

                if (!(subTableObject.Type == ValueType.Table))
                {
                    throw new InvalidOperationException($"Cannot transform the key `{key}` to a table while the existing underlying object is a `{subTableObject.GetType()}");
                }

                return((ValueTable)subTableObject.AsTable());
            }

            var newTable = new ValueTable();

            if (createTableArrayItem)
            {
                table[key] = new Value(new ValueList(new List <Value>()
                {
                    new Value(newTable),
                }));
            }
            else
            {
                table[key] = new Value(newTable);
            }

            return(newTable);
        }
예제 #4
0
        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");
            }
        }