public void SaveAs(string fileName, bool create, Property.DataOutputFlags flags) { XmlDocument xml = create ? null : Xml; if (null == xml) { xml = new XmlDocument(); xml.AppendChild(xml.CreateElement("ZezeConfig")); if (false == create) { Xml = xml; } } if (flags == Property.DataOutputFlags.All) { BeanDefine.SaveAs(xml, xml.DocumentElement, create); } for (int i = 0; i < _Beans.Count; ++i) { Bean b = _Beans[i]; b.RowIndex = i; b.SaveAs(xml, xml.DocumentElement, create, flags); } using (TextWriter sw = new StreamWriter(fileName, false, Encoding.UTF8)) { xml.Save(sw); } }
public static void Gen(StreamWriter sw, Document doc, EnumDefine e, Property.DataOutputFlags flags) { var fullName = e.FullName().Replace('.', '_'); sw.WriteLine($"export enum {fullName} {{"); foreach (var v in e.ValueMap.Values) { sw.WriteLine($" {v.Name} = {v.Value},"); } sw.WriteLine($"}}"); }
public void SaveAs(XmlDocument xml, XmlElement parent, bool create, Property.DataOutputFlags flags) { XmlElement self = create ? null : Self; if (null == self) { self = xml.CreateElement("bean"); parent.AppendChild(self); if (false == create) { Self = self; } } if (flags == Property.DataOutputFlags.All) { self.SetAttribute("DefineFullName", DefineFullName); } if (RowIndex >= 0) { self.SetAttribute("row", RowIndex.ToString()); } // 使用 DefineFullName 找到 BeanDefine。慢的话,可以加cache优化速度。 BeanDefine beanDefine = Document.BeanDefine; if (false == string.IsNullOrEmpty(DefineFullName)) { beanDefine = FormMain.Instance.Documents.SearchReference(DefineFullName); } foreach (var varDefine in beanDefine.Variables) { if (0 == (varDefine.DataOutputFlags & flags)) { continue; } if (VariableMap.TryGetValue(varDefine.Name, out var varData)) { varDefine.DetectType(varData.Value); varData.SaveAs(xml, self, create, flags); } else { varDefine.DetectType(""); } } }
public static void Gen(string srcHome, Document doc, Property.DataOutputFlags flags) { using (System.IO.StreamWriter sw = doc.OpenStreamWriter(srcHome, ".cs")) { sw.WriteLine($"// auto generated."); sw.WriteLine(); sw.WriteLine($"using System;"); sw.WriteLine($"using System.Collections.Generic;"); sw.WriteLine($"using System.Xml;"); sw.WriteLine(); sw.WriteLine($"namespace {doc.Namespace}"); sw.WriteLine($"{{"); Gen(sw, doc, doc.BeanDefine, " ", flags); sw.WriteLine($"}}"); // end of namespace } }
public static void Gen(FormMain main, Property.DataOutputFlags flags, FormBuildProgress progress) { switch (flags) { case Property.DataOutputFlags.Client: main.Documents.ForEachFile( (Documents.File file) => { progress.AppendLine($"生成ts客户端代码. {file.Document.RelateName}", Color.Black); BeanFormatter.Gen(main.ConfigProject.ClientSrcDirectory, file.Document, Property.DataOutputFlags.Client); return(progress.Running); }); break; default: throw new Exception("Ts. Client Only"); } }
public static void Gen(FormMain main, Property.DataOutputFlags flags, FormBuildProgress progress) { switch (flags) { case Property.DataOutputFlags.Server: main.Documents.ForEachFile( (Documents.File file) => { progress.AppendLine($"生成cs服务器代码. {file.Document.RelateName}", Color.Black); BeanFormatter.Gen(main.ConfigProject.ServerSrcDirectory, file.Document, Property.DataOutputFlags.Server); return(progress.Running); }); if (false == progress.Running) { return; } GenManager(main, main.ConfigProject.ServerSrcDirectory); break; case Property.DataOutputFlags.Client: main.Documents.ForEachFile( (Documents.File file) => { progress.AppendLine($"生成cs客户端代码. {file.Document.RelateName}", Color.Black); BeanFormatter.Gen(main.ConfigProject.ClientSrcDirectory, file.Document, Property.DataOutputFlags.Client); return(progress.Running); }); if (false == progress.Running) { return; } GenManager(main, main.ConfigProject.ClientSrcDirectory); break; } }
public static void Gen(string srcHome, Document doc, Property.DataOutputFlags flags) { using (StreamWriter sw = doc.OpenStreamWriter(srcHome, ".ts")) { sw.WriteLine($"// auto generated."); sw.WriteLine(); Gen(sw, doc, doc.BeanDefine, flags); sw.WriteLine(); var _ClassName = doc.BeanDefine._FullName().Replace('.', '_'); var DataName = doc.BeanDefine.FullName().Replace('.', '_'); sw.WriteLine($"export class {DataName} {{"); sw.WriteLine($" public static Beans: Array<{_ClassName}> = new Array<{_ClassName}>();"); if (false == FormMain.Instance.PropertyManager.Properties.TryGetValue(Property.Id.PName, out var pid)) { throw new Exception("Property.Id miss!"); } foreach (var var in doc.BeanDefine.Variables) { if (0 == (var.DataOutputFlags & flags)) { continue; } if (false == var.IsKeyable()) { continue; } if (false == var.PropertiesList.Contains(pid)) { continue; } var key = TypeHelper.GetName(var); var value = _ClassName; sw.WriteLine($" public static BeansMap{var.Name}: Map<{key}, {value}> = new Map<{key}, {value}>();"); } sw.WriteLine(); sw.WriteLine($" public static Load(): void"); sw.WriteLine($" {{"); foreach (var bean in doc.Beans) { sw.Write($" var bean{bean.RowIndex}: {_ClassName} = "); GenLoad(sw, " ", doc.BeanDefine, bean, flags); sw.WriteLine($";"); sw.WriteLine($" {DataName}.Beans.push(bean{bean.RowIndex});"); foreach (var var in doc.BeanDefine.Variables) { if (0 == (var.DataOutputFlags & flags)) { continue; } if (false == var.IsKeyable()) { continue; } if (false == var.PropertiesList.Contains(pid)) { continue; } sw.WriteLine($" {DataName}.BeansMap{var.Name}.set(bean{bean.RowIndex}.V{var.Name}, bean{bean.RowIndex});"); sw.WriteLine(); } } sw.WriteLine($" }}"); sw.WriteLine($"}}"); } }
public static void GenLoad(StreamWriter sw, string prefix, VarDefine varDefine, Bean.VarData varData, Property.DataOutputFlags flags) { switch (varDefine.TypeNow) { case VarDefine.EType.Date: if (false == string.IsNullOrEmpty(varData.Value)) { sw.WriteLine($"{prefix}V{varDefine.Name}: new Date(\"{varData.Value}\"),"); } break; case VarDefine.EType.Double: if (false == string.IsNullOrEmpty(varData.Value)) { sw.WriteLine($"{prefix}V{varDefine.Name}: {varData.Value},"); } break; case VarDefine.EType.Enum: sw.WriteLine($"{prefix}V{varDefine.Name}: {varDefine.FullName().Replace('.', '_')}.{varData.Value}"); break; case VarDefine.EType.Float: if (false == string.IsNullOrEmpty(varData.Value)) { sw.WriteLine($"{prefix}V{varDefine.Name}: {varData.Value},"); } break; case VarDefine.EType.Int: if (false == string.IsNullOrEmpty(varData.Value)) { sw.WriteLine($"{prefix}V{varDefine.Name}: {varData.Value},"); } break; case VarDefine.EType.Long: if (false == string.IsNullOrEmpty(varData.Value)) { sw.WriteLine($"{prefix}V{varDefine.Name}: {varData.Value},"); } break; case VarDefine.EType.String: var strValue = (null == varData.Value) ? "" : varData.Value; sw.WriteLine($"{prefix}V{varDefine.Name}: \"{strValue}\","); break; case VarDefine.EType.List: sw.WriteLine($"{prefix}V{varDefine.Name}: ["); foreach (var bean in varData.Beans) { sw.Write(prefix + " "); GenLoad(sw, prefix + " ", varDefine.Reference, bean, flags); sw.WriteLine(","); } sw.WriteLine($"{prefix}],"); break; } }
public void SaveAs(XmlDocument xml, XmlElement parent, bool create, Property.DataOutputFlags flags) { XmlElement self = create ? null : Self; XmlElement selfList = create ? null : SelfList; if (null == self) { // new self = xml.CreateElement(Name); parent.AppendChild(self); if (false == create) { Self = self; } } else { if (self.Name != Name) { // Name Change XmlElement e = xml.CreateElement(Name); parent.ReplaceChild(e, self); self = e; if (null != selfList) { self.AppendChild(selfList); } } } if (flags == Property.DataOutputFlags.All) { if (GridColumnNameWidth > 0) { self.SetAttribute("nw", GridColumnNameWidth.ToString()); } if (GridColumnValueWidth > 0) { self.SetAttribute("vw", GridColumnValueWidth.ToString()); } } if (_Beans.Count > 0) // 这里没有判断Type,直接根据数据来决定怎么保存。 { if (null == selfList) { selfList = xml.CreateElement("list"); self.AppendChild(selfList); if (false == create) { SelfList = selfList; } } for (int i = 0; i < _Beans.Count; ++i) { Bean b = _Beans[i]; b.RowIndex = i; b.SaveAs(xml, selfList, create, flags); } } else { self.InnerText = Value; } }
public static void Gen(System.IO.StreamWriter sw, Document doc, EnumDefine e, string prefix, Property.DataOutputFlags flags) { sw.WriteLine($"{prefix}public enum {e.Name}"); sw.WriteLine($"{prefix}{{"); foreach (var v in e.ValueMap.Values) { sw.WriteLine($"{prefix} {v.Name} = {v.Value},"); } sw.WriteLine($"{prefix}}}"); }
public static void GenLoad(StreamWriter sw, string baseTable, BeanDefine beanDefine, Bean bean, Property.DataOutputFlags flags) { foreach (var varDefine in beanDefine.Variables) { if (0 == (varDefine.DataOutputFlags & flags)) { continue; } if (bean.VariableMap.TryGetValue(varDefine.Name, out var varData)) { GenLoad(sw, baseTable, varDefine, varData, flags); } else if (VarDefine.EType.List == varDefine.TypeNow) { sw.WriteLine($"{baseTable}.{varDefine.NamePinyin} = {{}}"); } else if (false == string.IsNullOrEmpty(varDefine.Default)) { sw.WriteLine($"{baseTable}.{varDefine.NamePinyin}\"] = {GetDefaultInitialize(varDefine)}"); } } }
public static void GenLoad(StreamWriter sw, string baseTable, VarDefine varDefine, Bean.VarData varData, Property.DataOutputFlags flags) { switch (varDefine.TypeNow) { case VarDefine.EType.Date: // 先使用string. 看看lua怎么用。 if (false == string.IsNullOrEmpty(varData.Value)) { sw.WriteLine($"{baseTable}.{varDefine.NamePinyin} = \"{varData.Value}\""); } else if (false == string.IsNullOrEmpty(varDefine.Default)) { sw.WriteLine($"{baseTable}.{varDefine.NamePinyin} = \"{varDefine.Default}\""); } break; case VarDefine.EType.Int: case VarDefine.EType.Float: case VarDefine.EType.Double: case VarDefine.EType.Long: if (false == string.IsNullOrEmpty(varData.Value)) { sw.WriteLine($"{baseTable}.{varDefine.NamePinyin} = {varData.Value}"); } else if (false == string.IsNullOrEmpty(varDefine.Default)) { sw.WriteLine($"{baseTable}.{varDefine.NamePinyin} = {varDefine.Default}"); } break; case VarDefine.EType.Enum: var enumClassName = varDefine.FullNamePinyin().Replace('.', '_'); if (false == string.IsNullOrEmpty(varData.Value)) { sw.WriteLine($"{baseTable}.{varDefine.NamePinyin} = Config.Enums.{enumClassName}.{varData.ValuePinyin}"); } else if (false == string.IsNullOrEmpty(varDefine.Default)) { sw.WriteLine($"{baseTable}.{varDefine.NamePinyin} = Config.Enums.{enumClassName}.{varDefine.DefaultPinyin}"); } break; case VarDefine.EType.String: if (false == string.IsNullOrEmpty(varData.Value)) { sw.WriteLine($"{baseTable}.{varDefine.NamePinyin} = \"{varData.Value}\""); } else if (false == string.IsNullOrEmpty(varDefine.Default)) { sw.WriteLine($"{baseTable}.{varDefine.NamePinyin} = \"{varDefine.Default}\""); } else { sw.WriteLine($"{baseTable}.{varDefine.NamePinyin} = \"\""); } break; case VarDefine.EType.List: sw.WriteLine($"{baseTable}.{varDefine.NamePinyin} = {{}}"); foreach (var bean in varData.Beans) { var beanVarName = $"{baseTable}.{varDefine.NamePinyin}[{bean.RowIndex + 1}]"; sw.WriteLine($"{beanVarName} = {{}}"); GenLoad(sw, beanVarName, varDefine.Reference, bean, flags); } break; } }
public static void Gen(string srcHome, Document doc, Property.DataOutputFlags flags) { using (StreamWriter sw = doc.OpenStreamWriter(srcHome, ".lua")) { sw.WriteLine($"-- auto generated."); sw.WriteLine(); sw.WriteLine($"local Config = {{}}"); sw.WriteLine(); sw.WriteLine($"Config.Beans = {{}}"); if (false == FormMain.Instance.PropertyManager.Properties.TryGetValue(Property.Id.PName, out var pid)) { throw new Exception("Property.Id miss!"); } // gen enum SortedDictionary <string, EnumDefine> enums = new SortedDictionary <string, EnumDefine>(); doc.BeanDefine.ForEach( (BeanDefine bd) => { foreach (var e in bd.EnumDefines.Values) { enums.Add(e.FullNamePinyin().Replace('.', '_'), e); } return(true); }); sw.WriteLine($"Config.Enums = {{}}"); foreach (var e in enums) { sw.WriteLine($"Config.Enums.{e.Key} = {{}}"); foreach (var v in e.Value.ValueMap.Values) { sw.WriteLine($"Config.Enums.{e.Key}.{v.NamePinyin} = {v.Value}"); } } // gen map if need foreach (var var in doc.BeanDefine.Variables) { if (0 == (var.DataOutputFlags & flags)) { continue; } if (false == var.IsKeyable()) { continue; } if (false == var.PropertiesList.Contains(pid)) { continue; } sw.WriteLine($"Config.BeansMap{var.NamePinyin} = {{}}"); } sw.WriteLine(); foreach (var bean in doc.Beans) { sw.WriteLine($"Config.Beans[{bean.RowIndex + 1}] = {{}}"); GenLoad(sw, $"Config.Beans[{bean.RowIndex + 1}]", doc.BeanDefine, bean, flags); foreach (var var in doc.BeanDefine.Variables) { if (0 == (var.DataOutputFlags & flags)) { continue; } if (false == var.IsKeyable()) { continue; } if (false == var.PropertiesList.Contains(pid)) { continue; } // 需要确认,如果 var 是 string 时,下面 Index 写法是否正确。 sw.WriteLine($"Config.BeansMap{var.NamePinyin}[Config.Beans[{bean.RowIndex + 1}].{var.NamePinyin}] = Config.Beans[{bean.RowIndex + 1}]"); } sw.WriteLine(); } sw.WriteLine(); sw.WriteLine($"return Config"); } }
public static void Gen(System.IO.StreamWriter sw, Document doc, BeanDefine bean, string prefix, Property.DataOutputFlags flags) { sw.WriteLine($"{prefix}public class {bean.Name}"); sw.WriteLine($"{prefix}{{"); // sub bean foreach (var sub in bean.BeanDefines.Values) { Gen(sw, doc, sub, prefix + " ", flags); } foreach (var e in bean.EnumDefines.Values) { Gen(sw, doc, e, prefix + " ", flags); } if (false == FormMain.Instance.PropertyManager.Properties.TryGetValue(Property.IdList.PName, out var pid)) { throw new Exception("Property.Id miss!"); } // var property foreach (var var in bean.Variables) { if (0 == (var.DataOutputFlags & flags)) { continue; } sw.WriteLine($"{prefix} public {TypeHelper.GetName(var)} V{var.Name} {{ get; set; }}{TypeHelper.GetDefaultInitialize(var)}"); if (var.Type == VarDefine.EType.List) { foreach (var varRef in var.Reference.Variables) { if (0 == (varRef.DataOutputFlags & flags)) { continue; } if (false == varRef.IsKeyable()) { continue; } if (false == varRef.PropertiesList.Contains(pid)) { continue; } sw.WriteLine($"{prefix} public Dictionary<{TypeHelper.GetName(varRef)}, {var.Reference.FullName()}> V{var.Name}Map{varRef.Name} {{ get; }} = new Dictionary<{TypeHelper.GetName(varRef)}, {var.Reference.FullName()}>();"); } } } sw.WriteLine(); // load。解析代码都生成吧,虽然有点烦。不过不会代码依赖也好。 sw.WriteLine($"{prefix} public {bean.Name}(XmlElement self)"); sw.WriteLine($"{prefix} {{"); sw.WriteLine($"{prefix} foreach (XmlNode node in self.ChildNodes)"); sw.WriteLine($"{prefix} {{"); sw.WriteLine($"{prefix} if (XmlNodeType.Element != node.NodeType)"); sw.WriteLine($"{prefix} continue;"); sw.WriteLine($"{prefix} XmlElement e = (XmlElement)node;"); sw.WriteLine($"{prefix} switch (e.Name)"); sw.WriteLine($"{prefix} {{"); foreach (var var in bean.Variables) { if (0 == (var.DataOutputFlags & flags)) { continue; } sw.WriteLine($"{prefix} case \"{var.Name}\":"); TypeHelper.GenLoader(sw, doc, var, prefix + " ", flags); sw.WriteLine($"{prefix} break;"); sw.WriteLine(); } sw.WriteLine($"{prefix} default:"); sw.WriteLine($"{prefix} throw new Exception(\"unkown var name: \" + e.Name);"); sw.WriteLine($"{prefix} }}"); sw.WriteLine($"{prefix} }}"); sw.WriteLine($"{prefix} }}"); sw.WriteLine($"{prefix}}}"); // end of bean sw.WriteLine(); }
public static void Gen(StreamWriter sw, Document doc, BeanDefine bean, Property.DataOutputFlags flags) { // gen enum foreach (var e in bean.EnumDefines.Values) { Gen(sw, doc, e, flags); } var beanFullName = bean.FullName().Replace('.', '_'); sw.WriteLine($"export class _{beanFullName} {{"); if (false == FormMain.Instance.PropertyManager.Properties.TryGetValue(Property.IdList.PName, out var pid)) { throw new Exception("Property.Id miss!"); } // var property foreach (var var in bean.Variables) { if (0 == (var.DataOutputFlags & flags)) { continue; } var typeName = TypeHelper.GetName(var); if (var.Type != VarDefine.EType.List) { sw.WriteLine($" public V{var.Name}?: {typeName}{TypeHelper.GetDefaultInitialize(var)};"); } else { sw.WriteLine($" private _V{var.Name}?: {typeName};"); sw.WriteLine($" public get V{var.Name}() {{"); sw.WriteLine($" return this._V{var.Name};"); sw.WriteLine($" }}"); sw.WriteLine($" public set V{var.Name}(value: {typeName}) {{"); sw.WriteLine($" this._V{var.Name} = value;"); sw.WriteLine($" for (var i = 0; i < value.length; ++i) {{"); foreach (var varRef in var.Reference.Variables) { if (false == varRef.IsKeyable()) { continue; } if (false == varRef.PropertiesList.Contains(pid)) { continue; } var key = TypeHelper.GetName(varRef); var value = var.Reference.FullName().Replace('.', '_'); sw.WriteLine($" var bean = value[i];"); sw.WriteLine($" this.V{var.Name}Map{varRef.Name}.set(bean.V{varRef.Name}, bean);"); } sw.WriteLine($" }}"); sw.WriteLine($" }}"); foreach (var varRef in var.Reference.Variables) { if (false == varRef.IsKeyable()) { continue; } if (false == varRef.PropertiesList.Contains(pid)) { continue; } var key = TypeHelper.GetName(varRef); var value = var.Reference.FullName().Replace('.', '_'); sw.WriteLine($" public V{var.Name}Map{varRef.Name}?: Map<{key}, _{value}> = new Map<{key}, _{value}>();"); } } } sw.WriteLine($"}}"); // end of bean sw.WriteLine(); // sub bean foreach (var sub in bean.BeanDefines.Values) { Gen(sw, doc, sub, flags); } }
public static void GenLoad(StreamWriter sw, string prefix, BeanDefine beanDefine, Bean bean, Property.DataOutputFlags flags) { sw.WriteLine($"{{"); foreach (var varDefine in beanDefine.Variables) { if (0 == (varDefine.DataOutputFlags & flags)) { continue; } if (bean.VariableMap.TryGetValue(varDefine.Name, out var varData)) { GenLoad(sw, prefix + " ", varDefine, varData, flags); } else if (VarDefine.EType.List == varDefine.TypeNow) { sw.WriteLine($"{prefix} V{varDefine.Name}: ["); sw.WriteLine($"{prefix} ],"); } } sw.Write($"{prefix}}}"); }
public static void GenLoader(System.IO.StreamWriter sw, Document doc, VarDefine var, string prefix, Property.DataOutputFlags flags) { switch (var.TypeNow) { case VarDefine.EType.Double: sw.WriteLine($"{prefix}if (!string.IsNullOrEmpty(e.InnerText))"); sw.WriteLine($"{prefix} V{var.Name} = double.Parse(e.InnerText);"); break; case VarDefine.EType.Enum: sw.WriteLine($"{prefix}V{var.Name} = ({var.Name})System.Enum.Parse(typeof({var.Name}), e.InnerText);"); break; case VarDefine.EType.Float: sw.WriteLine($"{prefix}if (!string.IsNullOrEmpty(e.InnerText))"); sw.WriteLine($"{prefix} V{var.Name} = float.Parse(e.InnerText);"); break; case VarDefine.EType.Int: sw.WriteLine($"{prefix}if (!string.IsNullOrEmpty(e.InnerText))"); sw.WriteLine($"{prefix} V{var.Name} = int.Parse(e.InnerText);"); break; case VarDefine.EType.List: sw.WriteLine($"{prefix}Manager.LoadList(e, (XmlElement eInList) =>"); sw.WriteLine($"{prefix}{{"); sw.WriteLine($"{prefix} var beanInList = new {var.Reference.FullName()}(eInList);"); sw.WriteLine($"{prefix} V{var.Name}.Add(beanInList);"); if (false == FormMain.Instance.PropertyManager.Properties.TryGetValue(Property.IdList.PName, out var pid)) { throw new Exception("Property.Id miss!"); } foreach (var varRef in var.Reference.Variables) { if (false == varRef.IsKeyable()) { continue; } if (false == varRef.PropertiesList.Contains(pid)) { continue; } sw.WriteLine($"{prefix} V{var.Name}Map{varRef.Name}.Add(beanInList.V{varRef.Name}, beanInList);"); } sw.WriteLine($"{prefix}}});"); break; case VarDefine.EType.Long: sw.WriteLine($"{prefix}if (!string.IsNullOrEmpty(e.InnerText))"); sw.WriteLine($"{prefix} V{var.Name} = long.Parse(e.InnerText);"); break; case VarDefine.EType.String: sw.WriteLine($"{prefix}V{var.Name} = e.InnerText;"); break; case VarDefine.EType.Date: sw.WriteLine($"{prefix}V{var.Name} = DateTime.Parse(e.InnerText);"); break; default: throw new Exception("unknown type"); } }