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