Ejemplo n.º 1
0
        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);
            }
        }
Ejemplo n.º 2
0
        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.");
            }
        }