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; }
/// <summary> /// Creates a new member generator using the given repository and search context. /// </summary> /// <param name="repository">The repository that is used to generate the models.</param> /// <param name="searchContext">The search context used to get other models from.</param> public MemberGenerator(ReflectionCodeDocMemberRepository repository, CodeDocRepositorySearchContext searchContext) : base(repository, searchContext) { Contract.Requires(repository != null); }