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)); }
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) }); } }