protected List<CodeEnum> parseEnums(string src, int namespaceIndex, HashSet<string> usingNamespaces, WcfCleanerOptions options) { var enums = new List<CodeEnum>(); var enumMatches = RegexHelper.MatchesGeneric("public enum ([^ ]+) {", src.Substring(namespaceIndex)); int index = namespaceIndex; foreach (var enumMatch in enumMatches) { int prevIndex = index; index = enumMatch.Index + namespaceIndex; // 5) Gather preceding remarks and attributes string headings = gatherHeadings(src, index, prevIndex, usingNamespaces, options); // 6) Save enum name var groups = enumMatch.Groups; var enumName = groups[1].Value; var codeEnum = new CodeEnum { Headings = headings, Name = enumName }; // Count open/closing curly braces until end of enum int startEnum = 0; int endEnum = 0; countCodeBraces(src, index, out startEnum, out endEnum); string enumBody = src.Substring(startEnum, endEnum - startEnum); // 7) Begin property/method loop parseEnumItems(enumBody, codeEnum, usingNamespaces, options); index = endEnum + 1; enums.Add(codeEnum); } return enums; }
protected void writeEnum(FileStreamWriter text, WcfCleanerOptions options, CodeEnum codeEnum) { text.WriteLine(codeEnum.Headings) .WriteLine("\tpublic enum ", codeEnum.Name) .WriteLine("\t{"); codeEnum.Values.FencePostBefore( enumValue => { text.WriteLine(); }, enumValue => { writeEnumValue(text, enumValue); } ); text.WriteLine("\t}"); }
protected void parseEnumItems(string enumBody, CodeEnum codeEnum, HashSet<string> usingNamespaces, WcfCleanerOptions options) { var enumItems = RegexHelper.MatchesGeneric(@"\n\s+([\w_\$]+),\n", enumBody); int index = 0; foreach (var enumItemMatch in enumItems) { int prevIndex = index; index = enumItemMatch.Index; var groups = enumItemMatch.Groups.Cast<Group>().ToArray(); string name = groups[1].Value; var enumValue = parseEnumValue(name, index, prevIndex, enumBody, usingNamespaces, options); codeEnum.Values.Add(enumValue); } }