Пример #1
0
        private static string GenerateClassName(GuerillaBlockClassBase parentClass, MoonfishTagField field)
        {
            var nameToken     = new StringBuilder(field.Strings.Name.ToPascalCase().ToAlphaNumericToken());
            var typeToken     = GetTypeToken(field);
            var fieldTypeName = nameToken + typeToken;

            fieldTypeName = parentClass.TokenDictionary.Contains(fieldTypeName)
                ? parentClass.TargetClass.Name.Replace("Block", "") + fieldTypeName
                : fieldTypeName;
            return(parentClass.TokenDictionary.GenerateValidToken(fieldTypeName));
        }
Пример #2
0
        internal GuerillaEnumBlockClass(GuerillaBlockClassBase parentClass, MoonfishTagField field)
            : base(GenerateClassName(parentClass, field))
        {
            _field = field;
            bool isFlags;

            TargetClass = ConstructCodeTypeDeclaration(field, TargetClass.Name, out isFlags);


            var comments       = PullComments();
            var memberComments = comments.Descriptions.ToList();
            var enumDefinition = (MoonfishTagEnumDefinition)field.Definition;

            //  add a none flag for flag-enums
            if (isFlags)
            {
                TargetClass.Members.Add(new CodeMemberField
                {
                    Name           = "None",
                    InitExpression = new CodePrimitiveExpression(0)
                });
            }

            //  loop through all the enum options and add them
            for (var index = 0; index < enumDefinition.Names.Count; index++)
            {
                var value   = enumDefinition.Names[index];
                var comment = index < memberComments.Count ? memberComments[index] : null;

                if (!value.ToAlphaNumericToken().IsValidIdentifier())
                {
                    Console.WriteLine(@"Skipping enum option: {{{0}}}", value);
                    continue;
                }

                var member = new CodeMemberField
                {
                    Name = GenerateName(MemberAttributes.Public, value)
                };

                //  process comments
                if (comment != null)
                {
                    var lines = comment.Split(new[] { "\n", "\r\n" }, StringSplitOptions.None);
                    member.Comments.Add(new CodeCommentStatement("<summary>", true));
                    foreach (var line in lines)
                    {
                        member.Comments.Add(new CodeCommentStatement(line, true));
                    }
                    member.Comments.Add(new CodeCommentStatement("</summary>", true));
                }
                member.InitExpression = new CodePrimitiveExpression(isFlags ? 1 << index : index);
                TargetClass.Members.Add(member);
            }
            if (comments.HasSummary)
            {
                TargetClass.Comments.AddRange(new[]
                {
                    new CodeCommentStatement("<summary>", true),
                    new CodeCommentStatement(comments.Summary.Trim(), true),
                    new CodeCommentStatement("</summary>", true)
                });
            }
        }