diff --git a/src/Luban.Job.Cfg/Source/DataConverts/LuaConvertor.cs b/src/Luban.Job.Cfg/Source/DataConverts/LuaConvertor.cs index 454a45c..3814a52 100644 --- a/src/Luban.Job.Cfg/Source/DataConverts/LuaConvertor.cs +++ b/src/Luban.Job.Cfg/Source/DataConverts/LuaConvertor.cs @@ -12,7 +12,7 @@ namespace Luban.Job.Cfg.DataConverts { class LuaConvertor : DataVisitors.ToLuaLiteralVisitor { - //public static new LuaConvertor Ins { get; } = new(); + public static new LuaConvertor Ins { get; } = new(); private string _indentStr = ""; diff --git a/src/Luban.Job.Cfg/Source/GenArgs.cs b/src/Luban.Job.Cfg/Source/GenArgs.cs index d34272a..da34138 100644 --- a/src/Luban.Job.Cfg/Source/GenArgs.cs +++ b/src/Luban.Job.Cfg/Source/GenArgs.cs @@ -20,7 +20,7 @@ namespace Luban.Job.Cfg [Option("output_data_dir", Required = false, HelpText = "output data directory")] public string OutputDataDir { get; set; } - [Option("input:convert_data_dir", Required = false, HelpText = "override input data dir with convert data dir")] + [Option("input:convert:data_dir", Required = false, HelpText = "override input data dir with convert data dir")] public string InputConvertDataDir { get; set; } [Option("output:tables", Required = false, HelpText = "override tables in export group with this list")] @@ -53,6 +53,12 @@ namespace Luban.Job.Cfg [Option("template:code:dir", Required = false, HelpText = "code template dir. use with gen_types=code_template")] public string TemplateCodeDir { get; set; } + [Option("template:convert:file", Required = false, HelpText = "convert template file name. use with gen_tpes=convert_template")] + public string TemplateConvertFile { get; set; } + + [Option("output:convert:file_extension", Required = false, HelpText = "output convert file extension. default guess by convert template name")] + public string OutputConvertFileExtension { get; set; } + [Option("l10n:timezone", Required = false, HelpText = "timezone")] public string L10nTimeZone { get; set; } diff --git a/src/Luban.Job.Cfg/Source/Generate/TemplateConvertRender.cs b/src/Luban.Job.Cfg/Source/Generate/TemplateConvertRender.cs new file mode 100644 index 0000000..3b9e13f --- /dev/null +++ b/src/Luban.Job.Cfg/Source/Generate/TemplateConvertRender.cs @@ -0,0 +1,48 @@ +using Luban.Common.Protos; +using Luban.Job.Cfg.Cache; +using Luban.Job.Cfg.DataSources; +using Luban.Job.Cfg.DataVisitors; +using Luban.Job.Cfg.Defs; +using Luban.Job.Cfg.Utils; +using Luban.Job.Common.Generate; +using Luban.Job.Common.Tpl; +using Luban.Job.Common.Utils; +using Scriban; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; + +namespace Luban.Job.Cfg.Generate +{ + [Render("convert_template")] + class TemplateConvertRender : DataRenderBase + { + public override void Render(GenContext ctx) + { + string genType = ctx.GenType; + + Template template = StringTemplateManager.Ins.GetTemplate($"config/convert/{ctx.GenArgs.TemplateConvertFile}"); + + foreach (var table in ctx.ExportTables) + { + var records = ctx.Assembly.GetTableAllDataList(table); + int index = 0; + string dirName = table.FullName; + foreach (var record in records) + { + ctx.Tasks.Add(Task.Run(() => + { + 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.OutputConvertFileExtension); + var content = template.RenderData(table, record.Data); + var md5 = CacheFileUtil.GenStringOrBytesMd5AndAddCache(file, content); + FileRecordCacheManager.Ins.AddCachedRecordOutputData(table, records, genType, md5); + ctx.GenDataFilesInOutputDataDir.Add(new FileInfo() { FilePath = file, MD5 = md5 }); + })); + } + } + } + } +} diff --git a/src/Luban.Job.Cfg/Source/Generate/TemplateDataScatterRender.cs b/src/Luban.Job.Cfg/Source/Generate/TemplateDataRender.cs similarity index 96% rename from src/Luban.Job.Cfg/Source/Generate/TemplateDataScatterRender.cs rename to src/Luban.Job.Cfg/Source/Generate/TemplateDataRender.cs index e176521..5a589a1 100644 --- a/src/Luban.Job.Cfg/Source/Generate/TemplateDataScatterRender.cs +++ b/src/Luban.Job.Cfg/Source/Generate/TemplateDataRender.cs @@ -8,7 +8,7 @@ using System.Threading.Tasks; namespace Luban.Job.Cfg.Generate { [Render("data_template")] - class TemplateDataScatterRender : DataRenderBase + class TemplateDataRender : DataRenderBase { public override void Render(GenContext ctx) { diff --git a/src/Luban.Job.Cfg/Source/Generate/TextConvertRender.cs b/src/Luban.Job.Cfg/Source/Generate/TextConvertRender.cs index cccc0ab..8691209 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.OutputDataFileExtension); + var file = RenderFileUtil.GetOutputFileName(genType, $"{dirName}/{fileName}", ctx.GenArgs.OutputConvertFileExtension); ctx.Tasks.Add(Task.Run(() => { //if (!FileRecordCacheManager.Ins.TryGetRecordOutputData(table, records, genType, out string md5)) diff --git a/src/Luban.Job.Cfg/Source/JobController.cs b/src/Luban.Job.Cfg/Source/JobController.cs index d95aafc..80836dc 100644 --- a/src/Luban.Job.Cfg/Source/JobController.cs +++ b/src/Luban.Job.Cfg/Source/JobController.cs @@ -86,6 +86,11 @@ namespace Luban.Job.Cfg errMsg = "gen_types data_template should use with --template:data:file"; return false; } + if (genTypes.Contains("convert_template") ^ !string.IsNullOrWhiteSpace(options.TemplateConvertFile)) + { + errMsg = "gen_types convert_template should use with --template:convert:file"; + return false; + } if (genTypes.Contains("code_template") ^ !string.IsNullOrWhiteSpace(options.TemplateCodeDir)) { errMsg = "gen_types code_template should use with --template:code:dir"; diff --git a/src/Luban.Job.Cfg/Source/RenderExtension.cs b/src/Luban.Job.Cfg/Source/RenderExtension.cs index 2de71a0..b828059 100644 --- a/src/Luban.Job.Cfg/Source/RenderExtension.cs +++ b/src/Luban.Job.Cfg/Source/RenderExtension.cs @@ -27,7 +27,7 @@ namespace Luban.Job.Cfg return template.Render(ctx); } - public static string RenderData(this Template template, DefTable table, List exportDatas, Dictionary extraModels = null) + public static string RenderDatas(this Template template, DefTable table, List exportDatas, Dictionary extraModels = null) { var ctx = new TemplateContext(); @@ -47,5 +47,27 @@ namespace Luban.Job.Cfg ctx.PushGlobal(env); return template.Render(ctx); } + + + public static string RenderData(this Template template, DefTable table, DBean data, Dictionary extraModels = null) + { + var ctx = new TemplateContext(); + + var env = new DTypeTemplateExtends + { + ["table"] = table, + ["data"] = data, + ["assembly"] = DefAssembly.LocalAssebmly, + }; + if (extraModels != null) + { + foreach ((var k, var v) in extraModels) + { + env[k] = v; + } + } + ctx.PushGlobal(env); + return template.Render(ctx); + } } } diff --git a/src/Luban.Job.Cfg/Source/Utils/DataConvertUtil.cs b/src/Luban.Job.Cfg/Source/Utils/DataConvertUtil.cs index 4e4188c..a0db009 100644 --- a/src/Luban.Job.Cfg/Source/Utils/DataConvertUtil.cs +++ b/src/Luban.Job.Cfg/Source/Utils/DataConvertUtil.cs @@ -37,7 +37,7 @@ namespace Luban.Job.Cfg.Utils } case "convert_lua": { - return new LuaConvertor().ExportRecord(table, record); + return LuaConvertor.Ins.ExportRecord(table, record); } default: { diff --git a/src/Luban.Job.Cfg/Source/Utils/DataExporterUtil.cs b/src/Luban.Job.Cfg/Source/Utils/DataExporterUtil.cs index 47387e7..dda06bd 100644 --- a/src/Luban.Job.Cfg/Source/Utils/DataExporterUtil.cs +++ b/src/Luban.Job.Cfg/Source/Utils/DataExporterUtil.cs @@ -25,7 +25,7 @@ namespace Luban.Job.Cfg.Utils public static string ToTemplateOutputData(DefTable table, List records, string templateName) { Template template = StringTemplateManager.Ins.GetTemplate($"config/data/{templateName}"); - return template.RenderData(table, records.Select(r => r.Data).ToList()); + return template.RenderDatas(table, records.Select(r => r.Data).ToList()); } public static object ToOutputData(DefTable table, List records, string dataType) diff --git a/src/Luban.Server/Properties/launchSettings.json b/src/Luban.Server/Properties/launchSettings.json index 55839b4..0c5fa8f 100644 --- a/src/Luban.Server/Properties/launchSettings.json +++ b/src/Luban.Server/Properties/launchSettings.json @@ -26,6 +26,10 @@ "ExternalCodeTemplate": { "commandName": "Project", "commandLineArgs": "-t D:\\workspace\\luban_examples\\Projects\\Csharp_CustomTemplate_ExternalCodeTemplate\\CustomTemplate --disable_cache" + }, + "convert_template": { + "commandName": "Project", + "commandLineArgs": "-t D:\\workspace\\luban_examples\\Projects\\ConvertTemplates\\CustomTemplates" } } } \ No newline at end of file