Пример #1
0
        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());
        }
Пример #2
0
        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);
        }
Пример #3
0
        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);
        }
Пример #4
0
        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());
        }
Пример #5
0
        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"
            });
        }