Пример #1
0
        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());
                    }
                }
            }));
        }
Пример #2
0
        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);
                }
            }
        }