Exemplo n.º 1
0
        private void Compiler()
        {
            var commandLineArguments = CSharpCommandLineParser.Default.Parse(cscArguments_, null, null);
            var parseOptions         = commandLineArguments.ParseOptions.WithDocumentationMode(DocumentationMode.Parse);
            var files       = Directory.EnumerateFiles(folder_, "*.cs", SearchOption.AllDirectories);
            var syntaxTrees = files.Select(file => CSharpSyntaxTree.ParseText(File.ReadAllText(file), parseOptions, file));
            var references  = Libs.Select(i => MetadataReference.CreateFromFile(i));

            LuaSyntaxGenerator.SettingInfo setting = new LuaSyntaxGenerator.SettingInfo()
            {
                IsNewest     = isNewest_,
                HasSemicolon = hasSemicolon_,
                Indent       = indent_,
            };
            LuaSyntaxGenerator generator = new LuaSyntaxGenerator(syntaxTrees, references, commandLineArguments.CompilationOptions, Metas, setting, attributes_, folder_);

            generator.Generate(output_);
        }
Exemplo n.º 2
0
        private LuaSyntaxGenerator GetGenerator()
        {
            var files   = GetSourceFiles(out bool isDirectory);
            var codes   = files.Select(i => (File.ReadAllText(i), i));
            var libs    = GetLibs(libs_, out var luaModuleLibs);
            var setting = new LuaSyntaxGenerator.SettingInfo()
            {
                IsClassic              = isClassic_,
                IsExportMetadata       = IsExportMetadata,
                BaseFolder             = isDirectory ? input_ : null,
                Attributes             = attributes_,
                Enums                  = enums_,
                LuaModuleLibs          = new HashSet <string>(luaModuleLibs),
                IsModule               = IsModule,
                IsInlineSimpleProperty = IsInlineSimpleProperty,
                IsPreventDebugObject   = IsPreventDebugObject,
            };

            return(new LuaSyntaxGenerator(codes, libs, cscArguments_, Metas, setting));
        }
Exemplo n.º 3
0
        internal static LuaSyntaxGenerator CreateGeneratorForProject(CompilerSettings settings, LuaSyntaxGenerator.SettingInfo settingInfo)
        {
            var projectPath        = settings.input_;
            var mainProject        = ProjectHelper.ParseProject(projectPath, IsCompileDebug(settings.cscArguments_) ? configurationDebug : configurationRelease);
            var projects           = mainProject?.EnumerateProjects().ToArray();
            var packages           = PackageHelper.EnumeratePackages(mainProject.TargetFrameworkVersions.First(), projects.Select(project => project.project));
            var files              = GetProjectsSourceFiles(projects);
            var packageBaseFolders = new List <string>();

            if (packages != null)
            {
                var searchDirectories = new HashSet <string>(StringComparer.OrdinalIgnoreCase);
                foreach (var package in packages)
                {
                    if (IsDecompile(package, settings))
                    {
                        PackageHelper.EnumerateLibs(package, out var baseFolder);
                        if (string.IsNullOrWhiteSpace(baseFolder))
                        {
                            continue;
                        }

                        searchDirectories.Add(baseFolder);
                    }
                }

                foreach (var package in packages)
                {
                    var packageFiles = PackageHelper.EnumerateSourceFiles(package, out var baseFolder).ToArray();
                    if (packageFiles.Length > 0)
                    {
                        files = files.Concat(packageFiles);
                        packageBaseFolders.Add(baseFolder);
                    }
                    if (IsDecompile(package, settings))
                    {
                        var packageLibs = PackageHelper.EnumerateLibs(package, out baseFolder).ToArray();
                        if (packageLibs.Length > 0)
                        {
                            var folderInfo = new DirectoryInfo(baseFolder);
                            while (!string.Equals(folderInfo.Name, "packages", StringComparison.OrdinalIgnoreCase))
                            {
                                folderInfo = folderInfo.Parent;
                            }

                            baseFolder = Path.Combine(
                                Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments),
                                "CSharpLua",
                                "packages",
                                baseFolder[(folderInfo.FullName.Length + 1)..]);
Exemplo n.º 4
0
        internal static LuaSyntaxGenerator CreateGeneratorForFolder(CompilerSettings settings, LuaSyntaxGenerator.SettingInfo settingInfo)
        {
            var folderPath         = settings.input_;
            var files              = GetFolderSourceFiles(folderPath);
            var packageBaseFolders = new List <string>();
            var codes              = files.Select(i => (File.ReadAllText(i), i));
            var libs = GetLibs(settings.libs_, out var luaModuleLibs);

            settingInfo.LuaModuleLibs = luaModuleLibs.ToHashSet();

            if (Directory.Exists(folderPath))
            {
                settingInfo.AddBaseFolder(folderPath, false);
            }
            else if (files.Count() == 1)
            {
                settingInfo.AddBaseFolder(new FileInfo(files.Single()).DirectoryName, true);
            }
            else
            {
                // throw new NotImplementedException("Unable to determine basefolder(s) when the input is a list of source files.");
            }

            return(new LuaSyntaxGenerator(codes, libs, settings.cscArguments_, settings.metas_, settingInfo));
        }
Exemplo n.º 5
0
 internal static LuaSyntaxGenerator CreateGeneratorForFile(LuaSyntaxGenerator.SettingInfo settingInfo)
 {
     throw new NotImplementedException();
 }
Exemplo n.º 6
0
 internal static LuaSyntaxGenerator CreateGenerator(CompilerSettings?settings, LuaSyntaxGenerator.SettingInfo settingInfo)
 {
     return(settings is null
 ? CreateGeneratorForFile(settingInfo)
 : settings.isProject_
   ? CreateGeneratorForProject(settings, settingInfo)
   : CreateGeneratorForFolder(settings, settingInfo));
 }
Exemplo n.º 7
0
 public LuaRenderer(LuaSyntaxGenerator.SettingInfo settings, TextWriter writer)
 {
     // generator_ = generator;
     settings_ = settings;
     writer_   = writer;
 }