#r "System.IO" #r "System.Text.RegularExpressions" using System; using System.IO; using System.Text.RegularExpressions; void Main() { Console.WriteLine("ModPreprocessorDefine Started); // Redirect console output to a file var originalConsoleOut = Console.Out; using (var writer = new StreamWriter("console_output.txt")) { Console.SetOut(writer); // Define the path to the PreprocessorDefine.cs file string filePath = "Assets/Mirror/CompilerSymbols/PreprocessorDefine.cs"; // Read the contents of the file string fileContents = File.ReadAllText(filePath); Console.WriteLine("ModPreprocessorDefine File read); // Find and remove the first entry ending with "_OR_NEWER" fileContents = RemoveFirstOrNewerEntry(fileContents); Console.WriteLine("ModPreprocessorDefine Old entry removed); // Find the last entry and capture the version number string versionNumber = GetLastVersionNumber(fileContents); Console.WriteLine($"ModPreprocessorDefine current version {versionNumber}); // Append a new entry with the correct indentation and next version number fileContents = AppendNewEntry(fileContents, versionNumber); Console.WriteLine("ModPreprocessorDefine New entry appended); // Write the modified contents back to the file File.WriteAllText(filePath, fileContents); Console.SetOut(originalConsoleOut); } Console.WriteLine("ModPreprocessorDefine Finished); // Print the contents of the redirected file Console.WriteLine("Console Output:"); Console.WriteLine(File.ReadAllText("console_output.txt")); } string RemoveFirstOrNewerEntry(string input) { // Regex pattern to match the first entry ending with "_OR_NEWER" string pattern = @"^\s*""[^""]*_OR_NEWER""\s*,\s*$"; // Find the first match Match match = Regex.Match(input, pattern, RegexOptions.Multiline); // If a match is found, remove the entire line if (match.Success) { input = input.Remove(match.Index, match.Length); } return input; } string GetLastVersionNumber(string input) { // Regex pattern to match the last entry and capture the version number string pattern = @"^\s*""([^""]*)_OR_NEWER""\s*,\s*$"; // Find all matches MatchCollection matches = Regex.Matches(input, pattern, RegexOptions.Multiline); // Capture the version number from the last match string versionNumber = matches.Count > 0 ? matches[matches.Count - 1].Groups[1].Value : ""; return versionNumber; } string AppendNewEntry(string input, string versionNumber) { // Calculate the next version number (increment by 1) int nextVersion = int.TryParse(versionNumber, out int currentVersion) ? currentVersion + 1 : 1; // Get the indentation of the "HashSet defines = new HashSet" line string indentation = GetHashSetIndentation(input); // Create the new entry with the correct indentation and next version number string newEntry = indentation + $" \"MIRROR_{nextVersion}_OR_NEWER\""; Console.WriteLine($"New entry: {newEntry}"); // Find the position of the "defines" HashSet and insert the new entry into it int definesStartIndex = input.IndexOf("HashSet defines = new HashSet"); int definesEndIndex = input.IndexOf("};", definesStartIndex) + 1; // Insert the comma and new entry into the "defines" HashSet input = input.Remove(definesEndIndex - 2, 2); // Remove the trailing "};" input = input.Insert(definesEndIndex - 2, $",\n{newEntry}\n{indentation}}};"); Console.WriteLine(input); return input; } string GetHashSetIndentation(string input) { // Regex pattern to match the indentation of "HashSet defines = new HashSet" string pattern = @"^\s*HashSet defines = new HashSet"; // Find the first match Match match = Regex.Match(input, pattern, RegexOptions.Multiline); // If a match is found, capture the indentation and add 4 spaces string indentation = match.Success ? Regex.Match(match.Value, @"^\s*").Value : ""; return indentation; }