diff options
Diffstat (limited to 'ThirdParty/CsvHelper-master/docs-src/CsvHelper.DocsGenerator/Startup.cs')
-rw-r--r-- | ThirdParty/CsvHelper-master/docs-src/CsvHelper.DocsGenerator/Startup.cs | 110 |
1 files changed, 110 insertions, 0 deletions
diff --git a/ThirdParty/CsvHelper-master/docs-src/CsvHelper.DocsGenerator/Startup.cs b/ThirdParty/CsvHelper-master/docs-src/CsvHelper.DocsGenerator/Startup.cs new file mode 100644 index 0000000..698a60d --- /dev/null +++ b/ThirdParty/CsvHelper-master/docs-src/CsvHelper.DocsGenerator/Startup.cs @@ -0,0 +1,110 @@ +using CsvHelper.DocsGenerator.Generators; +using CsvHelper.DocsGenerator.Infos; +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; +using System.IO; +using System.Linq; +using System.Xml.Linq; + +namespace CsvHelper.DocsGenerator +{ + public class Startup + { + public Startup Configure() + { + return this; + } + + public Startup Run() + { + var outputDirectoryPath = Path.Combine(Directory.GetCurrentDirectory(), "Output"); + if (Directory.Exists(outputDirectoryPath)) + { + Directory.Delete(outputDirectoryPath, true); + } + + Directory.CreateDirectory(outputDirectoryPath); + + var xmlDocs = XElement.Load("CsvHelper.xml"); + + var assemblyInfo = new AssemblyInfo(typeof(CsvHelperException).Assembly, xmlDocs); + + GenerateMarkdownFiles(outputDirectoryPath, assemblyInfo); + GenerateToc(outputDirectoryPath, assemblyInfo); + + return this; + } + + private void GenerateMarkdownFiles(string outputDirectoryPath, AssemblyInfo assemblyInfo) + { + var documentGeneratorFactory = new DocumentGeneratorFactory(); + + // Write assembly file. + var documentGenerator = documentGeneratorFactory.Create(assemblyInfo); + var content = documentGenerator.Generate(); + var filePath = Path.Combine(outputDirectoryPath, "api.md"); + File.WriteAllText(filePath, content); + + outputDirectoryPath = Path.Combine(outputDirectoryPath, "api"); + Directory.CreateDirectory(outputDirectoryPath); + + // Write namespace files and directories. + foreach (var @namespace in assemblyInfo.Namespaces) + { + var directoryPath = Path.Combine(outputDirectoryPath, @namespace.Namespace); + if (!Directory.Exists(directoryPath)) + { + Directory.CreateDirectory(directoryPath); + } + + documentGenerator = documentGeneratorFactory.Create(@namespace); + content = documentGenerator.Generate(); + filePath = Path.Join(outputDirectoryPath, $"{@namespace.Namespace}.md"); + File.WriteAllText(filePath, content); + } + + // Write type files. + foreach (var @namespace in assemblyInfo.Namespaces) + { + var directoryPath = Path.Combine(outputDirectoryPath, @namespace.Namespace); + foreach (var typeInfo in @namespace.Types) + { + documentGenerator = documentGeneratorFactory.Create(typeInfo); + content = documentGenerator.Generate(); + filePath = Path.Combine(directoryPath, $"{typeInfo.Type.Name}.md"); + File.WriteAllText(filePath, content); + } + } + } + + private void GenerateToc(string outputDirectoryPath, AssemblyInfo assemblyInfo) + { + var toc = new JObject + ( + new JProperty("api", new JObject + ( + new JProperty("title", "CsvHelper Namespaces"), + new JProperty("path", "api"), + new JProperty("children", new JArray + ( + assemblyInfo.Namespaces.Select(namespaceInfo => new JObject( + new JProperty("title", namespaceInfo.Namespace), + new JProperty("path", $"api/{namespaceInfo.Namespace}"), + new JProperty("children", new JArray + ( + namespaceInfo.Types.Select(typeInfo => new JObject + ( + new JProperty("title", typeInfo.Type.Name), + new JProperty("path", $"api/{namespaceInfo.Namespace}/{typeInfo.Type.Name}") + )) + )) + )) + )) + )) + ); + + var filePath = Path.Combine(outputDirectoryPath, "api.json"); + File.WriteAllText(filePath, JsonConvert.SerializeObject(toc, Formatting.Indented)); + } + } +} |