public string PrintParsedClass(ParsedClass parsedClass, string projName, string absPathToFile, string searchDir) { var sb = new StringBuilder(); PrinNamespace(sb, parsedClass, projName); AddClassName(sb, parsedClass, absPathToFile, 4); string templateName = null; if (parsedClass.IsTemplate) { templateName = CashParser.Unpack(parsedClass.Template, 1); } var doc = string.Empty; if (parsedClass.ObjectType == ObjectType.Api && !string.IsNullOrEmpty(searchDir)) { doc = File.ReadAllText(searchDir + absPathToFile); } foreach (var t in parsedClass.Fields) { if (parsedClass.ObjectType == ObjectType.Api && !string.IsNullOrEmpty(doc) && !doc.Contains($"({t.CppName})")) { continue; } PrintParsedElements(sb, parsedClass, t, 8, templateName); } CloseTag(sb, 4); CloseTag(sb, 0); return(sb.ToString()); }
private ParsedType GetKnownCompositType(string type) { if (type.StartsWith("map<")) //TODO: research is needed { return new ParsedType { CppName = type, Name = "object" } } ; var unpacked = CashParser.Unpack(type, 1); ParsedType parsedType; if (type.StartsWith("array<")) //TODO: research is needed { var countPart = unpacked.LastIndexOf(','); if (countPart > 0) { unpacked = unpacked.Remove(countPart); parsedType = GetKnownTypeOrDefault(unpacked); parsedType.IsArray = true; return(parsedType); } } if (IsArray(type)) { parsedType = GetKnownTypeOrDefault(unpacked); parsedType.IsArray = true; return(parsedType); } var chArray = CashParser.SplitParams(unpacked); var tmpl = type.Remove(type.IndexOf('<')); parsedType = tmpl.Equals("pair") ? new ParsedType { Name = "KeyValuePair" } : GetKnownTypeOrDefault(tmpl); parsedType.IsTemplate = true; foreach (var item in chArray) { var ch = GetKnownTypeOrDefault(item); parsedType.Container.Add(ch); } return(parsedType); }
private void ExtendPreParsedClass(ParsedClass parsedClass) { if (parsedClass == null) { return; } if (!string.IsNullOrEmpty(parsedClass.CppName)) { parsedClass.Name = CashParser.ToTitleCase(parsedClass.CppName); } if (!string.IsNullOrEmpty(parsedClass.CppInherit)) { parsedClass.Inherit = new List <ParsedType> { GetKnownTypeOrDefault(parsedClass.CppInherit) } } ; if (parsedClass.CppConstructorParams != null && parsedClass.CppConstructorParams.Any()) { foreach (var itm in parsedClass.CppConstructorParams) { parsedClass.ConstructorParams.Add(TryParseParam(itm)); } } if (parsedClass.ObjectType != ObjectType.Enum) { string templateName = null; if (parsedClass.IsTemplate) { templateName = CashParser.Unpack(parsedClass.Template, 1); } for (var i = 0; i < parsedClass.Fields.Count; i++) { var preParsedElement = parsedClass.Fields[i]; parsedClass.Fields[i] = TryParseElement(preParsedElement, templateName); } } parsedClass.Fields.RemoveAll(i => i == null); }
public string PrintParsedClass(ParsedClass parsedClass, string projName, string absPathToFile) { var sb = new StringBuilder(); PrinNamespace(sb, parsedClass, projName); AddClassName(sb, parsedClass, absPathToFile, 4); string templateName = null; if (parsedClass.IsTemplate) { templateName = CashParser.Unpack(parsedClass.Template, 1); } foreach (var t in parsedClass.Fields) { PrintParsedElements(sb, parsedClass, t, 8, templateName); } CloseTag(sb, 4); CloseTag(sb, 0); return(sb.ToString()); }
protected ParsedType GetKnownTypeOrDefault(string type, string templateName = null) { type = type.Trim(); if (NamespacePref.IsMatch(type)) { type = NamespacePref.Replace(type, string.Empty); } if (type.StartsWith("optional<")) { type = CashParser.Unpack(type, 1); } if (type.StartsWith("static ")) { type = type.Remove(0, 7); } if (type.StartsWith("const ")) { type = type.Remove(0, 6); } if (type.EndsWith("<>")) { type = type.Remove(type.Length - 2); } if (type.IndexOf('<') > -1) { return(GetKnownCompositType(type)); } if (_knownTypes.ContainsKey(type)) { return new ParsedType { CppName = type, Name = _knownTypes[type] } } ; if (!string.IsNullOrEmpty(templateName) && type.Equals(templateName, StringComparison.OrdinalIgnoreCase)) { return new ParsedType { CppName = type, Name = templateName } } ; if (Founded.ContainsKey(type)) { return(new ParsedType { CppName = type, Name = Founded[type] }); } if (!NotNameChar.IsMatch(type)) { AddTypeToTask(type); return(new ParsedType { CppName = type, Name = CashParser.ToTitleCase(type) }); } return(new ParsedType { CppName = type, Name = "object" }); }