diff --git a/src/Luban.Job.Cfg/Source/Defs/DefAssembly.cs b/src/Luban.Job.Cfg/Source/Defs/DefAssembly.cs index f25fe8e..a29815d 100644 --- a/src/Luban.Job.Cfg/Source/Defs/DefAssembly.cs +++ b/src/Luban.Job.Cfg/Source/Defs/DefAssembly.cs @@ -198,7 +198,7 @@ namespace Luban.Job.Cfg.Defs { LoadCommon(defines, agent, args); - OutputCompactJson = args.OutputCompactJson; + OutputCompactJson = args.OutputDataCompactJson; SupportDatetimeType = true; diff --git a/src/Luban.Job.Cfg/Source/GenArgs.cs b/src/Luban.Job.Cfg/Source/GenArgs.cs index 41b63d0..f5cb135 100644 --- a/src/Luban.Job.Cfg/Source/GenArgs.cs +++ b/src/Luban.Job.Cfg/Source/GenArgs.cs @@ -5,6 +5,9 @@ namespace Luban.Job.Cfg { public class GenArgs : GenArgsBase { + [Option('s', "service", Required = true, HelpText = "service")] + public string Service { get; set; } + [Option("input_data_dir", Required = true, HelpText = "input data dir")] public string InputDataDir { get; set; } @@ -23,23 +26,23 @@ namespace Luban.Job.Cfg [Option("output_data_json_monolithic_file", Required = false, HelpText = "output monolithic json file")] public string OutputDataJsonMonolithicFile { get; set; } - [Option("gen_types", Required = true, HelpText = "code_cs_bin,code_cs_json,code_cs_unity_json,code_lua_bin,code_java_bin,code_java_json,code_go_bin,code_go_json,code_cpp_bin,code_python3_json,code_typescript_bin,code_typescript_json,code_rust_json,code_protobuf,data_bin,data_lua,data_json,data_json2,data_json_monolithic,data_resources,data_template,data_protobuf,convert_json,convert_lua,convert_xlsx . can be multi")] + [Option("gen_types", Required = true, HelpText = "code_cs_bin,code_cs_json,code_cs_unity_json,code_lua_bin,code_java_bin,code_java_json,code_go_bin,code_go_json,code_cpp_bin,code_python3_json,code_typescript_bin,code_typescript_json,code_rust_json,code_protobuf,code_template,data_bin,data_lua,data_json,data_json2,data_json_monolithic,data_resources,data_template,data_protobuf,convert_json,convert_lua,convert_xlsx . can be multi")] public string GenType { get; set; } - [Option("template_name", Required = false, HelpText = "template name. use with gen_types=data_template")] - public string TemplateName { get; set; } + [Option("template:data:file", Required = false, HelpText = "template name. use with gen_types=data_template")] + public string TemplateDataFile { get; set; } - [Option("data_file_extension", Required = false, HelpText = "data file name extension. default choose by gen_type")] - public string DataFileExtension { get; set; } + [Option("template:code:dir", Required = false, HelpText = "code template dir. use with gen_types=code_template")] + public string TemplateCodeDir { get; set; } - [Option("output_compact_json", Required = false, HelpText = "output compact json data. drop blank characters. ")] - public bool OutputCompactJson { get; set; } + [Option("output:data:file_extension", Required = false, HelpText = "data file name extension. default choose by gen_type")] + public string OutputDataFileExtension { get; set; } - [Option('s', "service", Required = true, HelpText = "service")] - public string Service { get; set; } + [Option("output:data:compact_json", Required = false, HelpText = "output compact json data. drop blank characters. ")] + public bool OutputDataCompactJson { get; set; } - [Option("export_exclude_tags", Required = false, HelpText = "export exclude tags. default export all tags")] - public string ExportExcludeTags { get; set; } = ""; + [Option("output:exclude_tags", Required = false, HelpText = "export exclude tags. default export all tags")] + public string OutputExcludeTags { get; set; } = ""; [Option("l10n:timezone", Required = false, HelpText = "timezone")] public string L10nTimeZone { get; set; } diff --git a/src/Luban.Job.Cfg/Source/GenContext.cs b/src/Luban.Job.Cfg/Source/GenContext.cs index 1e93525..465c2f4 100644 --- a/src/Luban.Job.Cfg/Source/GenContext.cs +++ b/src/Luban.Job.Cfg/Source/GenContext.cs @@ -6,6 +6,7 @@ using Luban.Job.Common.Defs; using System; using System.Collections.Concurrent; using System.Collections.Generic; +using System.Threading; using System.Threading.Tasks; using FileInfo = Luban.Common.Protos.FileInfo; @@ -13,6 +14,10 @@ namespace Luban.Job.Cfg { class GenContext { + private readonly static AsyncLocal s_asyncLocal = new(); + + public static GenContext Ctx { get => s_asyncLocal.Value; set => s_asyncLocal.Value = value; } + public GenArgs GenArgs { get; init; } public DefAssembly Assembly { get; init; } public string GenType { get; set; } diff --git a/src/Luban.Job.Cfg/Source/Generate/CodeRenderBase.cs b/src/Luban.Job.Cfg/Source/Generate/CodeRenderBase.cs index c53961b..220188c 100644 --- a/src/Luban.Job.Cfg/Source/Generate/CodeRenderBase.cs +++ b/src/Luban.Job.Cfg/Source/Generate/CodeRenderBase.cs @@ -1,5 +1,6 @@ using Luban.Common.Protos; using Luban.Job.Cfg.Defs; +using Luban.Job.Common; using Luban.Job.Common.Defs; using Luban.Job.Common.Utils; using System; @@ -29,11 +30,16 @@ namespace Luban.Job.Cfg.Generate } } + protected virtual ELanguage GetLanguage(GenContext ctx) + { + return RenderFileUtil.GetLanguage(ctx.GenType); + } + protected void GenerateCodeScatter(GenContext ctx) { string genType = ctx.GenType; ctx.Render = this; - ctx.Lan = RenderFileUtil.GetLanguage(genType); + ctx.Lan = GetLanguage(ctx); DefAssembly.LocalAssebmly.CurrentLanguage = ctx.Lan; foreach (var c in ctx.ExportTypes) { diff --git a/src/Luban.Job.Cfg/Source/Generate/CppCodeBinRender.cs b/src/Luban.Job.Cfg/Source/Generate/CppCodeBinRender.cs index 6c5562b..645c5e7 100644 --- a/src/Luban.Job.Cfg/Source/Generate/CppCodeBinRender.cs +++ b/src/Luban.Job.Cfg/Source/Generate/CppCodeBinRender.cs @@ -15,8 +15,6 @@ namespace Luban.Job.Cfg.Generate [Render("code_cpp_bin")] class CppCodeBinRender : TemplateCodeRenderBase { - protected override string CommonRenderTemplateDir => "cpp"; - protected override string RenderTemplateDir => "cpp_bin"; public override void Render(GenContext ctx) diff --git a/src/Luban.Job.Cfg/Source/Generate/CppEditorRender.cs b/src/Luban.Job.Cfg/Source/Generate/CppEditorRender.cs index 7ac2931..b781d65 100644 --- a/src/Luban.Job.Cfg/Source/Generate/CppEditorRender.cs +++ b/src/Luban.Job.Cfg/Source/Generate/CppEditorRender.cs @@ -8,8 +8,6 @@ namespace Luban.Job.Cfg.Generate [Render("code_cpp_editor")] class CppEditorRender : TemplateCodeRenderBase { - protected override string CommonRenderTemplateDir => "cpp"; - protected override string RenderTemplateDir => "cpp_editor_json"; } } diff --git a/src/Luban.Job.Cfg/Source/Generate/CsCodeBinRender.cs b/src/Luban.Job.Cfg/Source/Generate/CsCodeBinRender.cs index ae63244..f70d73e 100644 --- a/src/Luban.Job.Cfg/Source/Generate/CsCodeBinRender.cs +++ b/src/Luban.Job.Cfg/Source/Generate/CsCodeBinRender.cs @@ -8,8 +8,6 @@ namespace Luban.Job.Cfg.Generate [Render("code_cs_bin")] class CsCodeBinRender : TemplateCodeRenderBase { - protected override string CommonRenderTemplateDir => "cs"; - protected override string RenderTemplateDir => "cs_bin"; } } diff --git a/src/Luban.Job.Cfg/Source/Generate/CsCodeJsonRender.cs b/src/Luban.Job.Cfg/Source/Generate/CsCodeJsonRender.cs index 6ef2de1..8657a44 100644 --- a/src/Luban.Job.Cfg/Source/Generate/CsCodeJsonRender.cs +++ b/src/Luban.Job.Cfg/Source/Generate/CsCodeJsonRender.cs @@ -8,8 +8,6 @@ namespace Luban.Job.Cfg.Generate [Render("code_cs_json")] class CsCodeJsonRender : TemplateCodeRenderBase { - protected override string CommonRenderTemplateDir => "cs"; - protected override string RenderTemplateDir => "cs_json"; } } diff --git a/src/Luban.Job.Cfg/Source/Generate/CsCodeUnityJsonRender.cs b/src/Luban.Job.Cfg/Source/Generate/CsCodeUnityJsonRender.cs index 21ee7b0..4d39166 100644 --- a/src/Luban.Job.Cfg/Source/Generate/CsCodeUnityJsonRender.cs +++ b/src/Luban.Job.Cfg/Source/Generate/CsCodeUnityJsonRender.cs @@ -8,8 +8,6 @@ namespace Luban.Job.Cfg.Generate [Render("code_cs_unity_json")] class CsCodeUnityJsonRender : TemplateCodeRenderBase { - protected override string CommonRenderTemplateDir => "cs"; - protected override string RenderTemplateDir => "cs_unity_json"; } } diff --git a/src/Luban.Job.Cfg/Source/Generate/CsEditorRender.cs b/src/Luban.Job.Cfg/Source/Generate/CsEditorRender.cs index 46d6741..6bd14e1 100644 --- a/src/Luban.Job.Cfg/Source/Generate/CsEditorRender.cs +++ b/src/Luban.Job.Cfg/Source/Generate/CsEditorRender.cs @@ -11,8 +11,6 @@ namespace Luban.Job.Cfg.Generate [Render("code_cs_unity_editor")] class CsEditorRender : TemplateCodeRenderBase { - override protected string CommonRenderTemplateDir => "cs"; - override protected string RenderTemplateDir => "cs_editor_json"; public override void Render(GenContext ctx) diff --git a/src/Luban.Job.Cfg/Source/Generate/DataScatterRender.cs b/src/Luban.Job.Cfg/Source/Generate/DataScatterRender.cs index c17ef56..97cae29 100644 --- a/src/Luban.Job.Cfg/Source/Generate/DataScatterRender.cs +++ b/src/Luban.Job.Cfg/Source/Generate/DataScatterRender.cs @@ -23,7 +23,7 @@ namespace Luban.Job.Cfg.Generate { ctx.Tasks.Add(Task.Run(() => { - var file = RenderFileUtil.GetOutputFileName(genType, table.OutputDataFile, ctx.GenArgs.DataFileExtension); + var file = RenderFileUtil.GetOutputFileName(genType, table.OutputDataFile, ctx.GenArgs.OutputDataFileExtension); var records = ctx.Assembly.GetTableExportDataList(table); if (!FileRecordCacheManager.Ins.TryGetRecordOutputData(table, records, genType, out string md5)) { diff --git a/src/Luban.Job.Cfg/Source/Generate/GoCodeBinRender.cs b/src/Luban.Job.Cfg/Source/Generate/GoCodeBinRender.cs index 28cf85b..e645009 100644 --- a/src/Luban.Job.Cfg/Source/Generate/GoCodeBinRender.cs +++ b/src/Luban.Job.Cfg/Source/Generate/GoCodeBinRender.cs @@ -8,8 +8,6 @@ namespace Luban.Job.Cfg.Generate [Render("code_go_bin")] class GoCodeBinRender : TemplateCodeRenderBase { - protected override string CommonRenderTemplateDir => "go"; - protected override string RenderTemplateDir => "go_bin"; } } diff --git a/src/Luban.Job.Cfg/Source/Generate/GoCodeJsonRender.cs b/src/Luban.Job.Cfg/Source/Generate/GoCodeJsonRender.cs index 9a8703f..ac44609 100644 --- a/src/Luban.Job.Cfg/Source/Generate/GoCodeJsonRender.cs +++ b/src/Luban.Job.Cfg/Source/Generate/GoCodeJsonRender.cs @@ -8,8 +8,6 @@ namespace Luban.Job.Cfg.Generate [Render("code_go_json")] class GoCodeJsonRender : TemplateCodeRenderBase { - protected override string CommonRenderTemplateDir => "go"; - protected override string RenderTemplateDir => "go_json"; } } diff --git a/src/Luban.Job.Cfg/Source/Generate/JavaCodeBinRender.cs b/src/Luban.Job.Cfg/Source/Generate/JavaCodeBinRender.cs index dbdc339..9094e90 100644 --- a/src/Luban.Job.Cfg/Source/Generate/JavaCodeBinRender.cs +++ b/src/Luban.Job.Cfg/Source/Generate/JavaCodeBinRender.cs @@ -8,8 +8,6 @@ namespace Luban.Job.Cfg.Generate [Render("code_java_bin")] class JavaCodeBinRender : TemplateCodeRenderBase { - protected override string CommonRenderTemplateDir => "java"; - protected override string RenderTemplateDir => "java_bin"; } } diff --git a/src/Luban.Job.Cfg/Source/Generate/JavaCodeJsonRender.cs b/src/Luban.Job.Cfg/Source/Generate/JavaCodeJsonRender.cs index b58b667..a0744fc 100644 --- a/src/Luban.Job.Cfg/Source/Generate/JavaCodeJsonRender.cs +++ b/src/Luban.Job.Cfg/Source/Generate/JavaCodeJsonRender.cs @@ -8,8 +8,6 @@ namespace Luban.Job.Cfg.Generate [Render("code_java_json")] class JavaCodeJsonRender : TemplateCodeRenderBase { - protected override string CommonRenderTemplateDir => "java"; - protected override string RenderTemplateDir => "java_json"; } } diff --git a/src/Luban.Job.Cfg/Source/Generate/LuaCodeRenderBase.cs b/src/Luban.Job.Cfg/Source/Generate/LuaCodeRenderBase.cs index 2cfdeb5..57d9787 100644 --- a/src/Luban.Job.Cfg/Source/Generate/LuaCodeRenderBase.cs +++ b/src/Luban.Job.Cfg/Source/Generate/LuaCodeRenderBase.cs @@ -9,8 +9,6 @@ namespace Luban.Job.Cfg.Generate { abstract class LuaCodeRenderBase : TemplateCodeRenderBase { - protected override string CommonRenderTemplateDir => "lua"; - public override void Render(GenContext ctx) { DefAssembly.LocalAssebmly.CurrentLanguage = Common.ELanguage.LUA; diff --git a/src/Luban.Job.Cfg/Source/Generate/Protobuf2SchemaRender.cs b/src/Luban.Job.Cfg/Source/Generate/Protobuf2SchemaRender.cs index 20e1dbe..292b948 100644 --- a/src/Luban.Job.Cfg/Source/Generate/Protobuf2SchemaRender.cs +++ b/src/Luban.Job.Cfg/Source/Generate/Protobuf2SchemaRender.cs @@ -15,6 +15,6 @@ namespace Luban.Job.Cfg.Generate [Render("code_protobuf2")] class Protobuf2SchemaRender : ProtobufSchemaRenderBase { - protected override string RenderTemplateDir => "pb2"; + protected override string RenderTemplateDir => "protobuf2"; } } diff --git a/src/Luban.Job.Cfg/Source/Generate/Protobuf3SchemaRender.cs b/src/Luban.Job.Cfg/Source/Generate/Protobuf3SchemaRender.cs index bc55c96..83eb9b7 100644 --- a/src/Luban.Job.Cfg/Source/Generate/Protobuf3SchemaRender.cs +++ b/src/Luban.Job.Cfg/Source/Generate/Protobuf3SchemaRender.cs @@ -10,6 +10,6 @@ namespace Luban.Job.Cfg.Generate [Render("code_protobuf3")] class Protobuf3SchemaRender : ProtobufSchemaRenderBase { - protected override string RenderTemplateDir => "pb3"; + protected override string RenderTemplateDir => "protobuf"; } } diff --git a/src/Luban.Job.Cfg/Source/Generate/ProtobufSchemaRenderBase.cs b/src/Luban.Job.Cfg/Source/Generate/ProtobufSchemaRenderBase.cs index fb2e024..4ea74c0 100644 --- a/src/Luban.Job.Cfg/Source/Generate/ProtobufSchemaRenderBase.cs +++ b/src/Luban.Job.Cfg/Source/Generate/ProtobufSchemaRenderBase.cs @@ -13,11 +13,9 @@ namespace Luban.Job.Cfg.Generate { abstract class ProtobufSchemaRenderBase : TemplateCodeRenderBase { - protected override string CommonRenderTemplateDir => "pb"; - public override void Render(GenContext ctx) { - DefAssembly.LocalAssebmly.CurrentLanguage = Common.ELanguage.LUA; + DefAssembly.LocalAssebmly.CurrentLanguage = Common.ELanguage.PROTOBUF; var file = RenderFileUtil.GetFileOrDefault(ctx.GenArgs.OutputCodeMonolithicFile, "config.proto"); var content = this.RenderAll(ctx.ExportTypes); var md5 = CacheFileUtil.GenMd5AndAddCache(file, string.Join('\n', content)); diff --git a/src/Luban.Job.Cfg/Source/Generate/Python3CodeJsonRender.cs b/src/Luban.Job.Cfg/Source/Generate/Python3CodeJsonRender.cs index b1300c7..5cb342a 100644 --- a/src/Luban.Job.Cfg/Source/Generate/Python3CodeJsonRender.cs +++ b/src/Luban.Job.Cfg/Source/Generate/Python3CodeJsonRender.cs @@ -10,8 +10,6 @@ namespace Luban.Job.Cfg.Generate [Render("code_python3_json")] class Python3CodeJsonRender : TemplateCodeRenderBase { - protected override string CommonRenderTemplateDir => "python"; - protected override string RenderTemplateDir => "python_json"; public override void Render(GenContext ctx) diff --git a/src/Luban.Job.Cfg/Source/Generate/RustCodeJsonRender.cs b/src/Luban.Job.Cfg/Source/Generate/RustCodeJsonRender.cs index ad86ab6..5542b01 100644 --- a/src/Luban.Job.Cfg/Source/Generate/RustCodeJsonRender.cs +++ b/src/Luban.Job.Cfg/Source/Generate/RustCodeJsonRender.cs @@ -14,8 +14,6 @@ namespace Luban.Job.Cfg.Generate [Render("code_rust_json")] class RustCodeJsonRender : TemplateCodeRenderBase { - protected override string CommonRenderTemplateDir => "rust"; - protected override string RenderTemplateDir => "rust_json"; public override void Render(GenContext ctx) @@ -23,7 +21,7 @@ namespace Luban.Job.Cfg.Generate string genType = ctx.GenType; var args = ctx.GenArgs; ctx.Render = this; - ctx.Lan = RenderFileUtil.GetLanguage(genType); + ctx.Lan = GetLanguage(ctx); DefAssembly.LocalAssebmly.CurrentLanguage = ctx.Lan; var lines = new List(); diff --git a/src/Luban.Job.Cfg/Source/Generate/TemplateCodeRenderBase.cs b/src/Luban.Job.Cfg/Source/Generate/TemplateCodeRenderBase.cs index 6ce72e1..be63bb3 100644 --- a/src/Luban.Job.Cfg/Source/Generate/TemplateCodeRenderBase.cs +++ b/src/Luban.Job.Cfg/Source/Generate/TemplateCodeRenderBase.cs @@ -12,7 +12,7 @@ namespace Luban.Job.Cfg.Generate { abstract class TemplateCodeRenderBase : CodeRenderBase { - protected abstract string CommonRenderTemplateDir { get; } + protected virtual string CommonRenderTemplateDir => RenderFileUtil.GetCommonTemplateDirName(DefAssembly.LocalAssebmly.CurrentLanguage); protected abstract string RenderTemplateDir { get; } diff --git a/src/Luban.Job.Cfg/Source/Generate/TemplateCodeScatterRender.cs b/src/Luban.Job.Cfg/Source/Generate/TemplateCodeScatterRender.cs new file mode 100644 index 0000000..9a78eea --- /dev/null +++ b/src/Luban.Job.Cfg/Source/Generate/TemplateCodeScatterRender.cs @@ -0,0 +1,22 @@ +using Luban.Job.Common; +using Luban.Job.Common.Generate; +using Luban.Job.Common.Utils; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Luban.Job.Cfg.Generate +{ + [Render("code_template")] + class TemplateCodeScatterRender : TemplateCodeRenderBase + { + protected override string RenderTemplateDir => GenContext.Ctx.GenArgs.TemplateCodeDir; + + protected override ELanguage GetLanguage(GenContext ctx) + { + return RenderFileUtil.GetLanguage(ctx.GenArgs.TemplateCodeDir); + } + } +} diff --git a/src/Luban.Job.Cfg/Source/Generate/TemplateDataScatterRender.cs b/src/Luban.Job.Cfg/Source/Generate/TemplateDataScatterRender.cs index 4f00ce8..e176521 100644 --- a/src/Luban.Job.Cfg/Source/Generate/TemplateDataScatterRender.cs +++ b/src/Luban.Job.Cfg/Source/Generate/TemplateDataScatterRender.cs @@ -12,12 +12,12 @@ namespace Luban.Job.Cfg.Generate { public override void Render(GenContext ctx) { - string genType = ctx.GenArgs.TemplateName; + string genType = ctx.GenArgs.TemplateDataFile; foreach (var table in ctx.ExportTables) { ctx.Tasks.Add(Task.Run(() => { - var file = RenderFileUtil.GetOutputFileName(genType, table.OutputDataFile, ctx.GenArgs.DataFileExtension); + var file = RenderFileUtil.GetOutputFileName(genType, table.OutputDataFile, ctx.GenArgs.OutputDataFileExtension); var records = ctx.Assembly.GetTableExportDataList(table); if (!FileRecordCacheManager.Ins.TryGetRecordOutputData(table, records, genType, out string md5)) { diff --git a/src/Luban.Job.Cfg/Source/Generate/TextConvertRender.cs b/src/Luban.Job.Cfg/Source/Generate/TextConvertRender.cs index ab7a247..cccc0ab 100644 --- a/src/Luban.Job.Cfg/Source/Generate/TextConvertRender.cs +++ b/src/Luban.Job.Cfg/Source/Generate/TextConvertRender.cs @@ -25,7 +25,7 @@ namespace Luban.Job.Cfg.Generate var fileName = table.IsMapTable ? record.Data.GetField(table.IndexField.Name).Apply(ToStringVisitor2.Ins).Replace("\"", "").Replace("'", "") : (++index).ToString(); - var file = RenderFileUtil.GetOutputFileName(genType, $"{dirName}/{fileName}", ctx.GenArgs.DataFileExtension); + var file = RenderFileUtil.GetOutputFileName(genType, $"{dirName}/{fileName}", ctx.GenArgs.OutputDataFileExtension); ctx.Tasks.Add(Task.Run(() => { //if (!FileRecordCacheManager.Ins.TryGetRecordOutputData(table, records, genType, out string md5)) diff --git a/src/Luban.Job.Cfg/Source/Generate/TypescriptCodeRenderBase.cs b/src/Luban.Job.Cfg/Source/Generate/TypescriptCodeRenderBase.cs index adda626..3e7cb06 100644 --- a/src/Luban.Job.Cfg/Source/Generate/TypescriptCodeRenderBase.cs +++ b/src/Luban.Job.Cfg/Source/Generate/TypescriptCodeRenderBase.cs @@ -9,14 +9,12 @@ namespace Luban.Job.Cfg.Generate { abstract class TypescriptCodeRenderBase : TemplateCodeRenderBase { - protected override string CommonRenderTemplateDir => "typescript"; - public override void Render(GenContext ctx) { string genType = ctx.GenType; var args = ctx.GenArgs; ctx.Render = this; - ctx.Lan = RenderFileUtil.GetLanguage(genType); + ctx.Lan = GetLanguage(ctx); DefAssembly.LocalAssebmly.CurrentLanguage = ctx.Lan; var lines = new List(10000); diff --git a/src/Luban.Job.Cfg/Source/JobController.cs b/src/Luban.Job.Cfg/Source/JobController.cs index b49e6f9..493a129 100644 --- a/src/Luban.Job.Cfg/Source/JobController.cs +++ b/src/Luban.Job.Cfg/Source/JobController.cs @@ -81,9 +81,14 @@ namespace Luban.Job.Cfg errMsg = "--input_l10n_text_files must be provided with --output_l10n_not_translated_text_file"; return false; } - if (genTypes.Contains("data_template") ^ !string.IsNullOrWhiteSpace(options.TemplateName)) + if (genTypes.Contains("data_template") ^ !string.IsNullOrWhiteSpace(options.TemplateDataFile)) { - errMsg = "gen_types data_template should use with --template_name"; + errMsg = "gen_types data_template should use with --template:data:file"; + return false; + } + if (genTypes.Contains("code_template") ^ !string.IsNullOrWhiteSpace(options.TemplateCodeDir)) + { + errMsg = "gen_types code_template should use with --template:code:dir"; return false; } } @@ -144,7 +149,7 @@ namespace Luban.Job.Cfg TimeZoneInfo timeZoneInfo = string.IsNullOrEmpty(args.L10nTimeZone) ? null : TimeZoneInfo.FindSystemTimeZoneById(args.L10nTimeZone); - var excludeTags = args.ExportExcludeTags.Split(',').Select(t => t.Trim().ToLowerInvariant()).Where(t => !string.IsNullOrEmpty(t)).ToList(); + var excludeTags = args.OutputExcludeTags.Split(',').Select(t => t.Trim().ToLowerInvariant()).Where(t => !string.IsNullOrEmpty(t)).ToList(); var ass = new DefAssembly(args.L10nPatchName, timeZoneInfo, excludeTags, agent); ass.Load(rawDefines, agent, args); @@ -199,6 +204,7 @@ namespace Luban.Job.Cfg Tasks = tasks, DataLoader = CheckLoadCfgDataAsync, }; + GenContext.Ctx = ctx; var render = RenderFactory.CreateRender(genType); if (render == null) @@ -210,6 +216,7 @@ namespace Luban.Job.Cfg await CheckLoadCfgDataAsync(); } render.Render(ctx); + GenContext.Ctx = null; } await Task.WhenAll(tasks.ToArray()); diff --git a/src/Luban.Job.Common/Source/Utils/RenderFileUtil.cs b/src/Luban.Job.Common/Source/Utils/RenderFileUtil.cs index 938f0f2..3c54ab6 100644 --- a/src/Luban.Job.Common/Source/Utils/RenderFileUtil.cs +++ b/src/Luban.Job.Common/Source/Utils/RenderFileUtil.cs @@ -72,7 +72,7 @@ namespace Luban.Job.Common.Utils { "javascript", ELanguage.JAVASCRIPT }, { "erlang", ELanguage.ERLANG }, { "rust", ELanguage.RUST }, - { "pb", ELanguage.PROTOBUF }, + { "protobuf", ELanguage.PROTOBUF }, }; public static ELanguage GetLanguage(string genType) @@ -84,7 +84,26 @@ namespace Luban.Job.Common.Utils return lan; } } - throw new ArgumentException($"not support output data type:{genType}"); + throw new ArgumentException($"can't guess Language from gen_type:{genType}"); + } + + public static string GetCommonTemplateDirName(ELanguage lan) + { + return lan switch + { + ELanguage.CS => "cs", + ELanguage.JAVA => "java", + ELanguage.GO => "go", + ELanguage.CPP => "cpp", + ELanguage.LUA => "lua", + ELanguage.PYTHON => "python", + ELanguage.TYPESCRIPT => "typescript", + ELanguage.JAVASCRIPT => "javascript", + ELanguage.ERLANG => "erlang", + ELanguage.RUST => "rust", + ELanguage.PROTOBUF => "protobuf", + _ => throw new Exception($"not support common template dir for lan:{lan}"), + }; } private static readonly Dictionary s_name2Suxxifx = new() diff --git a/src/Luban.Job.Common/Source/Utils/RenderUtil.cs b/src/Luban.Job.Common/Source/Utils/RenderUtil.cs deleted file mode 100644 index fff2c29..0000000 --- a/src/Luban.Job.Common/Source/Utils/RenderUtil.cs +++ /dev/null @@ -1,55 +0,0 @@ -using Luban.Job.Common.Defs; -using Luban.Job.Common.Tpl; -using Scriban; - -namespace Luban.Job.Common.Utils -{ - public static class RenderUtil - { - public static string RenderCsEnumClass(DefEnum e) - { - var template = StringTemplateManager.Ins.GetTemplate("common/cs/enum"); - var result = template.Render(e); - - return result; - } - - public static string RenderJavaEnumClass(DefEnum e) - { - var template = StringTemplateManager.Ins.GetTemplate("common/java/enum"); - var result = template.Render(e); - - return result; - } - - public static string RenderCppEnumClass(DefEnum e) - { - var template = StringTemplateManager.Ins.GetTemplate("common/cpp/enum"); - var result = template.Render(e); - return result; - } - - public static string RenderPythonEnumClass(DefEnum e) - { - var template = StringTemplateManager.Ins.GetTemplate("common/python/enum"); - var result = template.Render(e); - - return result; - } - - public static string RenderTypescriptEnumClass(DefEnum e) - { - var template = StringTemplateManager.Ins.GetTemplate("common/typescript/enum"); - var result = template.Render(e); - return result; - } - - public static string RenderRustEnumClass(DefEnum e) - { - var template = StringTemplateManager.Ins.GetTemplate("common/rust/enum"); - var result = template.Render(e); - - return result; - } - } -} diff --git a/src/Luban.Job.Db/Source/Generate/AsyncCsRender.cs b/src/Luban.Job.Db/Source/Generate/AsyncCsRender.cs index 7371c63..130f111 100644 --- a/src/Luban.Job.Db/Source/Generate/AsyncCsRender.cs +++ b/src/Luban.Job.Db/Source/Generate/AsyncCsRender.cs @@ -22,7 +22,10 @@ namespace Luban.Job.Db.Generate public string Render(DefEnum e) { - return RenderUtil.RenderCsEnumClass(e); + var template = StringTemplateManager.Ins.GetTemplate("common/cs/enum"); + var result = template.Render(e); + + return result; } public string Render(DefBean b) diff --git a/src/Luban.Job.Db/Source/Generate/SyncCsRender.cs b/src/Luban.Job.Db/Source/Generate/SyncCsRender.cs index 92e018f..0cda3b0 100644 --- a/src/Luban.Job.Db/Source/Generate/SyncCsRender.cs +++ b/src/Luban.Job.Db/Source/Generate/SyncCsRender.cs @@ -22,7 +22,10 @@ namespace Luban.Job.Db.Generate public string Render(DefEnum e) { - return RenderUtil.RenderCsEnumClass(e); + var template = StringTemplateManager.Ins.GetTemplate("common/cs/enum"); + var result = template.Render(e); + + return result; } public string Render(DefBean b) diff --git a/src/Luban.Job.Db/Source/Generate/TypescriptRender.cs b/src/Luban.Job.Db/Source/Generate/TypescriptRender.cs index d3441b7..1ecf067 100644 --- a/src/Luban.Job.Db/Source/Generate/TypescriptRender.cs +++ b/src/Luban.Job.Db/Source/Generate/TypescriptRender.cs @@ -22,7 +22,9 @@ namespace Luban.Job.Db.Generate private string Render(DefEnum e) { - return RenderUtil.RenderTypescriptEnumClass(e); + var template = StringTemplateManager.Ins.GetTemplate("common/typescript/enum"); + var result = template.Render(e); + return result; } public string Render(DefBean b) diff --git a/src/Luban.Server/Luban.Server.csproj b/src/Luban.Server/Luban.Server.csproj index 2d4a1b8..41bbd0f 100644 --- a/src/Luban.Server/Luban.Server.csproj +++ b/src/Luban.Server/Luban.Server.csproj @@ -61,7 +61,7 @@ PreserveNewest - + PreserveNewest @@ -166,16 +166,16 @@ PreserveNewest - + PreserveNewest - + PreserveNewest - + PreserveNewest - + PreserveNewest diff --git a/src/Luban.Server/Properties/launchSettings.json b/src/Luban.Server/Properties/launchSettings.json index 8c6c5a5..55839b4 100644 --- a/src/Luban.Server/Properties/launchSettings.json +++ b/src/Luban.Server/Properties/launchSettings.json @@ -18,6 +18,14 @@ "TestEncryptMemory-DisableCache": { "commandName": "Project", "commandLineArgs": "-t D:\\workspace\\luban_examples\\Projects\\Csharp_CustomTemplate_EncryptMemory\\CustomTemplate --disable_cache" + }, + "CodeTemplate-AsyncLoad-DisableCache": { + "commandName": "Project", + "commandLineArgs": "-t D:\\workspace\\luban_examples\\Projects\\Csharp_CustomTemplate_ExternalCodeTemplate\\CustomTemplate --disable_cache" + }, + "ExternalCodeTemplate": { + "commandName": "Project", + "commandLineArgs": "-t D:\\workspace\\luban_examples\\Projects\\Csharp_CustomTemplate_ExternalCodeTemplate\\CustomTemplate --disable_cache" } } } \ No newline at end of file diff --git a/src/Luban.Server/Templates/common/pb/enum.tpl b/src/Luban.Server/Templates/common/protobuf/enum.tpl similarity index 100% rename from src/Luban.Server/Templates/common/pb/enum.tpl rename to src/Luban.Server/Templates/common/protobuf/enum.tpl diff --git a/src/Luban.Server/Templates/config/pb2/all.tpl b/src/Luban.Server/Templates/config/protobuf2/all.tpl similarity index 100% rename from src/Luban.Server/Templates/config/pb2/all.tpl rename to src/Luban.Server/Templates/config/protobuf2/all.tpl diff --git a/src/Luban.Server/Templates/config/pb2/bean.tpl b/src/Luban.Server/Templates/config/protobuf2/bean.tpl similarity index 100% rename from src/Luban.Server/Templates/config/pb2/bean.tpl rename to src/Luban.Server/Templates/config/protobuf2/bean.tpl diff --git a/src/Luban.Server/Templates/config/pb2/table.tpl b/src/Luban.Server/Templates/config/protobuf2/table.tpl similarity index 100% rename from src/Luban.Server/Templates/config/pb2/table.tpl rename to src/Luban.Server/Templates/config/protobuf2/table.tpl diff --git a/src/Luban.Server/Templates/config/pb2/tables.tpl b/src/Luban.Server/Templates/config/protobuf2/tables.tpl similarity index 100% rename from src/Luban.Server/Templates/config/pb2/tables.tpl rename to src/Luban.Server/Templates/config/protobuf2/tables.tpl