/// <summary> /// 加入实体 /// </summary> /// <param name="api"></param> public void Add(TypedefItem api) { api.Parent = this; if (!TypedefItems.Contains(api)) { TypedefItems.Add(api); } }
public List <EntityConfig> CheckCppFieldes(string text) { List <EntityConfig> tables = new List <EntityConfig>(); string[] lines = text.Split(new[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries); int idx = 0; EntityConfig entity = new EntityConfig(); bool isNewTable = true; bool isInStruct = false; foreach (string l in lines) { if (string.IsNullOrEmpty(l)) { continue; } var line = l.Trim(' ', '\t', ';'); if (string.IsNullOrEmpty(line)) { continue; } switch (line) { case "{": isInStruct = true; continue; case "}": isNewTable = true; isInStruct = false; entity = new EntityConfig(); continue; } if (line.IndexOf("//", StringComparison.Ordinal) == 0) //注释 { if (isNewTable || line.Contains("//!")) { entity.Caption = line.Trim(CoderBase.NoneLanguageChar); isNewTable = false; } else { entity.Description = line.Trim(CoderBase.NoneLanguageChar); } continue; } string[] words = line.Split(new[] { ' ', ';', '\t' }, StringSplitOptions.RemoveEmptyEntries); switch (words[0]) { case "typedef": var item = new TypedefItem { Tag = SystemName }; var i = l.IndexOf('['); if (i < 0) { item.Name = words[words.Length - 1]; } else { var ks = l.Split(new[] { '[', ']' }, StringSplitOptions.RemoveEmptyEntries); item.ArrayLen = ks[1]; words = ks[0].Split(new[] { '\t', ' ', ';', '=' }, StringSplitOptions.RemoveEmptyEntries); } item.Description = entity.Caption; item.Name = words[words.Length - 1].Trim(CoderBase.NoneLanguageChar); item.KeyWork = string.Empty; for (int index = 1; index < words.Length - 1; index++) { item.KeyWork += " " + words[index]; } InvokeInUiThread(() => TypedefItems.Add(item)); continue; case "struct": entity.Name = words[1]; if (words.Length > 2) { entity.Caption = words[2].Trim(CoderBase.NoneNameChar); } tables.Add(entity); isInStruct = false; idx = 0; continue; case "private": case "protected": case "public": continue; } if (!isInStruct) { continue; } PropertyConfig column; entity.Properties.Add(column = new PropertyConfig { Index = idx++, DbType = "nvarchar" }); words = line.Split(new[] { ';' }, StringSplitOptions.RemoveEmptyEntries); if (words.Length > 1) { column.Description = column.Caption = words[1].Trim('/', '\t', ' '); } words = words[0].Split(new[] { '[', ']' }, StringSplitOptions.RemoveEmptyEntries); if (words.Length > 1) { column.Datalen = int.Parse(words[1].Trim('/', '\t', ' ')); } words = words[0].Split(new[] { '\t', ' ' }, StringSplitOptions.RemoveEmptyEntries); int nameIdx = words.Length - 1; column.Name = column.ColumnName = words[nameIdx].Trim(CoderBase.NoneLanguageChar); column.CppType = ""; for (int index = 0; index < nameIdx; index++) { if (index > 0) { column.CppType += " " + words[index]; } else { column.CppType = words[index]; } } } foreach (var t in tables) { t.Parent = Project; t.Tag = SystemName + "," + t.Name; t.CppName = t.Name; CoderBase.RepairConfigName(t, true); foreach (var pro in t.Properties) { pro.Parent = t; pro.CppName = pro.CppName; CoderBase.RepairConfigName(pro, true); pro.CppLastType = CppTypeHelper.CppLastType(pro.CppType); pro.CsType = CppTypeHelper.CppTypeToCsType(pro); } t.IsClass = true; //EntityBusinessModel business = new EntityBusinessModel //{ // Entity = t //}; //t.IsReference = true; //business.RepairByModel(true); //t.IsReference = false; } return(tables); }