【特性】新增convert_template支持
parent
c2fc86215c
commit
2021e38485
|
|
@ -12,7 +12,7 @@ namespace Luban.Job.Cfg.DataConverts
|
||||||
{
|
{
|
||||||
class LuaConvertor : DataVisitors.ToLuaLiteralVisitor
|
class LuaConvertor : DataVisitors.ToLuaLiteralVisitor
|
||||||
{
|
{
|
||||||
//public static new LuaConvertor Ins { get; } = new();
|
public static new LuaConvertor Ins { get; } = new();
|
||||||
|
|
||||||
private string _indentStr = "";
|
private string _indentStr = "";
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -20,7 +20,7 @@ namespace Luban.Job.Cfg
|
||||||
[Option("output_data_dir", Required = false, HelpText = "output data directory")]
|
[Option("output_data_dir", Required = false, HelpText = "output data directory")]
|
||||||
public string OutputDataDir { get; set; }
|
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; }
|
public string InputConvertDataDir { get; set; }
|
||||||
|
|
||||||
[Option("output:tables", Required = false, HelpText = "override tables in export group with this list")]
|
[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")]
|
[Option("template:code:dir", Required = false, HelpText = "code template dir. use with gen_types=code_template")]
|
||||||
public string TemplateCodeDir { get; set; }
|
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")]
|
[Option("l10n:timezone", Required = false, HelpText = "timezone")]
|
||||||
public string L10nTimeZone { get; set; }
|
public string L10nTimeZone { get; set; }
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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 });
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -8,7 +8,7 @@ using System.Threading.Tasks;
|
||||||
namespace Luban.Job.Cfg.Generate
|
namespace Luban.Job.Cfg.Generate
|
||||||
{
|
{
|
||||||
[Render("data_template")]
|
[Render("data_template")]
|
||||||
class TemplateDataScatterRender : DataRenderBase
|
class TemplateDataRender : DataRenderBase
|
||||||
{
|
{
|
||||||
public override void Render(GenContext ctx)
|
public override void Render(GenContext ctx)
|
||||||
{
|
{
|
||||||
|
|
@ -25,7 +25,7 @@ namespace Luban.Job.Cfg.Generate
|
||||||
var fileName = table.IsMapTable ?
|
var fileName = table.IsMapTable ?
|
||||||
record.Data.GetField(table.IndexField.Name).Apply(ToStringVisitor2.Ins).Replace("\"", "").Replace("'", "")
|
record.Data.GetField(table.IndexField.Name).Apply(ToStringVisitor2.Ins).Replace("\"", "").Replace("'", "")
|
||||||
: (++index).ToString();
|
: (++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(() =>
|
ctx.Tasks.Add(Task.Run(() =>
|
||||||
{
|
{
|
||||||
//if (!FileRecordCacheManager.Ins.TryGetRecordOutputData(table, records, genType, out string md5))
|
//if (!FileRecordCacheManager.Ins.TryGetRecordOutputData(table, records, genType, out string md5))
|
||||||
|
|
|
||||||
|
|
@ -86,6 +86,11 @@ namespace Luban.Job.Cfg
|
||||||
errMsg = "gen_types data_template should use with --template:data:file";
|
errMsg = "gen_types data_template should use with --template:data:file";
|
||||||
return false;
|
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))
|
if (genTypes.Contains("code_template") ^ !string.IsNullOrWhiteSpace(options.TemplateCodeDir))
|
||||||
{
|
{
|
||||||
errMsg = "gen_types code_template should use with --template:code:dir";
|
errMsg = "gen_types code_template should use with --template:code:dir";
|
||||||
|
|
|
||||||
|
|
@ -27,7 +27,7 @@ namespace Luban.Job.Cfg
|
||||||
return template.Render(ctx);
|
return template.Render(ctx);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static string RenderData(this Template template, DefTable table, List<DBean> exportDatas, Dictionary<string, object> extraModels = null)
|
public static string RenderDatas(this Template template, DefTable table, List<DBean> exportDatas, Dictionary<string, object> extraModels = null)
|
||||||
{
|
{
|
||||||
var ctx = new TemplateContext();
|
var ctx = new TemplateContext();
|
||||||
|
|
||||||
|
|
@ -47,5 +47,27 @@ namespace Luban.Job.Cfg
|
||||||
ctx.PushGlobal(env);
|
ctx.PushGlobal(env);
|
||||||
return template.Render(ctx);
|
return template.Render(ctx);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public static string RenderData(this Template template, DefTable table, DBean data, Dictionary<string, object> 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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -37,7 +37,7 @@ namespace Luban.Job.Cfg.Utils
|
||||||
}
|
}
|
||||||
case "convert_lua":
|
case "convert_lua":
|
||||||
{
|
{
|
||||||
return new LuaConvertor().ExportRecord(table, record);
|
return LuaConvertor.Ins.ExportRecord(table, record);
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -25,7 +25,7 @@ namespace Luban.Job.Cfg.Utils
|
||||||
public static string ToTemplateOutputData(DefTable table, List<Record> records, string templateName)
|
public static string ToTemplateOutputData(DefTable table, List<Record> records, string templateName)
|
||||||
{
|
{
|
||||||
Template template = StringTemplateManager.Ins.GetTemplate($"config/data/{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<Record> records, string dataType)
|
public static object ToOutputData(DefTable table, List<Record> records, string dataType)
|
||||||
|
|
|
||||||
|
|
@ -26,6 +26,10 @@
|
||||||
"ExternalCodeTemplate": {
|
"ExternalCodeTemplate": {
|
||||||
"commandName": "Project",
|
"commandName": "Project",
|
||||||
"commandLineArgs": "-t D:\\workspace\\luban_examples\\Projects\\Csharp_CustomTemplate_ExternalCodeTemplate\\CustomTemplate --disable_cache"
|
"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"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Loading…
Reference in New Issue