Blackmire.CppHeaderWalker.VisitEnumDeclaration C# (CSharp) Method

VisitEnumDeclaration() public method

public VisitEnumDeclaration ( EnumDeclarationSyntax node ) : void
node EnumDeclarationSyntax
return void
        public override void VisitEnumDeclaration(EnumDeclarationSyntax node)
        {
            var name = node.Identifier.Text;
              cb.Append("enum class ").AppendLine(name)
            .Scope(() =>
            {
              base.VisitEnumDeclaration(node);
            });

              // now let's generate ostream& operator <<
              cb.AppendLine("std::ostream& operator<<(std::ostream& os, const " + name + " obj)")
            .Scope(() =>
            {
              cb.AppendLineWithIndent("switch (obj)")
            .Scope(() =>
            {
              foreach (var enumCase in node.Members)
              {
                string caseName = enumCase.Identifier.Text;
                // todo: string output needs to parse camelCase => "camel case"
                cb.AppendWithIndent("case " + name + "::" + caseName + ": ")
                  .AppendLine("os << \"" + Regex.Replace(caseName, @"(\B[A-Z]+?(?=[A-Z][^A-Z])|\B[A-Z]+?(?=[^A-Z]))", " $1").ToLowerInvariant() + "\"; break;");
              }
            });
              cb.AppendLineWithIndent("return os;");
            });
        }