public void EmitEnum(CodeBuilder b) { var enumName = CSharp.ApplyStyle(CfxName); b.AppendSummaryAndRemarks(comments); if (Name.Contains("_flags") || additionalFlags.Contains(enumName)) { b.AppendLine("[Flags()]"); } var prefixBuilder = new StringBuilder(); var allEqual = true; do { char c = members[0].Name[prefixBuilder.Length]; for (var i = 1; i <= members.Length - 1; i++) { if (c != members[i].Name[prefixBuilder.Length]) { allEqual = false; break; } } if (allEqual) { prefixBuilder.Append(c); } } while(allEqual); while (prefixBuilder.Length > 0 && prefixBuilder[prefixBuilder.Length - 1] != '_') { --prefixBuilder.Length; } b.BeginBlock("public enum {0}", enumName); foreach (var m in members) { m.PublicName = CSharp.ApplyStyle(m.Name.Substring(prefixBuilder.Length)); if (char.IsDigit(m.PublicName[0])) { switch (enumName) { case "CfxScaleFactor": m.PublicName = "ScaleFactor" + m.PublicName; break; default: Debug.Assert(false); break; } } b.AppendSummary(m.Comments); b.Append(m.PublicName); if (m.Value != null) { b.Append(" = {0}", GetEnumMemberValue(m.Value)); } b.AppendLine(","); } b.TrimRight(); b.CutRight(1); b.AppendLine(); b.EndBlock(); }