static async Task <int> Main(string[] args) { using FileStream openStream = File.OpenRead(FilesPath); standardClauses = await JsonSerializer.DeserializeAsync <Clauses>(openStream); if (standardClauses is null) { Console.WriteLine("Could not read list of clauses. Exiting"); return(1); } bool dryRun = ((args.Length > 0) && (args[0].Contains("dryrun"))); if (dryRun) { Console.WriteLine("Doing a dry run"); } try { Console.WriteLine("=========================== Front Matter ==================================="); var sectionMap = new TocSectionNumberBuilder("../standard", dryRun); foreach (var file in standardClauses.FrontMatter) { Console.WriteLine($" -- {file}"); await sectionMap.AddFrontMatterTocEntries(file); } Console.WriteLine("================= GENERATE UPDATED SECTION NUMBERS ========================="); Console.WriteLine("============================ Main text======================================"); foreach (var file in standardClauses.MainBody) { Console.WriteLine($" -- {file}"); await sectionMap.AddContentsToTOC(file); } Console.WriteLine("============================= Annexes ======================================"); sectionMap.FinishMainSection(); foreach (var file in standardClauses.Annexes) { Console.WriteLine($" -- {file}"); await sectionMap.AddContentsToTOC(file); } if (!dryRun) { Console.WriteLine("Update TOC"); var existingReadMe = await ReadExistingReadMe(); using var readme = new StreamWriter(ReadMePath, false); await readme.WriteAsync(existingReadMe); await readme.WriteLineAsync(TOCHeader); await readme.WriteLineAsync(); await readme.WriteAsync(sectionMap.Toc); } Console.WriteLine("======================= UPDATE ALL REFERENCES =============================="); var fixup = new ReferenceUpdateProcessor("../standard", sectionMap.LinkMap, dryRun); Console.WriteLine("=========================== Front Matter ==================================="); foreach (var file in standardClauses.FrontMatter) { Console.WriteLine($" -- {file}"); await fixup.ReplaceReferences(file); } Console.WriteLine("============================ Main text======================================"); foreach (var file in standardClauses.MainBody) { Console.WriteLine($" -- {file}"); await fixup.ReplaceReferences(file); } Console.WriteLine("============================= Annexes ======================================"); foreach (var file in standardClauses.Annexes) { Console.WriteLine($" -- {file}"); await fixup.ReplaceReferences(file); } return(fixup.ErrorCount); } catch (InvalidOperationException e) { Console.WriteLine("\tError encountered:"); Console.WriteLine(e.Message.ToString()); Console.WriteLine("To recover, do the following:"); Console.WriteLine("1. Discard all changes from the section numbering tool"); Console.WriteLine("2. Fix the error noted above."); Console.WriteLine("3. Run the tool again."); return(1); } }
static async Task Main(string[] args) { bool dryRun = ((args.Length > 0) && (args[0].Contains("dryrun"))); if (dryRun) { Console.WriteLine("Doing a dry run"); } try { Console.WriteLine("=========================== Front Matter ==================================="); var sectionMap = new TocSectionNumberBuilder("standard", "../standard", dryRun); sectionMap.AddFrontMatterTocEntries( ("Foreword", "foreword.md"), ("Introduction", "introduction.md") ); Console.WriteLine("================= GENERATE UPDATED SECTION NUMBERS ========================="); Console.WriteLine("============================ Main text======================================"); foreach (var file in mainBodyFiles) { Console.WriteLine($" -- {file}"); await sectionMap.AddContentsToTOC(file); } Console.WriteLine("============================= Annexes ======================================"); sectionMap.FinishMainSection(); foreach (var file in annexFiles) { Console.WriteLine($" -- {file}"); await sectionMap.AddContentsToTOC(file); } if (!dryRun) { Console.WriteLine("Update TOC"); var existingReadMe = await ReadExistingReadMe(); using var readme = new StreamWriter(ReadMePath, false); await readme.WriteAsync(existingReadMe); await readme.WriteLineAsync(TOCHeader); await readme.WriteLineAsync(); await readme.WriteAsync(sectionMap.Toc); } Console.WriteLine("======================= UPDATE ALL REFERENCES =============================="); var fixup = new ReferenceUpdateProcessor("../standard", sectionMap.LinkMap, dryRun); Console.WriteLine("=========================== Front Matter ==================================="); foreach (var file in frontMatter) { Console.WriteLine($" -- {file}"); await fixup.ReplaceReferences(file); } Console.WriteLine("============================ Main text======================================"); foreach (var file in mainBodyFiles) { Console.WriteLine($" -- {file}"); await fixup.ReplaceReferences(file); } Console.WriteLine("============================= Annexes ======================================"); foreach (var file in annexFiles) { Console.WriteLine($" -- {file}"); await fixup.ReplaceReferences(file); } } catch (InvalidOperationException e) { Console.WriteLine("\tError encountered:"); Console.WriteLine(e.Message.ToString()); Console.WriteLine("To recover, do the following:"); Console.WriteLine("1. Discard all changes from the section numbering tool"); Console.WriteLine("2. Fix the error noted above."); Console.WriteLine("3. Run the tool again."); } }