diff --git a/src/Luban.Job.Cfg/Source/Defs/CfgDefLoader.cs b/src/Luban.Job.Cfg/Source/Defs/CfgDefLoader.cs index 4ea731e..4ce1d48 100644 --- a/src/Luban.Job.Cfg/Source/Defs/CfgDefLoader.cs +++ b/src/Luban.Job.Cfg/Source/Defs/CfgDefLoader.cs @@ -216,7 +216,7 @@ namespace Luban.Job.Cfg.Defs return mode; } - private readonly List _tableOptionalAttrs = new List { "index", "mode", "group", "patch_input", "comment", "define_from_file" }; + private readonly List _tableOptionalAttrs = new List { "index", "mode", "group", "patch_input", "comment", "define_from_file", "output" }; private readonly List _tableRequireAttrs = new List { "name", "value", "input" }; private void AddTable(string defineFile, XElement e) @@ -233,11 +233,12 @@ namespace Luban.Job.Cfg.Defs string patchInput = XmlUtil.GetOptionalAttribute(e, "patch_input"); string mode = XmlUtil.GetOptionalAttribute(e, "mode"); string tags = XmlUtil.GetOptionalAttribute(e, "tags"); - AddTable(defineFile, name, module, valueType, index, mode, group, comment, defineFromFile, input, patchInput, tags); + string output = XmlUtil.GetOptionalAttribute(e, "output"); + AddTable(defineFile, name, module, valueType, index, mode, group, comment, defineFromFile, input, patchInput, tags, output); } private void AddTable(string defineFile, string name, string module, string valueType, string index, string mode, string group, - string comment, bool defineFromExcel, string input, string patchInput, string tags) + string comment, bool defineFromExcel, string input, string patchInput, string tags, string outputFileName) { var p = new Table() { @@ -250,6 +251,7 @@ namespace Luban.Job.Cfg.Defs Comment = comment, Mode = ConvertMode(defineFile, name, mode, index), Tags = tags, + OutputFile = outputFileName, }; if (p.Groups.Count == 0) @@ -431,6 +433,7 @@ namespace Luban.Job.Cfg.Defs new CfgField() { Name = "comment", Type = "string" }, new CfgField() { Name = "define_from_excel", Type = "bool" }, new CfgField() { Name = "input", Type = "string" }, + new CfgField() { Name = "output", Type = "string" }, new CfgField() { Name = "patch_input", Type = "string" }, new CfgField() { Name = "tags", Type = "string" }, } @@ -468,7 +471,8 @@ namespace Luban.Job.Cfg.Defs string inputFile = (data.GetField("input") as DString).Value.Trim(); string patchInput = (data.GetField("patch_input") as DString).Value.Trim(); string tags = (data.GetField("tags") as DString).Value.Trim(); - AddTable(file.OriginFile, name, module, valueType, index, mode, group, comment, isDefineFromExcel, inputFile, patchInput, tags); + string outputFile = (data.GetField("output") as DString).Value.Trim(); + AddTable(file.OriginFile, name, module, valueType, index, mode, group, comment, isDefineFromExcel, inputFile, patchInput, tags, outputFile); }; } } diff --git a/src/Luban.Job.Cfg/Source/Defs/DefTable.cs b/src/Luban.Job.Cfg/Source/Defs/DefTable.cs index 52c364b..cbca6ff 100644 --- a/src/Luban.Job.Cfg/Source/Defs/DefTable.cs +++ b/src/Luban.Job.Cfg/Source/Defs/DefTable.cs @@ -23,6 +23,7 @@ namespace Luban.Job.Cfg.Defs _patchInputFiles = b.PatchInputFiles; Comment = b.Comment; Tags = DefUtil.ParseAttrs(b.Tags); + _outputFile = b.OutputFile; } @@ -40,6 +41,8 @@ namespace Luban.Job.Cfg.Defs private readonly Dictionary> _patchInputFiles; + private readonly string _outputFile; + public List Groups { get; } public TType KeyTType { get; private set; } @@ -52,7 +55,7 @@ namespace Luban.Job.Cfg.Defs public bool NeedExport => Assembly.NeedExport(this.Groups); - public string OutputDataFile => FullName.Replace('.', '_').ToLower(); + public string OutputDataFile => string.IsNullOrWhiteSpace(_outputFile) ? FullName.Replace('.', '_').ToLower() : _outputFile; public string InnerName => "_" + this.Name; diff --git a/src/Luban.Job.Cfg/Source/Generate/LuaCodeRenderBase.cs b/src/Luban.Job.Cfg/Source/Generate/LuaCodeRenderBase.cs index 3bb4d1d..2acd631 100644 --- a/src/Luban.Job.Cfg/Source/Generate/LuaCodeRenderBase.cs +++ b/src/Luban.Job.Cfg/Source/Generate/LuaCodeRenderBase.cs @@ -11,7 +11,7 @@ namespace Luban.Job.Cfg.Generate { public override void Render(GenContext ctx) { - var file = "Types.lua"; + var file = RenderFileUtil.GetFileOrDefault(ctx.GenArgs.OutputCodeMonolithicFile, "Types.lua"); var content = this.RenderAll(ctx.ExportTypes); var md5 = CacheFileUtil.GenMd5AndAddCache(file, string.Join('\n', content)); ctx.GenCodeFilesInOutputCodeDir.Add(new FileInfo() { FilePath = file, MD5 = md5 }); diff --git a/src/Luban.Job.Cfg/Source/Generate/PythonCodeRenderBase.cs b/src/Luban.Job.Cfg/Source/Generate/PythonCodeRenderBase.cs index 8a57dff..2267a6c 100644 --- a/src/Luban.Job.Cfg/Source/Generate/PythonCodeRenderBase.cs +++ b/src/Luban.Job.Cfg/Source/Generate/PythonCodeRenderBase.cs @@ -19,7 +19,7 @@ namespace Luban.Job.Cfg.Generate fileContent.Add(PythonStringTemplates.PythonVectorTypes); } - GenerateCodeMonolithic(ctx, "Types.py", lines, PreContent, null); + GenerateCodeMonolithic(ctx, RenderFileUtil.GetFileOrDefault(ctx.GenArgs.OutputCodeMonolithicFile, "Types.py"), lines, PreContent, null); } public override string Render(DefEnum e) diff --git a/src/Luban.Job.Cfg/Source/Generate/RustCodeJsonRender.cs b/src/Luban.Job.Cfg/Source/Generate/RustCodeJsonRender.cs index a1ec98c..9c92aa6 100644 --- a/src/Luban.Job.Cfg/Source/Generate/RustCodeJsonRender.cs +++ b/src/Luban.Job.Cfg/Source/Generate/RustCodeJsonRender.cs @@ -20,7 +20,7 @@ namespace Luban.Job.Cfg.Generate ctx.Lan = RenderFileUtil.GetLanguage(genType); var lines = new List(); - GenerateCodeMonolithic(ctx, "mod.rs", lines, ls => + GenerateCodeMonolithic(ctx, RenderFileUtil.GetFileOrDefault(ctx.GenArgs.OutputCodeMonolithicFile, "mod.rs"), lines, ls => { var template = StringTemplateUtil.GetTemplate("config/rust_json/mod_header"); var result = template.RenderCode(ctx.ExportTypes); diff --git a/src/Luban.Job.Cfg/Source/Generate/TypescriptCodeRenderBase.cs b/src/Luban.Job.Cfg/Source/Generate/TypescriptCodeRenderBase.cs index 1d83325..a99884f 100644 --- a/src/Luban.Job.Cfg/Source/Generate/TypescriptCodeRenderBase.cs +++ b/src/Luban.Job.Cfg/Source/Generate/TypescriptCodeRenderBase.cs @@ -51,15 +51,15 @@ namespace Luban.Job.Cfg.Generate fileContent.Add(TypescriptStringTemplate.GetVectorImports(brightRequirePath, brightPackageName)); } - fileContent.Add(@$"export namespace {ctx.TopModule} {{"); + //fileContent.Add(@$"export namespace {ctx.TopModule} {{"); }; Action> postContent = (fileContent) => { - fileContent.Add("}"); // end of topmodule + //fileContent.Add("}"); // end of topmodule }; - GenerateCodeMonolithic(ctx, "Types.ts", lines, preContent, postContent); + GenerateCodeMonolithic(ctx, RenderFileUtil.GetFileOrDefault(ctx.GenArgs.OutputCodeMonolithicFile, "Types.ts"), lines, preContent, postContent); } public override string Render(DefEnum e) diff --git a/src/Luban.Job.Cfg/Source/RawDefs/Table.cs b/src/Luban.Job.Cfg/Source/RawDefs/Table.cs index 7c6aa5d..87dc92d 100644 --- a/src/Luban.Job.Cfg/Source/RawDefs/Table.cs +++ b/src/Luban.Job.Cfg/Source/RawDefs/Table.cs @@ -41,6 +41,8 @@ namespace Luban.Job.Cfg.RawDefs public List InputFiles { get; set; } = new List(); + public string OutputFile { get; set; } + public Dictionary> PatchInputFiles { get; set; } = new Dictionary>(); } } diff --git a/src/Luban.Job.Common/Source/Defs/CommonDefLoader.cs b/src/Luban.Job.Common/Source/Defs/CommonDefLoader.cs index f3d9877..46f7c75 100644 --- a/src/Luban.Job.Common/Source/Defs/CommonDefLoader.cs +++ b/src/Luban.Job.Common/Source/Defs/CommonDefLoader.cs @@ -107,7 +107,7 @@ namespace Luban.Job.Common.Defs private void SetTopModule(XElement e) { - this.TopModule = XmlUtil.GetRequiredAttribute(e, "name"); + this.TopModule = XmlUtil.GetOptionalAttribute(e, "name"); } private async Task AddImportAsync(string xmlFile) diff --git a/src/Luban.Job.Common/Source/GenArgsBase.cs b/src/Luban.Job.Common/Source/GenArgsBase.cs index 4ca1f09..b14aa2e 100644 --- a/src/Luban.Job.Common/Source/GenArgsBase.cs +++ b/src/Luban.Job.Common/Source/GenArgsBase.cs @@ -10,6 +10,9 @@ namespace Luban.Job.Common [Option('c', "output_code_dir", Required = false, HelpText = "output code directory")] public string OutputCodeDir { get; set; } + [Option("output_code_monolithic_file", Required = false, HelpText = "output monolithic code file. only effect when lan=rust,python,typescript,lua")] + public string OutputCodeMonolithicFile { get; set; } + [Option("typescript_bright_require_path", Required = false, HelpText = "bright require path in typescript")] public string TypescriptBrightRequirePath { get; set; } diff --git a/src/Luban.Job.Common/Source/Utils/RenderFileUtil.cs b/src/Luban.Job.Common/Source/Utils/RenderFileUtil.cs index 10faf07..022bb3a 100644 --- a/src/Luban.Job.Common/Source/Utils/RenderFileUtil.cs +++ b/src/Luban.Job.Common/Source/Utils/RenderFileUtil.cs @@ -113,5 +113,10 @@ namespace Luban.Job.Common.Utils { return $"{fileName}.{(string.IsNullOrEmpty(fileExtension) ? GetOutputFileSuffix(genType) : fileExtension)}"; } + + public static string GetFileOrDefault(string preferFile, string candidateFile) + { + return string.IsNullOrWhiteSpace(preferFile) ? candidateFile : preferFile; + } } }