【重构】重构json和lua转化为literal的代码
parent
47ced0fbbb
commit
125504e5a7
|
|
@ -0,0 +1,130 @@
|
||||||
|
using Luban.Job.Cfg.Datas;
|
||||||
|
using Luban.Job.Cfg.Defs;
|
||||||
|
using Luban.Job.Cfg.Utils;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
|
namespace Luban.Job.Cfg.DataVisitors
|
||||||
|
{
|
||||||
|
class ToErlangLiteralVisitor : ToLiteralVisitorBase
|
||||||
|
{
|
||||||
|
public static ToErlangLiteralVisitor Ins { get; } = new();
|
||||||
|
|
||||||
|
public override string Accept(DText type)
|
||||||
|
{
|
||||||
|
var ass = DefAssembly.LocalAssebmly as DefAssembly;
|
||||||
|
return $"{{\"{DText.KEY_NAME}\":\"{type.Key}\",\"{DText.TEXT_NAME}\":\"{DataUtil.EscapeString(type.GetText(ass.ExportTextTable, ass.NotConvertTextSet))}\"}}";
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string Accept(DBean type)
|
||||||
|
{
|
||||||
|
var x = new StringBuilder();
|
||||||
|
var bean = type.ImplType;
|
||||||
|
if (bean.IsAbstractType)
|
||||||
|
{
|
||||||
|
x.Append($"{{ \"_name\":\"{type.ImplType.Name}\",");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
x.Append('{');
|
||||||
|
}
|
||||||
|
|
||||||
|
int index = 0;
|
||||||
|
foreach (var f in type.Fields)
|
||||||
|
{
|
||||||
|
if (index >= 1)
|
||||||
|
{
|
||||||
|
x.Append(',');
|
||||||
|
}
|
||||||
|
var defField = type.ImplType.HierarchyFields[index++];
|
||||||
|
x.Append('\"').Append(defField.Name).Append('\"').Append(':');
|
||||||
|
if (f != null)
|
||||||
|
{
|
||||||
|
x.Append(f.Apply(this));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
x.Append("null");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
x.Append('}');
|
||||||
|
return x.ToString();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
protected void Append(List<DType> datas, StringBuilder x)
|
||||||
|
{
|
||||||
|
x.Append('[');
|
||||||
|
int index = 0;
|
||||||
|
foreach (var e in datas)
|
||||||
|
{
|
||||||
|
if (index > 0)
|
||||||
|
{
|
||||||
|
x.Append(',');
|
||||||
|
}
|
||||||
|
++index;
|
||||||
|
x.Append(e.Apply(this));
|
||||||
|
}
|
||||||
|
x.Append(']');
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string Accept(DArray type)
|
||||||
|
{
|
||||||
|
var x = new StringBuilder();
|
||||||
|
Append(type.Datas, x);
|
||||||
|
return x.ToString();
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string Accept(DList type)
|
||||||
|
{
|
||||||
|
var x = new StringBuilder();
|
||||||
|
Append(type.Datas, x);
|
||||||
|
return x.ToString();
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string Accept(DSet type)
|
||||||
|
{
|
||||||
|
var x = new StringBuilder();
|
||||||
|
Append(type.Datas, x);
|
||||||
|
return x.ToString();
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string Accept(DMap type)
|
||||||
|
{
|
||||||
|
var x = new StringBuilder();
|
||||||
|
x.Append('{');
|
||||||
|
int index = 0;
|
||||||
|
foreach (var e in type.Datas)
|
||||||
|
{
|
||||||
|
if (index > 0)
|
||||||
|
{
|
||||||
|
x.Append(',');
|
||||||
|
}
|
||||||
|
++index;
|
||||||
|
x.Append('"').Append(e.Key.ToString()).Append('"');
|
||||||
|
x.Append(':');
|
||||||
|
x.Append(e.Value.Apply(this));
|
||||||
|
}
|
||||||
|
x.Append('}');
|
||||||
|
return x.ToString();
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string Accept(DVector2 type)
|
||||||
|
{
|
||||||
|
var v = type.Value;
|
||||||
|
return $"{{\"x\":{v.X},\"y\":{v.Y}}}";
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string Accept(DVector3 type)
|
||||||
|
{
|
||||||
|
var v = type.Value;
|
||||||
|
return $"{{\"x\":{v.X},\"y\":{v.Y},\"z\":{v.Z}}}";
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string Accept(DVector4 type)
|
||||||
|
{
|
||||||
|
var v = type.Value;
|
||||||
|
return $"{{\"x\":{v.X},\"y\":{v.Y},\"z\":{v.Z},\"w\":{v.W}}}";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,130 @@
|
||||||
|
using Luban.Job.Cfg.Datas;
|
||||||
|
using Luban.Job.Cfg.Defs;
|
||||||
|
using Luban.Job.Cfg.Utils;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
|
namespace Luban.Job.Cfg.DataVisitors
|
||||||
|
{
|
||||||
|
class ToJsonLiteralVisitor : ToLiteralVisitorBase
|
||||||
|
{
|
||||||
|
public static ToJsonLiteralVisitor Ins { get; } = new();
|
||||||
|
|
||||||
|
public override string Accept(DText type)
|
||||||
|
{
|
||||||
|
var ass = DefAssembly.LocalAssebmly as DefAssembly;
|
||||||
|
return $"{{\"{DText.KEY_NAME}\":\"{type.Key}\",\"{DText.TEXT_NAME}\":\"{DataUtil.EscapeString(type.GetText(ass.ExportTextTable, ass.NotConvertTextSet))}\"}}";
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string Accept(DBean type)
|
||||||
|
{
|
||||||
|
var x = new StringBuilder();
|
||||||
|
var bean = type.ImplType;
|
||||||
|
if (bean.IsAbstractType)
|
||||||
|
{
|
||||||
|
x.Append($"{{ \"_name\":\"{type.ImplType.Name}\",");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
x.Append('{');
|
||||||
|
}
|
||||||
|
|
||||||
|
int index = 0;
|
||||||
|
foreach (var f in type.Fields)
|
||||||
|
{
|
||||||
|
if (index >= 1)
|
||||||
|
{
|
||||||
|
x.Append(',');
|
||||||
|
}
|
||||||
|
var defField = type.ImplType.HierarchyExportFields[index++];
|
||||||
|
x.Append('\"').Append(defField.Name).Append('\"').Append(':');
|
||||||
|
if (f != null)
|
||||||
|
{
|
||||||
|
x.Append(f.Apply(this));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
x.Append("null");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
x.Append('}');
|
||||||
|
return x.ToString();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
protected virtual void Append(List<DType> datas, StringBuilder x)
|
||||||
|
{
|
||||||
|
x.Append('[');
|
||||||
|
int index = 0;
|
||||||
|
foreach (var e in datas)
|
||||||
|
{
|
||||||
|
if (index > 0)
|
||||||
|
{
|
||||||
|
x.Append(',');
|
||||||
|
}
|
||||||
|
++index;
|
||||||
|
x.Append(e.Apply(this));
|
||||||
|
}
|
||||||
|
x.Append(']');
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string Accept(DArray type)
|
||||||
|
{
|
||||||
|
var x = new StringBuilder();
|
||||||
|
Append(type.Datas, x);
|
||||||
|
return x.ToString();
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string Accept(DList type)
|
||||||
|
{
|
||||||
|
var x = new StringBuilder();
|
||||||
|
Append(type.Datas, x);
|
||||||
|
return x.ToString();
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string Accept(DSet type)
|
||||||
|
{
|
||||||
|
var x = new StringBuilder();
|
||||||
|
Append(type.Datas, x);
|
||||||
|
return x.ToString();
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string Accept(DMap type)
|
||||||
|
{
|
||||||
|
var x = new StringBuilder();
|
||||||
|
x.Append('{');
|
||||||
|
int index = 0;
|
||||||
|
foreach (var e in type.Datas)
|
||||||
|
{
|
||||||
|
if (index > 0)
|
||||||
|
{
|
||||||
|
x.Append(',');
|
||||||
|
}
|
||||||
|
++index;
|
||||||
|
x.Append('"').Append(e.Key.Apply(ToJsonPropertyNameVisitor.Ins)).Append('"');
|
||||||
|
x.Append(':');
|
||||||
|
x.Append(e.Value.Apply(this));
|
||||||
|
}
|
||||||
|
x.Append('}');
|
||||||
|
return x.ToString();
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string Accept(DVector2 type)
|
||||||
|
{
|
||||||
|
var v = type.Value;
|
||||||
|
return $"{{\"x\":{v.X},\"y\":{v.Y}}}";
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string Accept(DVector3 type)
|
||||||
|
{
|
||||||
|
var v = type.Value;
|
||||||
|
return $"{{\"x\":{v.X},\"y\":{v.Y},\"z\":{v.Z}}}";
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string Accept(DVector4 type)
|
||||||
|
{
|
||||||
|
var v = type.Value;
|
||||||
|
return $"{{\"x\":{v.X},\"y\":{v.Y},\"z\":{v.Z},\"w\":{v.W}}}";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,100 @@
|
||||||
|
using Luban.Job.Cfg.Datas;
|
||||||
|
using Luban.Job.Cfg.Defs;
|
||||||
|
using Luban.Job.Cfg.Utils;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
|
namespace Luban.Job.Cfg.DataVisitors
|
||||||
|
{
|
||||||
|
abstract class ToLiteralVisitorBase : IDataFuncVisitor<string>
|
||||||
|
{
|
||||||
|
public string Accept(DBool type)
|
||||||
|
{
|
||||||
|
return type.Value ? "true" : "false";
|
||||||
|
}
|
||||||
|
|
||||||
|
public string Accept(DByte type)
|
||||||
|
{
|
||||||
|
return type.Value.ToString();
|
||||||
|
}
|
||||||
|
|
||||||
|
public string Accept(DShort type)
|
||||||
|
{
|
||||||
|
return type.Value.ToString();
|
||||||
|
}
|
||||||
|
|
||||||
|
public string Accept(DFshort type)
|
||||||
|
{
|
||||||
|
return type.Value.ToString();
|
||||||
|
}
|
||||||
|
|
||||||
|
public string Accept(DInt type)
|
||||||
|
{
|
||||||
|
return type.Value.ToString();
|
||||||
|
}
|
||||||
|
|
||||||
|
public string Accept(DFint type)
|
||||||
|
{
|
||||||
|
return type.Value.ToString();
|
||||||
|
}
|
||||||
|
|
||||||
|
public string Accept(DLong type)
|
||||||
|
{
|
||||||
|
return type.Value.ToString();
|
||||||
|
}
|
||||||
|
|
||||||
|
public string Accept(DFlong type)
|
||||||
|
{
|
||||||
|
return type.Value.ToString();
|
||||||
|
}
|
||||||
|
|
||||||
|
public string Accept(DFloat type)
|
||||||
|
{
|
||||||
|
return type.Value.ToString();
|
||||||
|
}
|
||||||
|
|
||||||
|
public string Accept(DDouble type)
|
||||||
|
{
|
||||||
|
return type.Value.ToString();
|
||||||
|
}
|
||||||
|
|
||||||
|
public string Accept(DEnum type)
|
||||||
|
{
|
||||||
|
return type.Value.ToString();
|
||||||
|
}
|
||||||
|
|
||||||
|
public virtual string Accept(DString type)
|
||||||
|
{
|
||||||
|
return "\"" + DataUtil.EscapeString(type.Value) + "\"";
|
||||||
|
}
|
||||||
|
|
||||||
|
public string Accept(DBytes type)
|
||||||
|
{
|
||||||
|
throw new System.NotSupportedException();
|
||||||
|
}
|
||||||
|
|
||||||
|
public abstract string Accept(DText type);
|
||||||
|
|
||||||
|
public abstract string Accept(DBean type);
|
||||||
|
|
||||||
|
public abstract string Accept(DArray type);
|
||||||
|
|
||||||
|
public abstract string Accept(DList type);
|
||||||
|
|
||||||
|
public abstract string Accept(DSet type);
|
||||||
|
|
||||||
|
public abstract string Accept(DMap type);
|
||||||
|
|
||||||
|
public abstract string Accept(DVector2 type);
|
||||||
|
|
||||||
|
public abstract string Accept(DVector3 type);
|
||||||
|
|
||||||
|
public abstract string Accept(DVector4 type);
|
||||||
|
|
||||||
|
public string Accept(DDateTime type)
|
||||||
|
{
|
||||||
|
var ass = DefAssembly.LocalAssebmly as DefAssembly;
|
||||||
|
return type.GetUnixTime(ass.TimeZone).ToString();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,119 @@
|
||||||
|
using Luban.Job.Cfg.Datas;
|
||||||
|
using Luban.Job.Cfg.Defs;
|
||||||
|
using Luban.Job.Cfg.Utils;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
|
namespace Luban.Job.Cfg.DataVisitors
|
||||||
|
{
|
||||||
|
class ToLuaLiteralVisitor : ToLiteralVisitorBase
|
||||||
|
{
|
||||||
|
public static ToLuaLiteralVisitor Ins { get; } = new();
|
||||||
|
|
||||||
|
public override string Accept(DText type)
|
||||||
|
{
|
||||||
|
var ass = DefAssembly.LocalAssebmly as DefAssembly;
|
||||||
|
return $"{{{DText.KEY_NAME}='{type.Key}',{DText.TEXT_NAME}=\"{DataUtil.EscapeString(type.GetText(ass.ExportTextTable, ass.NotConvertTextSet))}\"}}";
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string Accept(DBean type)
|
||||||
|
{
|
||||||
|
var x = new StringBuilder();
|
||||||
|
var bean = type.ImplType;
|
||||||
|
if (bean.IsAbstractType)
|
||||||
|
{
|
||||||
|
x.Append($"{{ _name='{type.ImplType.Name}',");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
x.Append('{');
|
||||||
|
}
|
||||||
|
|
||||||
|
int index = 0;
|
||||||
|
foreach (var f in type.Fields)
|
||||||
|
{
|
||||||
|
var defField = type.ImplType.HierarchyExportFields[index++];
|
||||||
|
x.Append(defField.Name).Append('=');
|
||||||
|
if (f != null)
|
||||||
|
{
|
||||||
|
x.Append(f.Apply(this));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
x.Append("nil");
|
||||||
|
}
|
||||||
|
x.Append(',');
|
||||||
|
}
|
||||||
|
x.Append('}');
|
||||||
|
return x.ToString();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
protected void Append(List<DType> datas, StringBuilder x)
|
||||||
|
{
|
||||||
|
x.Append('{');
|
||||||
|
foreach (var e in datas)
|
||||||
|
{
|
||||||
|
x.Append(e.Apply(this));
|
||||||
|
x.Append(',');
|
||||||
|
}
|
||||||
|
x.Append('}');
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string Accept(DArray type)
|
||||||
|
{
|
||||||
|
var x = new StringBuilder();
|
||||||
|
Append(type.Datas, x);
|
||||||
|
return x.ToString();
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string Accept(DList type)
|
||||||
|
{
|
||||||
|
var x = new StringBuilder();
|
||||||
|
Append(type.Datas, x);
|
||||||
|
return x.ToString();
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string Accept(DSet type)
|
||||||
|
{
|
||||||
|
var x = new StringBuilder();
|
||||||
|
Append(type.Datas, x);
|
||||||
|
return x.ToString();
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string Accept(DMap type)
|
||||||
|
{
|
||||||
|
var x = new StringBuilder();
|
||||||
|
x.Append('{');
|
||||||
|
foreach (var e in type.Datas)
|
||||||
|
{
|
||||||
|
x.Append('[');
|
||||||
|
x.Append(e.Key.Apply(this));
|
||||||
|
x.Append(']');
|
||||||
|
x.Append('=');
|
||||||
|
x.Append(e.Value.Apply(this));
|
||||||
|
x.Append(',');
|
||||||
|
}
|
||||||
|
x.Append('}');
|
||||||
|
return x.ToString();
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string Accept(DVector2 type)
|
||||||
|
{
|
||||||
|
var v = type.Value;
|
||||||
|
return $"{{x={v.X},y={v.Y}}}";
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string Accept(DVector3 type)
|
||||||
|
{
|
||||||
|
var v = type.Value;
|
||||||
|
return $"{{x={v.X},y={v.Y},z={v.Z}}}";
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string Accept(DVector4 type)
|
||||||
|
{
|
||||||
|
var v = type.Value;
|
||||||
|
return $"{{x={v.X},y={v.Y},z={v.Z},w={v.W}}}";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -6,82 +6,17 @@ using System.Text;
|
||||||
|
|
||||||
namespace Luban.Job.Cfg.DataVisitors
|
namespace Luban.Job.Cfg.DataVisitors
|
||||||
{
|
{
|
||||||
class ToJsonStringVisitor : IDataFuncVisitor<string>
|
class ToPythonLiteralVisitor : ToLiteralVisitorBase
|
||||||
{
|
{
|
||||||
public static ToJsonStringVisitor Ins { get; } = new();
|
public static ToPythonLiteralVisitor Ins { get; } = new();
|
||||||
|
|
||||||
public string Accept(DBool type)
|
public override string Accept(DText type)
|
||||||
{
|
|
||||||
return type.Value ? "true" : "false";
|
|
||||||
}
|
|
||||||
|
|
||||||
public string Accept(DByte type)
|
|
||||||
{
|
|
||||||
return type.Value.ToString();
|
|
||||||
}
|
|
||||||
|
|
||||||
public string Accept(DShort type)
|
|
||||||
{
|
|
||||||
return type.Value.ToString();
|
|
||||||
}
|
|
||||||
|
|
||||||
public string Accept(DFshort type)
|
|
||||||
{
|
|
||||||
return type.Value.ToString();
|
|
||||||
}
|
|
||||||
|
|
||||||
public string Accept(DInt type)
|
|
||||||
{
|
|
||||||
return type.Value.ToString();
|
|
||||||
}
|
|
||||||
|
|
||||||
public string Accept(DFint type)
|
|
||||||
{
|
|
||||||
return type.Value.ToString();
|
|
||||||
}
|
|
||||||
|
|
||||||
public string Accept(DLong type)
|
|
||||||
{
|
|
||||||
return type.Value.ToString();
|
|
||||||
}
|
|
||||||
|
|
||||||
public string Accept(DFlong type)
|
|
||||||
{
|
|
||||||
return type.Value.ToString();
|
|
||||||
}
|
|
||||||
|
|
||||||
public string Accept(DFloat type)
|
|
||||||
{
|
|
||||||
return type.Value.ToString();
|
|
||||||
}
|
|
||||||
|
|
||||||
public string Accept(DDouble type)
|
|
||||||
{
|
|
||||||
return type.Value.ToString();
|
|
||||||
}
|
|
||||||
|
|
||||||
public string Accept(DEnum type)
|
|
||||||
{
|
|
||||||
return type.Value.ToString();
|
|
||||||
}
|
|
||||||
|
|
||||||
public string Accept(DString type)
|
|
||||||
{
|
|
||||||
return "\"" + DataUtil.EscapeString(type.Value) + "\"";
|
|
||||||
}
|
|
||||||
|
|
||||||
public string Accept(DBytes type)
|
|
||||||
{
|
|
||||||
throw new System.NotSupportedException();
|
|
||||||
}
|
|
||||||
|
|
||||||
public virtual string Accept(DText type)
|
|
||||||
{
|
{
|
||||||
var ass = DefAssembly.LocalAssebmly as DefAssembly;
|
var ass = DefAssembly.LocalAssebmly as DefAssembly;
|
||||||
return $"{{\"{DText.KEY_NAME}\":\"{type.Key}\",\"{DText.TEXT_NAME}\":\"{DataUtil.EscapeString(type.GetText(ass.ExportTextTable, ass.NotConvertTextSet))}\"}}";
|
return $"{{\"{DText.KEY_NAME}\":\"{type.Key}\",\"{DText.TEXT_NAME}\":\"{DataUtil.EscapeString(type.GetText(ass.ExportTextTable, ass.NotConvertTextSet))}\"}}";
|
||||||
}
|
}
|
||||||
|
|
||||||
public virtual string Accept(DBean type)
|
public override string Accept(DBean type)
|
||||||
{
|
{
|
||||||
var x = new StringBuilder();
|
var x = new StringBuilder();
|
||||||
var bean = type.ImplType;
|
var bean = type.ImplType;
|
||||||
|
|
@ -101,7 +36,7 @@ namespace Luban.Job.Cfg.DataVisitors
|
||||||
{
|
{
|
||||||
x.Append(',');
|
x.Append(',');
|
||||||
}
|
}
|
||||||
var defField = type.ImplType.HierarchyFields[index++];
|
var defField = type.ImplType.HierarchyExportFields[index++];
|
||||||
x.Append('\"').Append(defField.Name).Append('\"').Append(':');
|
x.Append('\"').Append(defField.Name).Append('\"').Append(':');
|
||||||
if (f != null)
|
if (f != null)
|
||||||
{
|
{
|
||||||
|
|
@ -133,28 +68,28 @@ namespace Luban.Job.Cfg.DataVisitors
|
||||||
x.Append(']');
|
x.Append(']');
|
||||||
}
|
}
|
||||||
|
|
||||||
public string Accept(DArray type)
|
public override string Accept(DArray type)
|
||||||
{
|
{
|
||||||
var x = new StringBuilder();
|
var x = new StringBuilder();
|
||||||
Append(type.Datas, x);
|
Append(type.Datas, x);
|
||||||
return x.ToString();
|
return x.ToString();
|
||||||
}
|
}
|
||||||
|
|
||||||
public string Accept(DList type)
|
public override string Accept(DList type)
|
||||||
{
|
{
|
||||||
var x = new StringBuilder();
|
var x = new StringBuilder();
|
||||||
Append(type.Datas, x);
|
Append(type.Datas, x);
|
||||||
return x.ToString();
|
return x.ToString();
|
||||||
}
|
}
|
||||||
|
|
||||||
public string Accept(DSet type)
|
public override string Accept(DSet type)
|
||||||
{
|
{
|
||||||
var x = new StringBuilder();
|
var x = new StringBuilder();
|
||||||
Append(type.Datas, x);
|
Append(type.Datas, x);
|
||||||
return x.ToString();
|
return x.ToString();
|
||||||
}
|
}
|
||||||
|
|
||||||
public virtual string Accept(DMap type)
|
public override string Accept(DMap type)
|
||||||
{
|
{
|
||||||
var x = new StringBuilder();
|
var x = new StringBuilder();
|
||||||
x.Append('{');
|
x.Append('{');
|
||||||
|
|
@ -174,28 +109,22 @@ namespace Luban.Job.Cfg.DataVisitors
|
||||||
return x.ToString();
|
return x.ToString();
|
||||||
}
|
}
|
||||||
|
|
||||||
public virtual string Accept(DVector2 type)
|
public override string Accept(DVector2 type)
|
||||||
{
|
{
|
||||||
var v = type.Value;
|
var v = type.Value;
|
||||||
return $"{{\"x\":{v.X},\"y\":{v.Y}}}";
|
return $"{{\"x\":{v.X},\"y\":{v.Y}}}";
|
||||||
}
|
}
|
||||||
|
|
||||||
public virtual string Accept(DVector3 type)
|
public override string Accept(DVector3 type)
|
||||||
{
|
{
|
||||||
var v = type.Value;
|
var v = type.Value;
|
||||||
return $"{{\"x\":{v.X},\"y\":{v.Y},\"z\":{v.Z}}}";
|
return $"{{\"x\":{v.X},\"y\":{v.Y},\"z\":{v.Z}}}";
|
||||||
}
|
}
|
||||||
|
|
||||||
public virtual string Accept(DVector4 type)
|
public override string Accept(DVector4 type)
|
||||||
{
|
{
|
||||||
var v = type.Value;
|
var v = type.Value;
|
||||||
return $"{{\"x\":{v.X},\"y\":{v.Y},\"z\":{v.Z},\"w\":{v.W}}}";
|
return $"{{\"x\":{v.X},\"y\":{v.Y},\"z\":{v.Z},\"w\":{v.W}}}";
|
||||||
}
|
}
|
||||||
|
|
||||||
public string Accept(DDateTime type)
|
|
||||||
{
|
|
||||||
var ass = DefAssembly.LocalAssebmly as DefAssembly;
|
|
||||||
return type.GetUnixTime(ass.TimeZone).ToString();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1,99 +1,42 @@
|
||||||
using Luban.Job.Cfg.Datas;
|
using Luban.Job.Cfg.Datas;
|
||||||
|
using Luban.Job.Cfg.Defs;
|
||||||
|
using Luban.Job.Cfg.Utils;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
|
|
||||||
namespace Luban.Job.Cfg.DataVisitors
|
namespace Luban.Job.Cfg.DataVisitors
|
||||||
{
|
{
|
||||||
class ToStringVisitor : IDataActionVisitor<StringBuilder>
|
class ToStringVisitor : ToLiteralVisitorBase
|
||||||
{
|
{
|
||||||
public static ToStringVisitor Ins { get; } = new ToStringVisitor();
|
public static ToStringVisitor Ins { get; } = new ToStringVisitor();
|
||||||
|
|
||||||
public void Accept(DBool type, StringBuilder x)
|
public override string Accept(DText type)
|
||||||
{
|
{
|
||||||
x.Append(type.Value ? "true" : "false");
|
var ass = DefAssembly.LocalAssebmly as DefAssembly;
|
||||||
|
return $"\"{type.Key}#{type.GetText(ass.ExportTextTable, ass.NotConvertTextSet)}\"";
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Accept(DByte type, StringBuilder x)
|
public override string Accept(DBean type)
|
||||||
{
|
{
|
||||||
x.Append(type.Value);
|
var x = new StringBuilder();
|
||||||
}
|
var bean = type.ImplType;
|
||||||
|
if (bean.IsAbstractType)
|
||||||
public void Accept(DShort type, StringBuilder x)
|
|
||||||
{
|
|
||||||
x.Append(type.Value);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void Accept(DFshort type, StringBuilder x)
|
|
||||||
{
|
|
||||||
x.Append(type.Value);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void Accept(DInt type, StringBuilder x)
|
|
||||||
{
|
|
||||||
x.Append(type.Value);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void Accept(DFint type, StringBuilder x)
|
|
||||||
{
|
|
||||||
x.Append(type.Value);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void Accept(DLong type, StringBuilder x)
|
|
||||||
{
|
|
||||||
x.Append(type.Value);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void Accept(DFlong type, StringBuilder x)
|
|
||||||
{
|
|
||||||
x.Append(type.Value);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void Accept(DFloat type, StringBuilder x)
|
|
||||||
{
|
|
||||||
x.Append(type.Value);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void Accept(DDouble type, StringBuilder x)
|
|
||||||
{
|
|
||||||
x.Append(type.Value);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void Accept(DEnum type, StringBuilder x)
|
|
||||||
{
|
|
||||||
x.Append(type.StrValue);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void Accept(DString type, StringBuilder x)
|
|
||||||
{
|
|
||||||
x.Append(type.Value);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void Accept(DBytes type, StringBuilder x)
|
|
||||||
{
|
|
||||||
x.Append(Bright.Common.StringUtil.ArrayToString(type.Value));
|
|
||||||
}
|
|
||||||
|
|
||||||
public void Accept(DText type, StringBuilder x)
|
|
||||||
{
|
|
||||||
x.Append(type.Key).Append('|').Append(type.RawValue);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void Accept(DBean type, StringBuilder x)
|
|
||||||
{
|
|
||||||
if (type.ImplType == null)
|
|
||||||
{
|
{
|
||||||
x.Append("null");
|
x.Append($"{{ _name:\"{type.ImplType.Name}\",");
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
x.Append(type.ImplType.FullName).Append('{');
|
else
|
||||||
|
{
|
||||||
|
x.Append('{');
|
||||||
|
}
|
||||||
|
|
||||||
int index = 0;
|
int index = 0;
|
||||||
foreach (var f in type.Fields)
|
foreach (var f in type.Fields)
|
||||||
{
|
{
|
||||||
var defField = type.ImplType.HierarchyFields[index++];
|
var defField = type.ImplType.HierarchyExportFields[index++];
|
||||||
x.Append(defField.Name).Append(':');
|
x.Append(defField.Name).Append(':');
|
||||||
if (f != null)
|
if (f != null)
|
||||||
{
|
{
|
||||||
f.Apply(this, x);
|
x.Append(f.Apply(this));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
@ -102,69 +45,71 @@ namespace Luban.Job.Cfg.DataVisitors
|
||||||
x.Append(',');
|
x.Append(',');
|
||||||
}
|
}
|
||||||
x.Append('}');
|
x.Append('}');
|
||||||
|
return x.ToString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private void Append(List<DType> datas, StringBuilder x)
|
protected void Append(List<DType> datas, StringBuilder x)
|
||||||
{
|
{
|
||||||
x.Append('{');
|
x.Append('[');
|
||||||
foreach (var e in datas)
|
foreach (var e in datas)
|
||||||
{
|
{
|
||||||
e.Apply(this, x);
|
x.Append(e.Apply(this)).Append(',');
|
||||||
x.Append(',');
|
|
||||||
}
|
}
|
||||||
x.Append('}');
|
x.Append(']');
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Accept(DArray type, StringBuilder x)
|
public override string Accept(DArray type)
|
||||||
{
|
{
|
||||||
|
var x = new StringBuilder();
|
||||||
Append(type.Datas, x);
|
Append(type.Datas, x);
|
||||||
|
return x.ToString();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Accept(DList type, StringBuilder x)
|
public override string Accept(DList type)
|
||||||
{
|
{
|
||||||
|
var x = new StringBuilder();
|
||||||
Append(type.Datas, x);
|
Append(type.Datas, x);
|
||||||
|
return x.ToString();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Accept(DSet type, StringBuilder x)
|
public override string Accept(DSet type)
|
||||||
{
|
{
|
||||||
|
var x = new StringBuilder();
|
||||||
Append(type.Datas, x);
|
Append(type.Datas, x);
|
||||||
|
return x.ToString();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Accept(DMap type, StringBuilder x)
|
public override string Accept(DMap type)
|
||||||
{
|
{
|
||||||
|
var x = new StringBuilder();
|
||||||
x.Append('{');
|
x.Append('{');
|
||||||
foreach (var e in type.Datas)
|
foreach (var e in type.Datas)
|
||||||
{
|
{
|
||||||
e.Key.Apply(this, x);
|
x.Append('"').Append(e.Key.ToString()).Append('"');
|
||||||
x.Append(':');
|
x.Append(':');
|
||||||
e.Value.Apply(this, x);
|
x.Append(e.Value.Apply(this)).Append(',');
|
||||||
x.Append(',');
|
|
||||||
}
|
}
|
||||||
x.Append('}');
|
x.Append('}');
|
||||||
|
return x.ToString();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Accept(DVector2 type, StringBuilder x)
|
public override string Accept(DVector2 type)
|
||||||
{
|
{
|
||||||
var v = type.Value;
|
var v = type.Value;
|
||||||
x.Append($"vector2(x={v.X},y={v.Y})");
|
return $"{{x:{v.X},y:{v.Y}}}";
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Accept(DVector3 type, StringBuilder x)
|
public override string Accept(DVector3 type)
|
||||||
{
|
{
|
||||||
var v = type.Value;
|
var v = type.Value;
|
||||||
x.Append($"vector3(x={v.X},y={v.Y},z={v.Z})");
|
return $"{{x:{v.X},y:{v.Y},z:{v.Z}}}";
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Accept(DVector4 type, StringBuilder x)
|
public override string Accept(DVector4 type)
|
||||||
{
|
{
|
||||||
var v = type.Value;
|
var v = type.Value;
|
||||||
x.Append($"vector4(x={v.X},y={v.Y},z={v.Z},w={v.W})");
|
return $"{{x:{v.X},y:{v.Y},z:{v.Z},w:{v.W}}}";
|
||||||
}
|
|
||||||
|
|
||||||
public void Accept(DDateTime type, StringBuilder x)
|
|
||||||
{
|
|
||||||
x.Append(type.Time.ToString());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -6,9 +6,9 @@ using System.Text;
|
||||||
|
|
||||||
namespace Luban.Job.Cfg.DataVisitors
|
namespace Luban.Job.Cfg.DataVisitors
|
||||||
{
|
{
|
||||||
class ToLuaStringVisitor : ToJsonStringVisitor
|
class ToXmlLiteralVisitor : ToJsonLiteralVisitor
|
||||||
{
|
{
|
||||||
public static new ToLuaStringVisitor Ins { get; } = new();
|
public static new ToXmlLiteralVisitor Ins { get; } = new();
|
||||||
|
|
||||||
public override string Accept(DText type)
|
public override string Accept(DText type)
|
||||||
{
|
{
|
||||||
|
|
@ -16,14 +16,8 @@ namespace Luban.Job.Cfg.Datas
|
||||||
|
|
||||||
public override string ToString()
|
public override string ToString()
|
||||||
{
|
{
|
||||||
var s = new StringBuilder();
|
return this.Apply(ToStringVisitor.Ins);
|
||||||
this.Apply(ToStringVisitor.Ins, s);
|
|
||||||
return s.ToString();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public string JsonValue => this.Apply(ToJsonStringVisitor.Ins);
|
|
||||||
|
|
||||||
public string LuaValue => this.Apply(ToLuaStringVisitor.Ins);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public abstract class DType<T> : DType
|
public abstract class DType<T> : DType
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
using Luban.Job.Cfg.Datas;
|
using Luban.Job.Cfg.Datas;
|
||||||
using Luban.Job.Cfg.Defs;
|
using Luban.Job.Cfg.Defs;
|
||||||
|
using Luban.Job.Cfg.Utils;
|
||||||
using Scriban;
|
using Scriban;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
|
||||||
|
|
@ -28,7 +29,7 @@ namespace Luban.Job.Cfg
|
||||||
public static string RenderData(this Template template, DefTable table, List<DBean> exportDatas, Dictionary<string, object> extraModels = null)
|
public static string RenderData(this Template template, DefTable table, List<DBean> exportDatas, Dictionary<string, object> extraModels = null)
|
||||||
{
|
{
|
||||||
var ctx = new TemplateContext();
|
var ctx = new TemplateContext();
|
||||||
var env = new TTypeTemplateExtends
|
var env = new DTypeTemplateExtends
|
||||||
{
|
{
|
||||||
["table"] = table,
|
["table"] = table,
|
||||||
["datas"] = exportDatas,
|
["datas"] = exportDatas,
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,57 @@
|
||||||
|
using Luban.Job.Cfg.Datas;
|
||||||
|
using Luban.Job.Cfg.DataVisitors;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace Luban.Job.Cfg.Utils
|
||||||
|
{
|
||||||
|
class DTypeTemplateExtends : TTypeTemplateExtends
|
||||||
|
{
|
||||||
|
public static DType GetField(DBean bean, string fieldName)
|
||||||
|
{
|
||||||
|
int index = 0;
|
||||||
|
foreach (var f in bean.ImplType.HierarchyExportFields)
|
||||||
|
{
|
||||||
|
if (f.Name == fieldName)
|
||||||
|
{
|
||||||
|
return bean.Fields[index];
|
||||||
|
}
|
||||||
|
++index;
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static string ToJsonPropertyName(DType type)
|
||||||
|
{
|
||||||
|
return "\"" + type.Apply(ToJsonPropertyNameVisitor.Ins) + "\"";
|
||||||
|
}
|
||||||
|
|
||||||
|
public static string ToJsonLiteral(DType type)
|
||||||
|
{
|
||||||
|
return type.Apply(ToJsonLiteralVisitor.Ins);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static string ToLuaLiteral(DType type)
|
||||||
|
{
|
||||||
|
return type.Apply(ToLuaLiteralVisitor.Ins);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static string ToXmlLiteral(DType type)
|
||||||
|
{
|
||||||
|
return type.Apply(ToXmlLiteralVisitor.Ins);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static string ToPythonLiteral(DType type)
|
||||||
|
{
|
||||||
|
return type.Apply(ToPythonLiteralVisitor.Ins);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static string ToErlangLiteral(DType type)
|
||||||
|
{
|
||||||
|
return type.Apply(ToErlangLiteralVisitor.Ins);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -80,12 +80,12 @@ namespace Luban.Job.Cfg.Utils
|
||||||
|
|
||||||
public static string EscapeString(string s)
|
public static string EscapeString(string s)
|
||||||
{
|
{
|
||||||
return s.Replace("\\", "\\\\").Replace("'", "\\'");
|
return s.Replace("\\", "\\\\");
|
||||||
}
|
}
|
||||||
|
|
||||||
public static string EscapeStringWithQuote(string s)
|
public static string EscapeStringWithQuote(string s)
|
||||||
{
|
{
|
||||||
return "'" + s.Replace("\\", "\\\\").Replace("'", "\\'") + "'";
|
return "\"" + s.Replace("\\", "\\\\") + "\"";
|
||||||
}
|
}
|
||||||
|
|
||||||
public static (string Key, string Text) ExtractText(string rawKeyAndText)
|
public static (string Key, string Text) ExtractText(string rawKeyAndText)
|
||||||
|
|
|
||||||
|
|
@ -1,28 +1,14 @@
|
||||||
using Luban.Job.Cfg.Datas;
|
using Luban.Job.Cfg.Defs;
|
||||||
using Luban.Job.Cfg.TypeVisitors;
|
using Luban.Job.Cfg.TypeVisitors;
|
||||||
using Luban.Job.Common.Defs;
|
using Luban.Job.Common.Defs;
|
||||||
using Luban.Job.Common.Types;
|
using Luban.Job.Common.Types;
|
||||||
using Luban.Job.Common.TypeVisitors;
|
using Luban.Job.Common.TypeVisitors;
|
||||||
using System;
|
using System;
|
||||||
|
|
||||||
namespace Luban.Job.Cfg.Defs
|
namespace Luban.Job.Cfg.Utils
|
||||||
{
|
{
|
||||||
class TTypeTemplateExtends : TTypeTemplateCommonExtends
|
class TTypeTemplateExtends : TTypeTemplateCommonExtends
|
||||||
{
|
{
|
||||||
public static DType GetField(DBean bean, string fieldName)
|
|
||||||
{
|
|
||||||
int index = 0;
|
|
||||||
foreach (var f in bean.ImplType.HierarchyExportFields)
|
|
||||||
{
|
|
||||||
if (f.Name == fieldName)
|
|
||||||
{
|
|
||||||
return bean.Fields[index];
|
|
||||||
}
|
|
||||||
++index;
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static string CsDefineTextKeyField(DefField field)
|
public static string CsDefineTextKeyField(DefField field)
|
||||||
{
|
{
|
||||||
return $"string {field.GetTextKeyName(field.CsStyleName)}";
|
return $"string {field.GetTextKeyName(field.CsStyleName)}";
|
||||||
Loading…
Reference in New Issue