diff --git a/src/Generator/Transform.cs b/src/Generator/Transform.cs index 29cefdf6..ca0f68bb 100644 --- a/src/Generator/Transform.cs +++ b/src/Generator/Transform.cs @@ -1,4 +1,5 @@ using System; +using System.Diagnostics; using System.Globalization; using System.Text.RegularExpressions; @@ -34,6 +35,14 @@ namespace Cxxi return false; } + /// + /// Processes an enum. + /// + public virtual bool ProcessEnum(Enumeration @enum) + { + return false; + } + /// /// Processes an enum item. /// @@ -43,6 +52,17 @@ namespace Cxxi } } + [Flags] + public enum RenameFlags + { + Function, + Record, + Field, + Enum, + EnumItem, + Declaration = Function | Record | Field | Enum | EnumItem, + } + /// /// Renames a declaration based on a regular expression pattern. /// @@ -50,6 +70,7 @@ namespace Cxxi { public string Pattern; public string Replacement; + public RenameFlags Flags = RenameFlags.Declaration; public RenameTransform(string pattern, string replacement) { @@ -57,13 +78,23 @@ namespace Cxxi Replacement = replacement; } + public RenameTransform(string pattern, string replacement, RenameFlags flags) + : this(pattern, replacement) + { + Flags = flags; + } + public override bool ProcessDeclaration(Declaration type) { + if (!Flags.HasFlag(RenameFlags.Declaration)) + return false; return Rename(ref type.Name); } public override bool ProcessEnumItem(Enumeration.Item item) { + if (!Flags.HasFlag(RenameFlags.EnumItem)) + return false; return Rename(ref item.Name); } @@ -85,14 +116,24 @@ namespace Cxxi { #region Transform Operations + public void RenameWithPattern(string pattern, string replacement, RenameFlags flags) + { + Transformations.Add(new RenameTransform(pattern, replacement, flags)); + } + public void RemovePrefix(string prefix) { - Transformations.Add(new RenameTransform(prefix, String.Empty)); + Transformations.Add(new RenameTransform("^"+prefix, String.Empty)); } - public void RemoveType(Declaration type) + public void RemovePrefixEnumItem(string prefix) { + Transformations.Add(new RenameTransform("^"+prefix, String.Empty, RenameFlags.EnumItem)); + } + public void RemoveType(Declaration type) + { + throw new NotImplementedException(); } #endregion