private void WriteCodeFile(CodeFileWriter codeFileWriter, CodeWriterOptions options) { codeFileWriter.WriteUsingStatements(); if (string.IsNullOrEmpty(CodeFile.RelativeNamespace)) { codeFileWriter.WriteNamespace($"{options.RootNamespace}"); } else { codeFileWriter.WriteNamespace($"{options.RootNamespace}.{CodeFile.RelativeNamespace}"); } // start namespace block codeFileWriter.WriteStartBlock(); codeFileWriter.Declaration.WriteLine(CodeFile.Declaration); codeFileWriter.WriteDeclarationSection(); // start declaration block codeFileWriter.WriteStartBlock(); codeFileWriter.WritePropertiesSection(ignoreNewLineInSection: true); codeFileWriter.WriteConstructorsSection(); codeFileWriter.WritePublicPropertiesSection(); codeFileWriter.WritePublicMethodsSection(); codeFileWriter.WriteMethodsSection(); // end declaration block codeFileWriter.WriteEndBlock(); // end namespace block codeFileWriter.WriteEndBlock(); }
public static void WriteInstanceStubs() { var dir = ToolConfig.DefaultAddonSourceDir + "Instances/"; RealmDBMgr.Initialize(); ContentMgr.Initialize(); World.InitializeWorld(); InstanceMgr.Initialize(); foreach (var instance in InstanceMgr.InstanceInfos) { var className = instance.Id.ToString(); var baseClass = typeof(BaseInstance).Name; var file = dir + className + ".cs"; if (!File.Exists(file)) { using (var writer = new CodeFileWriter(file, "WCell.Addons.Default.Instances", className, "class", ": " + baseClass, "WCell.RealmServer.Instances")) { } } } }
private void WriteCodeFile(CodeFileWriter codeFileWriter) { codeFileWriter.WriteUsingStatements(); codeFileWriter.WriteNamespace(CodeFile.Namespace); // start namespace block codeFileWriter.WriteStartBlock(); codeFileWriter.Declaration.WriteLine(CodeFile.Declaration); codeFileWriter.WriteDeclarationSection(); // start declaration block codeFileWriter.WriteStartBlock(); codeFileWriter.WritePropertiesSection(ignoreNewLineInSection: true); codeFileWriter.WriteConstructorsSection(); codeFileWriter.WritePublicPropertiesSection(); codeFileWriter.WritePublicMethodsSection(); codeFileWriter.WriteMethodsSection(); // end declaration block codeFileWriter.WriteEndBlock(); // end namespace block codeFileWriter.WriteEndBlock(); }
public static void WriteMapBoundaries(string outputFileName) { using (writer = new CodeFileWriter(outputFileName, "WCell.Constants.World", "MapBoundaries", "static class", "", "WCell.Util.Graphics")) { writer.WriteMethod("public", "static BoundingBox[]", "GetMapBoundaries", "", WriteMethod); } }
public static void WriteZoneTileSets(string outputFileName) { tileSets = ZoneBoundaryWriter.ExportTileSets(); using (writer = new CodeFileWriter(outputFileName, "WCell.Constants.World", "ZoneBoundaries", "static class", "", "WCell.Util.Graphics")) { writer.WriteMethod("public", "static ZoneTileSet[]", "GetZoneTileSets", "", WriteMethod); } }
public static void WriteSpellLines(string outputFileName) { CreateMaps(); WCellEnumWriter.WriteSpellLinesEnum(); using (writer = new CodeFileWriter(outputFileName, "WCell.RealmServer.Spells", "SpellLines", "static partial class", "", "WCell.Constants.Spells")) { writer.WriteMethod("private", "static void", "SetupSpellLines", "", WriteSpellLinesMethod); } }
public static void WriteSpellLines(string outputFileName) { WCellEnumWriter.WriteSpellLinesEnum(); using (writer = new CodeFileWriter(outputFileName, "WCell.RealmServer.Spells", "SpellLines", "static partial class", "", "WCell.Constants", "WCell.Constants.Spells")) { writer.WriteMethod("private", "static void", "SetupSpellLines", "", WriteSpellLinesMethod); } }
private void WriteCodeFile(CodeFileConverter codeFileConverter) { var directoryPath = Path.Combine(options.RootDirectory, codeFileConverter.CodeFile.RelativeNamespace); var filePath = Path.Combine(directoryPath, $"{codeFileConverter.CodeFile.FileName}.cs"); CreateDirectoryIfNotExist(directoryPath); var codeWriter = new CodeFileWriter(filePath, codeFileConverter.CodeFile, options); codeFileConverter.WriteTo(codeWriter, options); codeWriter.Flush(); }
public static void WriteWCellInfo() { using (var writer = new CodeFileWriter(Path.Combine(ToolConfig.WCellConstantsRoot, "WCellInfo.cs"), "WCell.Constants", "WCellInfo", "static class")) { writer.WriteSummary(@"The official codename of the current WCell build"); writer.WriteLine("public const string Codename = \"Amethyst\";"); writer.WriteLine(); writer.WriteSummary(@"The color of the current WCell codename"); writer.WriteLine(@"public const ChatColor CodenameColor = ChatColor.Purple;"); writer.WriteLine(); writer.WriteSummary("The version of the WoW Client that is currently supported."); writer.WriteLine("public static readonly ClientVersion RequiredVersion = new ClientVersion({0}, {1}, {2}, {3});", WoWFile.Version.Major, WoWFile.Version.Minor, WoWFile.Version.Revision, WoWFile.Version.Build); writer.WriteLine(); } }
private static void DumpToFile(string outputFileName) { using (var writer = new CodeFileWriter(outputFileName, "WCell.Constants.Spells", "SpellFailedReason : byte", "enum", "")) { var len = SpellFailures.Count; var val = 0; for (var i = 0; i < len; i++, val++) { if (unfindableMap.ContainsKey(i)) { WriteVal(writer, unfindableMap[i], i); val++; } WriteVal(writer, SpellFailures[i], val); } writer.WriteLine("Ok = 0xFF"); } }
public void TestWriteClassToFile() { var gen = new CodeUnitGenerator("TestCodeGen"); gen.NamespaceImports.Add("System"); string sourceFile = "mycodegenpath.cs"; ClassGenerator classGen = new ClassGenerator("MyCodeDOMTestClass"); gen.AddType(classGen); var ccu = gen.GenerateCompileUnit(); CodeFileWriter writer = new CodeFileWriter(); writer.Write(ccu, sourceFile); bool exists = File.Exists(sourceFile); Assert.IsTrue(exists); }
public static void WriteEnum <T>( string enumName, string enumSuffix, string group, IEnumerable <T> values, bool hexadecimal, Validator <T> validator, GetField <T> getNameDelegate, GetField <T> getCommentDelegate, GetField <T, string> getDuplNameDelegate, GetField <T> getIdDelegate) { Init(); var dir = Path.Combine(Dir, group); Directory.CreateDirectory(dir); var file = Path.Combine(dir, enumName + ".cs"); Console.Write("Writing enum {0} to {1}...", enumName, new DirectoryInfo(file).FullName); var first = true; using (var writer = new CodeFileWriter(file, "WCell.Constants." + group, enumName, "enum", enumSuffix)) { try { var names = new Dictionary <string, int>(values.Count()); foreach (T item in values) { if (item == null || item.Equals(default(T)) || !validator(item)) { continue; } var name = getNameDelegate(item); if (name == null) { throw new Exception(string.Format("Name for Item {0} in {1}/{2} was null.", item, group, enumName)); } name = BeautifyName(name); int count; if (!names.TryGetValue(name, out count)) { names.Add(name, 1); } else { names.Remove(name); names.Add(name, ++count); string duplName = null; if (getDuplNameDelegate != null) { duplName = getDuplNameDelegate(item, name); } if (duplName != null) { name = duplName; } else { name = name + "_" + count; } } var val = getIdDelegate(item); if (hexadecimal) { int ival; if (int.TryParse(val, out ival)) { val = string.Format("0x{0:x}", ival); } } if (first) { first = false; long id; if (!long.TryParse(val, out id)) { throw new InvalidDataException("Invalid ID was not numeric: " + val); } if (id > 0) { writer.WriteLine("None = 0,"); } } string comment; if (getCommentDelegate != null) { comment = getCommentDelegate(item); if (comment != null) { var commentLines = comment.Split(new[] { "\n", "\r\n", "\r" }, StringSplitOptions.RemoveEmptyEntries); if (commentLines.Length > 0) { writer.StartSummary(); foreach (string line in commentLines) { writer.WriteXmlCommentLine(line); } writer.EndSummary(); } } } writer.WriteLine(string.Format("{0} = {1},", name, val)); } writer.WriteLine("End"); writer.Finish(); Console.WriteLine(" Done."); } catch (Exception ex) { writer.OnException(ex); } } }
public void Write(string fileName) { using (var writer = new CodeFileWriter(fileName, "WCell.Constants.Updates", "UpdateFields", CodeFileWriter.StaticTag + " " + CodeFileWriter.Class, "", "System")) { writer.ExecuteSafely(() => { writer.WriteIndent("public static readonly "); writer.Array(UpdateFieldTypeName, "AllFields", 2, ";", () => { for (var i = 0; i < m_fields.Length; i++) { var fieldArr = m_fields[i]; writer.WriteRegion(((ObjectTypeId)i).ToString()); writer.NewArray("UpdateField", ",", () => { foreach (var field in fieldArr) { if (field != null) { writer.WriteCommentLine(field.FullName); var flags = Utility.GetSetIndicesEnum(field.Flags); var args = new[] { new KeyValuePair <string, object> ("Flags", flags.TransformList((flag) => "UpdateFieldFlags." + flag) . ToString (" | ")) , new KeyValuePair < string , object >( "Group", "ObjectTypeId." + field . Group) , new KeyValuePair < string , object >( "Name", "\"" + field . Name + "\"") , new KeyValuePair < string , object >( "Offset", field . Offset) , new KeyValuePair < string , object >( "Size", field . Size) , new KeyValuePair < string , object >( "Type", "UpdateFieldType." + field . Type) }; writer.NewInit( UpdateFieldTypeName, args, ","); } else { writer.WriteLine( "null,"); } } }); writer.WriteEndRegion(); writer.WriteLine(); } }); writer.WriteLine(); //writer.WriteStaticMethod("Init", () => { //}); //writer.WriteStaticCTor(() => { // writer.Call("Init"); //}); }); } }
public void Write(string fileName) { using (var writer = new CodeFileWriter(fileName, "WCell.Constants.Updates", "UpdateFields", CodeFileWriter.StaticTag + " " + CodeFileWriter.Class, "", "System")) { writer.ExecuteSafely(() =>{ writer.WriteIndent("public static readonly "); writer.Array(UpdateFieldTypeName, "AllFields", 2, ";", () =>{ for (var i = 0; i < m_fields.Length; i++) { var fieldArr = m_fields[i]; writer.WriteRegion( ((ObjectTypeId) i).ToString()); writer.NewArray("UpdateField", ",", () =>{ foreach ( var field in fieldArr) { if (field != null) { writer. WriteCommentLine( field.FullName); var flags = Utility. GetSetIndicesEnum (field.Flags); var args = new[] { new KeyValuePair < string , object >( "Flags", flags . TransformList (( flag) => "UpdateFieldFlags." + flag) . ToString (" | ")) , new KeyValuePair < string , object >( "Group", "ObjectTypeId." + field . Group) , new KeyValuePair < string , object >( "Name", "\"" + field . Name + "\"") , new KeyValuePair < string , object >( "Offset", field . Offset) , new KeyValuePair < string , object >( "Size", field . Size) , new KeyValuePair < string , object >( "Type", "UpdateFieldType." + field . Type) }; writer.NewInit( UpdateFieldTypeName, args, ","); } else { writer.WriteLine( "null,"); } } }); writer.WriteEndRegion(); writer.WriteLine(); } }); writer.WriteLine(); //writer.WriteStaticMethod("Init", () => { //}); //writer.WriteStaticCTor(() => { // writer.Call("Init"); //}); }); } }
static void WriteVal(CodeFileWriter writer, string name, int value) { name = name.Replace("SPELL_FAILED_", ""); name = name.ToCamelCase(); writer.WriteLine("{0} = {1},", name, value); }
public static void WriteEnum <T>( string enumName, string group, IEnumerable <T> values, bool hexadecimal, Validator <T> validator, GetField <T> getNameDelegate, GetField <T> getCommentDelegate, GetField <T, string> getDuplNameDelegate, GetField <T> getIdDelegate) { var dir = Path.Combine(Dir, group); Directory.CreateDirectory(dir); string file = Path.Combine(dir, enumName + ".cs"); Console.Write("Writing enum {0} to {1}...", enumName, new DirectoryInfo(file).FullName); bool first = true; using (var writer = new CodeFileWriter(new StreamWriter(file), "WCell.Constants." + group, enumName, "enum")) { var lines = new List <string>(values.Count()); var names = new Dictionary <string, int>(values.Count()); foreach (var item in values) { if (item == null || !validator(item)) { continue; } string name = getNameDelegate(item).Replace("%", "Percent"); name = name.Replace("'s", "s"); string[] parts = Regex.Split(name, @"\s+|[^\w\d_]+", RegexOptions.None); for (int i = 0; i < parts.Length; i++) { string part = parts[i]; if (part.Length == 0) { continue; } //if (part.Length > 1) { // part = part.ToLower(); string firstChar = part[0] + ""; part = firstChar.ToUpper() + part.Substring(1); //} //else { // part = part.ToUpper(); //} parts[i] = part; } name = string.Join("", parts); // against digits at the start Match numMatch = NumRegex.Match(name); if (numMatch.Success) { string num = GetNumString(numMatch.Value); if (name.Length > num.Length) { name = num + name.Substring(numMatch.Value.Length, 1).ToUpper() + name.Substring(numMatch.Value.Length + 1); } else { name = num; } } int count; if (!names.TryGetValue(name, out count)) { names.Add(name, 1); } else { names.Remove(name); names.Add(name, ++count); string duplName = null; if (getDuplNameDelegate != null) { duplName = getDuplNameDelegate(item, name); } if (duplName != null) { name = duplName; } else { name = name + "_" + count; } } string val = getIdDelegate(item); if (hexadecimal) { try { int ival = Convert.ToInt32(val); val = string.Format("0x{0:x}", ival); } catch { }; } if (first) { first = false; if (long.Parse(val) > 0) { writer.WriteLine("None = 0,"); } } string comment = ""; if (getCommentDelegate != null) { comment = getCommentDelegate(item); if (comment != null) { string[] commentLines = comment.Split(new string[] { "\n", "\r\n", "\r" }, StringSplitOptions.RemoveEmptyEntries); if (commentLines.Length > 0) { writer.StartSummary(); foreach (string line in commentLines) { writer.WriteXmlCommentLine(line); } writer.EndSummary(); } } } writer.WriteLine(string.Format("{0} = {1},", name, val)); } writer.WriteLine("End"); writer.Finish(); Console.WriteLine(" Done."); } }
public static void WriteWCellInfo() { using (var writer = new CodeFileWriter(Path.Combine(ToolConfig.WCellConstantsRoot, "WCellInfo.cs"), "WCell.Constants", "WCellInfo", "static class", "", "WCell.Constants.Misc")) { writer.WriteSummary(@"The official codename of the current WCell build"); writer.WriteLine("public const string Codename = \"Amethyst\";"); writer.WriteLine(); writer.WriteSummary(@"The color of the current WCell codename"); writer.WriteLine(@"public const ChatColor CodenameColor = ChatColor.Purple;"); writer.WriteLine(); writer.WriteSummary("The version of the WoW Client that is currently supported."); writer.WriteLine("public static readonly ClientVersion RequiredVersion = new ClientVersion({0}, {1}, {2}, {3});", WoWFile.Version.Major, WoWFile.Version.Minor, WoWFile.Version.Revision, WoWFile.Version.Build); writer.WriteLine(); } }