【特性】cfg 导出数据中text类型包含key数据。
parent
35fd2b38cb
commit
12b3c9d5df
|
|
@ -87,6 +87,7 @@ namespace Luban.Job.Cfg.DataExporters
|
||||||
|
|
||||||
public void Accept(DText type, DefAssembly ass, ByteBuf x)
|
public void Accept(DText type, DefAssembly ass, ByteBuf x)
|
||||||
{
|
{
|
||||||
|
x.WriteString(type.Key);
|
||||||
x.WriteString(type.GetText(ass.ExportTextTable, ass.NotConvertTextSet));
|
x.WriteString(type.GetText(ass.ExportTextTable, ass.NotConvertTextSet));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -15,6 +15,38 @@ namespace Luban.Job.Cfg.DataExporters
|
||||||
{
|
{
|
||||||
public new static Json2Exportor Ins { get; } = new();
|
public new static Json2Exportor Ins { get; } = new();
|
||||||
|
|
||||||
|
public void WriteAsObject(DefTable table, List<Record> datas, DefAssembly ass, Utf8JsonWriter x)
|
||||||
|
{
|
||||||
|
switch (table.Mode)
|
||||||
|
{
|
||||||
|
case RawDefs.ETableMode.ONE:
|
||||||
|
{
|
||||||
|
this.Accept(datas[0].Data, ass, x);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case RawDefs.ETableMode.MAP:
|
||||||
|
{
|
||||||
|
|
||||||
|
x.WriteStartObject();
|
||||||
|
string indexName = table.IndexField.Name;
|
||||||
|
foreach (var rec in datas)
|
||||||
|
{
|
||||||
|
var indexFieldData = rec.Data.GetField(indexName);
|
||||||
|
|
||||||
|
x.WritePropertyName(indexFieldData.Apply(ToJsonPropertyNameVisitor.Ins));
|
||||||
|
this.Accept(rec.Data, ass, x);
|
||||||
|
}
|
||||||
|
|
||||||
|
x.WriteEndObject();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
{
|
||||||
|
throw new NotSupportedException($"not support table mode:{table.Mode}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public override void Accept(DMap type, DefAssembly ass, Utf8JsonWriter x)
|
public override void Accept(DMap type, DefAssembly ass, Utf8JsonWriter x)
|
||||||
{
|
{
|
||||||
x.WriteStartObject();
|
x.WriteStartObject();
|
||||||
|
|
|
||||||
|
|
@ -21,38 +21,6 @@ namespace Luban.Job.Cfg.DataExporters
|
||||||
x.WriteEndArray();
|
x.WriteEndArray();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void WriteAsObject(DefTable table, List<Record> datas, DefAssembly ass, Utf8JsonWriter x)
|
|
||||||
{
|
|
||||||
switch (table.Mode)
|
|
||||||
{
|
|
||||||
case RawDefs.ETableMode.ONE:
|
|
||||||
{
|
|
||||||
this.Accept(datas[0].Data, ass, x);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case RawDefs.ETableMode.MAP:
|
|
||||||
{
|
|
||||||
|
|
||||||
x.WriteStartObject();
|
|
||||||
string indexName = table.IndexField.Name;
|
|
||||||
foreach (var rec in datas)
|
|
||||||
{
|
|
||||||
var indexFieldData = rec.Data.GetField(indexName);
|
|
||||||
|
|
||||||
x.WritePropertyName(indexFieldData.Apply(ToJsonPropertyNameVisitor.Ins));
|
|
||||||
this.Accept(rec.Data, ass, x);
|
|
||||||
}
|
|
||||||
|
|
||||||
x.WriteEndObject();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
default:
|
|
||||||
{
|
|
||||||
throw new NotSupportedException($"not support table mode:{table.Mode}");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void Accept(DBool type, DefAssembly ass, Utf8JsonWriter x)
|
public void Accept(DBool type, DefAssembly ass, Utf8JsonWriter x)
|
||||||
{
|
{
|
||||||
x.WriteBooleanValue(type.Value);
|
x.WriteBooleanValue(type.Value);
|
||||||
|
|
@ -120,7 +88,12 @@ namespace Luban.Job.Cfg.DataExporters
|
||||||
|
|
||||||
public void Accept(DText type, DefAssembly ass, Utf8JsonWriter x)
|
public void Accept(DText type, DefAssembly ass, Utf8JsonWriter x)
|
||||||
{
|
{
|
||||||
|
x.WriteStartObject();
|
||||||
|
x.WritePropertyName(DText.KEY_NAME);
|
||||||
|
x.WriteStringValue(type.Key);
|
||||||
|
x.WritePropertyName(DText.TEXT_NAME);
|
||||||
x.WriteStringValue(type.GetText(ass.ExportTextTable, ass.NotConvertTextSet));
|
x.WriteStringValue(type.GetText(ass.ExportTextTable, ass.NotConvertTextSet));
|
||||||
|
x.WriteEndObject();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Accept(DBean type, DefAssembly ass, Utf8JsonWriter x)
|
public void Accept(DBean type, DefAssembly ass, Utf8JsonWriter x)
|
||||||
|
|
@ -145,7 +118,7 @@ namespace Luban.Job.Cfg.DataExporters
|
||||||
|
|
||||||
// 特殊处理 bean 多态类型
|
// 特殊处理 bean 多态类型
|
||||||
// 另外,不生成 xxx:null 这样
|
// 另外,不生成 xxx:null 这样
|
||||||
if (d == null || (d is DBean db && db.ImplType == null))
|
if (d == null /*|| (d is DBean db && db.ImplType == null)*/)
|
||||||
{
|
{
|
||||||
//x.WriteNullValue();
|
//x.WriteNullValue();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -117,7 +117,7 @@ namespace Luban.Job.Cfg.DataExporters
|
||||||
|
|
||||||
public void Accept(DText type, DefAssembly ass, StringBuilder line)
|
public void Accept(DText type, DefAssembly ass, StringBuilder line)
|
||||||
{
|
{
|
||||||
line.Append('\'').Append(EscapeString(type.GetText(ass.ExportTextTable, ass.NotConvertTextSet))).Append('\'');
|
line.Append($"{{{DText.KEY_NAME}='{type.Key}',{DText.TEXT_NAME}='{EscapeString(type.GetText(ass.ExportTextTable, ass.NotConvertTextSet))}'}}");
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Accept(DBean type, DefAssembly ass, StringBuilder line)
|
public void Accept(DBean type, DefAssembly ass, StringBuilder line)
|
||||||
|
|
|
||||||
|
|
@ -6,6 +6,9 @@ namespace Luban.Job.Cfg.Datas
|
||||||
{
|
{
|
||||||
public class DText : DType
|
public class DText : DType
|
||||||
{
|
{
|
||||||
|
public const string KEY_NAME = "key";
|
||||||
|
public const string TEXT_NAME = "text";
|
||||||
|
|
||||||
public string Key { get; }
|
public string Key { get; }
|
||||||
|
|
||||||
private readonly string _rawValue;
|
private readonly string _rawValue;
|
||||||
|
|
|
||||||
|
|
@ -142,6 +142,8 @@ namespace Luban.Job.Cfg.Defs
|
||||||
|
|
||||||
public CfgField RawDefine { get; }
|
public CfgField RawDefine { get; }
|
||||||
|
|
||||||
|
public bool GenTextKey => this.CType is TText;
|
||||||
|
|
||||||
public DefField(DefTypeBase host, CfgField f, int idOffset) : base(host, f, idOffset)
|
public DefField(DefTypeBase host, CfgField f, int idOffset) : base(host, f, idOffset)
|
||||||
{
|
{
|
||||||
Index = f.Index;
|
Index = f.Index;
|
||||||
|
|
@ -181,6 +183,10 @@ namespace Luban.Job.Cfg.Defs
|
||||||
{
|
{
|
||||||
throw new Exception($"container element type:'{e.Bean.FullName}' can't be empty bean");
|
throw new Exception($"container element type:'{e.Bean.FullName}' can't be empty bean");
|
||||||
}
|
}
|
||||||
|
if (t.ElementType is TText)
|
||||||
|
{
|
||||||
|
throw new Exception($"bean:{HostType.FullName} field:{Name} container element type can't text");
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case TList t:
|
case TList t:
|
||||||
|
|
@ -189,6 +195,30 @@ namespace Luban.Job.Cfg.Defs
|
||||||
{
|
{
|
||||||
throw new Exception($"container element type:'{e.Bean.FullName}' can't be empty bean");
|
throw new Exception($"container element type:'{e.Bean.FullName}' can't be empty bean");
|
||||||
}
|
}
|
||||||
|
if (t.ElementType is TText)
|
||||||
|
{
|
||||||
|
throw new Exception($"bean:{HostType.FullName} field:{Name} container element type can't text");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case TSet t:
|
||||||
|
{
|
||||||
|
if (t.ElementType is TText)
|
||||||
|
{
|
||||||
|
throw new Exception($"bean:{HostType.FullName} field:{Name} container element type can't text");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case TMap t:
|
||||||
|
{
|
||||||
|
if (t.KeyType is TText)
|
||||||
|
{
|
||||||
|
throw new Exception($"bean:{HostType.FullName} field:{Name} container key type can't text");
|
||||||
|
}
|
||||||
|
if (t.ValueType is TText)
|
||||||
|
{
|
||||||
|
throw new Exception($"bean:{HostType.FullName} field:{Name} container value type can't text");
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,7 @@ 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;
|
||||||
|
|
||||||
namespace Luban.Job.Cfg.Defs
|
namespace Luban.Job.Cfg.Defs
|
||||||
{
|
{
|
||||||
|
|
@ -191,5 +192,23 @@ namespace Luban.Job.Cfg.Defs
|
||||||
return type.Apply(PyUnderingDeserializeVisitor.Ins, $"{jsonVarName}['{jsonFieldName}']", fieldName);
|
return type.Apply(PyUnderingDeserializeVisitor.Ins, $"{jsonVarName}['{jsonFieldName}']", fieldName);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static string DefineTextKeyField(DefField field, string lan)
|
||||||
|
{
|
||||||
|
switch (lan)
|
||||||
|
{
|
||||||
|
case "cpp": return $"{CppDefineTypeName.Ins.Accept(field.CType.IsNullable ? TString.NullableIns : TString.Ins)} {field.CppStyleName}{TText.L10N_FIELD_SUFFIX};";
|
||||||
|
default: throw new NotSupportedException($"not support lan:{lan}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//public static string DeserializeTextKeyField(DefField field, string lan, string bufName)
|
||||||
|
//{
|
||||||
|
// switch (lan)
|
||||||
|
// {
|
||||||
|
// case "cpp": return $"{CppDefineTypeName.Ins.Accept(TString.Ins)} {field.CppStyleName}{L10N_FIELD_SUFFIX};";
|
||||||
|
// default: throw new NotSupportedException($"not support lan:{lan}");
|
||||||
|
// }
|
||||||
|
//}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,8 @@ namespace Luban.Job.Common.Types
|
||||||
{
|
{
|
||||||
public class TText : TType
|
public class TText : TType
|
||||||
{
|
{
|
||||||
|
public const string L10N_FIELD_SUFFIX = "_l10n_key";
|
||||||
|
|
||||||
public static TText Ins { get; } = new TText(false);
|
public static TText Ins { get; } = new TText(false);
|
||||||
|
|
||||||
public static TText NullableIns { get; } = new TText(true);
|
public static TText NullableIns { get; } = new TText(true);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue