Beispiel #1
0
    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();
    }