public Task <int> Execute() { return(ConsoleTask.ExecuteAsync(this, async(console) => { foreach (var file in GetMatchingFiles(InputFile)) { console.Write("Generating doc for "); console.WriteLine(file); var metadata = PackageMetadataProvider.FromFile(file); var outputPath = Output.Replace("*", CleanFileName(metadata.Title)); var writer = new DocumentationWriter(); var extension = Path.GetExtension(outputPath).ToUpperInvariant().TrimStart('.'); switch (extension) { case "PUML": case "TXT": writer.Format = DiagramFormat.PlantUml; writer.Output = DocumentOutput.Diagram; break; case "SVG": case "PNG": writer.Format = (DiagramFormat)Enum.Parse(typeof(DiagramFormat), extension, true); writer.Output = DocumentOutput.Diagram; break; case "MD": writer.Format = DiagramFormat.PlantUml; writer.Output = DocumentOutput.Markdown; break; } try { using (var stream = File.OpenWrite(outputPath)) await writer.WriteAsync(metadata, stream); } catch (Exception ex) { console.WriteLine("Error documenting " + file); console.WriteLine(ex.ToString()); } } })); }
public async Task WriteAsync(PackageMetadataProvider metadata, Stream stream) { var entityDiagram = EntityDiagram.FromTypes(metadata.ItemTypes, metadata.Title); ImageWriter = ImageWriter ?? new HttpImageWriter(); ImageWriter.Format = Format.ToString().ToLowerInvariant(); ImageWriter.Writer = ImageWriter.Writer ?? new PlantUmlWriter(); if (Output == DocumentOutput.Markdown) { using (var writer = new StreamWriter(stream)) { writer.WriteLine("# Data Model"); writer.WriteLine(); await WriteDiagramMarkdown(entityDiagram, writer); writer.WriteLine(); var mdWriter = new MarkdownVisitor(writer); var itemTypes = OrderTypes(metadata.ItemTypes.Where(i => !i.IsUiOnly).OrderBy(i => i.Name)).ToList(); foreach (var itemType in itemTypes) { mdWriter.Visit(Document.FromItemType(itemType, new DocumentOptions() { IncludeCrossReferenceLinks = false, IncludeCoreProperties = false }, metadata)); } writer.WriteLine(); foreach (var group in metadata.Diagrams.GroupBy(d => d.Type)) { writer.WriteLine("# " + group.Key); writer.WriteLine(); foreach (var diagram in group) { var name = diagram.Name; if (!string.IsNullOrEmpty(diagram.Label) && !string.Equals(diagram.Label, diagram.Name, StringComparison.OrdinalIgnoreCase)) { name += $" ({diagram.Label})"; } writer.WriteLine("## " + name); writer.WriteLine(); await WriteDiagramMarkdown(diagram, writer); writer.WriteLine(); } } } } else { if (Format == DiagramFormat.PlantUml) { await entityDiagram.WriteAsync(ImageWriter.Writer, new StreamWriter(stream)); } else { ImageWriter.Format = Format.ToString().ToLowerInvariant(); await entityDiagram.WriteAsync(ImageWriter, stream); } } }