public void AddConstantFromMacroToCSharpType()

in SharpGen/Transform/ConstantManager.cs [35:85]


        public void AddConstantFromMacroToCSharpType(CppElementFinder elementFinder, string macroRegexp, string fullNameCSharpType, string type, string fieldName, string valueMap,
                                                     Visibility? visibility, string nameSpace)
        {
            var constantDefinitions = elementFinder.Find<CppConstant>(macroRegexp);
            var regex = new Regex(macroRegexp);

            // $0: Name of the C++ macro
            // $1: Value of the C++ macro
            // $2: Name of the C#
            // $3: Name of current namespace
            if (valueMap != null)
            {
                valueMap = valueMap.Replace("{", "{{");
                valueMap = valueMap.Replace("}", "}}");
                valueMap = valueMap.Replace("$0", "{0}");
                valueMap = valueMap.Replace("$1", "{1}");
                valueMap = valueMap.Replace("$2", "{2}");
                valueMap = valueMap.Replace("$3", "{3}");
            }

            foreach (var macroDef in constantDefinitions)
            {
                var finalFieldName = fieldName == null ?
                    macroDef.Name
                    : NamingRules.ConvertToPascalCase(
                        regex.Replace(macroDef.Name, fieldName),
                        NamingFlags.Default);
                var finalValue = valueMap == null ?
                    macroDef.Value
                    : string.Format(valueMap, macroDef.Name, macroDef.Value, finalFieldName, nameSpace);

                var constant = AddConstantToCSharpType(macroDef, fullNameCSharpType, type, finalFieldName, finalValue);
                constant.Visibility = visibility ?? Visibility.Public | Visibility.Const;
            }

            var guidDefinitions = elementFinder.Find<CppGuid>(macroRegexp);
            foreach (var guidDef in guidDefinitions)
            {
                var finalFieldName = fieldName == null ?
                    guidDef.Name
                    : NamingRules.ConvertToPascalCase(
                        regex.Replace(guidDef.Name, fieldName),
                        NamingFlags.Default);
                var finalValue = valueMap == null ?
                    guidDef.Guid.ToString()
                    : string.Format(valueMap, guidDef.Name, guidDef.Guid.ToString(), finalFieldName, nameSpace);

                var constant = AddConstantToCSharpType(guidDef, fullNameCSharpType, type, finalFieldName, finalValue);
                constant.Visibility = visibility ?? Visibility.Public | Visibility.Static | Visibility.Readonly;
            }
        }