public static void doc_page_event() { RazorEngine.Razor.SetTemplateService(new RazorEngine.Templating.TemplateService()); using (var testFolder = DirectoryLifetimeManager.Create()) { var templateDirectory = testFolder.Directory.CreateSubdirectory("templates"); var outputDirectory = testFolder.Directory.CreateSubdirectory("out"); File.WriteAllText( Path.Combine(templateDirectory.FullName, "_event.cshtml"), @"<html><h1>@Model.ShortName</h1></html>"); var apiPageGen = new StaticApiPageGenerator { TemplateDirectory = templateDirectory, OutputDirectory = outputDirectory, TargetRepository = CreateTestLibrary1Repository() }; var result = apiPageGen.GenerateForTarget(new CRefIdentifier("E:TestLibrary1.Class1.DoStuff")); result.Should().NotBeNull(); result.Exists.Should().BeTrue(); File.ReadAllText(result.FullName).Should().Be(@"<html><h1>DoStuff</h1></html>"); } }
public static void doc_page_link_to_others() { RazorEngine.Razor.SetTemplateService(new RazorEngine.Templating.TemplateService()); using (var testFolder = DirectoryLifetimeManager.Create()) { var templateDirectory = testFolder.Directory.CreateSubdirectory("templates"); var outputDirectory = testFolder.Directory.CreateSubdirectory("out"); File.WriteAllText( Path.Combine(templateDirectory.FullName, "_type.cshtml"), @"@using DuckyDocs.CodeDoc @using DuckyDocs.SiteBuilder <html><h1>@Model.ShortName</h1>@foreach(var field in Model.Fields.Cast<CodeDocField>()){ <div><a href=""@(StaticApiPageGenerator.CreateSlugName(field.CRef)).html"">@field.ShortName</a></div> }</html>"); var apiPageGen = new StaticApiPageGenerator { TemplateDirectory = templateDirectory, OutputDirectory = outputDirectory, TargetRepository = CreateTestLibrary1Repository() }; var result = apiPageGen.GenerateForTarget(new CRefIdentifier("T:TestLibrary1.Class1")); var resultText = File.ReadAllText(result.FullName); result.Should().NotBeNull(); result.Exists.Should().BeTrue(); resultText.Should().StartWith(@"<html><h1>Class1</h1>"); resultText.Should().Contain(@"<a href=""TestLibrary1.Class1.SomeField-F.html"">SomeField</a>"); resultText.Should().EndWith(@"</html>"); } }
public static void dump_entire_repository() { RazorEngine.Razor.SetTemplateService(new RazorEngine.Templating.TemplateService()); using (var testFolder = DirectoryLifetimeManager.Create()) { var templateDirectory = testFolder.Directory.CreateSubdirectory("templates"); var outputDirectory = testFolder.Directory.CreateSubdirectory("out"); File.WriteAllText( Path.Combine(templateDirectory.FullName, "_type.cshtml"), @"@using DuckyDocs.CodeDoc @using DuckyDocs.SiteBuilder <html><h1>@Model.ShortName</h1>@foreach(var field in (Model.Fields ?? Enumerable.Empty<ICodeDocMember>()).Cast<CodeDocField>()){ <div><a href=""@(StaticApiPageGenerator.CreateSlugName(field.CRef)).html"">@field.ShortName</a></div> }</html>"); File.WriteAllText( Path.Combine(templateDirectory.FullName, "_namespace.cshtml"), @"@using DuckyDocs.CodeDoc @using DuckyDocs.SiteBuilder <html><h1>@Model.ShortName</h1>@foreach(var typeCRef in Model.TypeCRefs){ var typeModel = ViewBag.GetTargetPreviewModel(typeCRef); <div><a href=""@(StaticApiPageGenerator.CreateSlugName(typeModel.CRef)).html"">@typeModel.ShortName</a></div> }</html>"); foreach (var fileName in new[] { "_delegate.cshtml", "_method.cshtml", "_field.cshtml", "_property.cshtml", "_event.cshtml" }) { File.WriteAllText( Path.Combine(templateDirectory.FullName, fileName), @"<html><h1>@Model.ShortName</h1></html>"); } var apiPageGen = new StaticApiPageGenerator { TemplateDirectory = templateDirectory, OutputDirectory = outputDirectory, TargetRepository = CreateTestLibrary1Repository() }; var results = apiPageGen.GenerateForAllTargets(); var resultShortNames = results.Select(x => x.Name); resultShortNames.Should().Contain("InGlobal.Nope-M.html"); resultShortNames.Should().Contain("-N.html"); resultShortNames.Should().Contain("Test.Annotations-N.html"); resultShortNames.Should().Contain("TestLibrary1.Class1.Inner-T.html"); resultShortNames.Should().Contain("TestLibrary1.PublicExposedTestClass.ProtectedEvent-E.html"); resultShortNames.Should().Contain("TestLibrary1.ClassWithContracts.Stuff-P.html"); resultShortNames.Should().Contain("TestLibrary1.Class1.MyFunc-T.html"); resultShortNames.Any(x => x.StartsWith("TestLibrary1.Class1.TrySomeOutRefStuff-")).Should().BeTrue(); resultShortNames.Any(x => x.StartsWith("TestLibrary1.Generic1.AMix-")).Should().BeTrue(); resultShortNames.Should().NotContain("System.Attribute.GetHashCode-M.html"); resultShortNames.Should().NotContain("System.Object.ToString-M.html"); } }
static int Main(string[] args) { var parsedArgs = ProgramArgs.Parse(args); if (parsedArgs == null) { return (int)ExitCodes.QuackQuackQuaaack; } if (parsedArgs.HelpRequested) { return (int)ExitCodes.LuckyDuck; } if (!parsedArgs.NoSplash) { new Splash().Print(); } if (parsedArgs.OutputFolder == null) { return Error("output folder is required."); } var outputDirectory = new DirectoryInfo(parsedArgs.OutputFolder); if (!outputDirectory.Exists) { outputDirectory.Create(); Thread.Sleep(100); } if (parsedArgs.DocsSources != null && parsedArgs.DocsSources.Count > 0) { var converter = new StaticPageConverter(); foreach (var docSource in parsedArgs.DocsSources) { var request = new StaticPageConverterRequest { Recursive = true, RelativeDestination = outputDirectory.FullName, Source = docSource }; var result = converter.Convert(request).ToList(); ColorConsole.WriteLine("[Complete]: ".Green(), "batch content file".ToQuantity(result.Count)); } } if (parsedArgs.TargetAssemblies != null && parsedArgs.TargetAssemblies.Count > 0) { var targetAssemblies = parsedArgs.TargetAssemblies .Select(f => Assembly.ReflectionOnlyLoadFrom(new FileInfo(f).FullName)) .ToList(); var xmlFiles = (parsedArgs.XmlDocLocations ?? Enumerable.Empty<string>()) .SelectMany(loc => { var fi = new FileInfo(loc); if (fi.Exists) { return new[] { fi }; } var di = new DirectoryInfo(loc); if (di.Exists) { return di.EnumerateFiles("*.xml"); } return Enumerable.Empty<FileInfo>(); }) .Select(fi => new XmlAssemblyDocument(fi.FullName)) .ToList(); var repository = new ReflectionCodeDocMemberRepository( new ReflectionCRefLookup(targetAssemblies), xmlFiles); var supportRepository = new MsdnCodeDocMemberRepository(); var apiOutputDirectory = new DirectoryInfo(Path.Combine(parsedArgs.OutputFolder, "api")); if (!apiOutputDirectory.Exists) { apiOutputDirectory.Create(); Thread.Sleep(100); } var generator = new StaticApiPageGenerator { OutputDirectory = apiOutputDirectory, TemplateDirectory = new DirectoryInfo(parsedArgs.TemplatesDirectory ?? "./"), TargetRepository = repository, SupportingRepository = supportRepository }; var results = generator.GenerateForAllTargets().ToList(); ColorConsole.WriteLine("[Complete]: ".Green(), "api doc file".ToQuantity(results.Count)); } return (int)ExitCodes.LuckyDuck; }