public PrinceController(ManualSectionStore manualSectionStore, IMarkdownRenderer markdownRenderer, CoversheetConfig coversheetConfig) { _manualSectionStore = manualSectionStore; _markdownRenderer = markdownRenderer; _coversheetConfig = coversheetConfig; }
public async Task <IManualWeb> BuildManual() { var webBuilder = _serviceProvider.GetRequiredService <IWebBuilder>(); var resourcesDirectory = Path.Combine(_options.ContentDirectory, "resources"); if (await Task.Run(() => Directory.Exists(resourcesDirectory))) { webBuilder.RegisterDirectory("/resources", resourcesDirectory); } webBuilder.RegisterMvc("/", new { controller = "Home", action = "Index" }); var languages = await _manualTranslations.GetLanguages(); foreach (var language in languages) { webBuilder.RegisterMvc($"/prince/{language}/template", new { controller = "Prince", action = "Template", language }); webBuilder.RegisterMvc($"/prince/{language}/output.pdf", new { controller = "Prince", action = "Pdf", language }); } // Register our static files. webBuilder.RegisterDirectory("/Users/pknopf/git/docgen/src/DocGen.Web.Manual/Internal/Resources/wwwroot"); CoversheetConfig coversheet = null; var sections = new ManualSectionStore(); foreach (var markdownFile in await Task.Run(() => Directory.GetFiles(_options.ContentDirectory, "*.md"))) { var content = await Task.Run(() => File.ReadAllText(markdownFile)); var yaml = _yamlParser.ParseYaml(content); if (yaml.Yaml == null) { yaml = new YamlParseResult(JsonConvert.DeserializeObject("{}"), yaml.Markdown); } var type = "Content"; if (!string.IsNullOrEmpty((string)yaml.Yaml.Type)) { type = yaml.Yaml.Type; } switch (type) { case "Coversheet": if (coversheet != null) { throw new DocGenException("Multiple coversheets detected"); } coversheet = new CoversheetConfig(); coversheet.ProductImage = yaml.Yaml.ProductImage; coversheet.ProductLogo = yaml.Yaml.ProductLogo; coversheet.Model = yaml.Yaml.Model; coversheet.Text = yaml.Yaml.Text; break; case "Content": var order = (int?)yaml.Yaml.Order; var title = (string)yaml.Yaml.Title; if (string.IsNullOrEmpty(title)) { throw new DocGenException($"The file {markdownFile} needs a title."); } foreach (var language in languages) { sections.AddMarkdown(language, _translator.Translate(language, title) , order ?? 0, _markdownTransformer.TransformMarkdown( yaml.Markdown, DocgenDefaults.GetDefaultPipeline(), x => _translator.Translate(language, x)), markdownFile); } break; default: throw new DocGenException("Unknown contente type"); } } if (coversheet == null) { throw new DocGenException("You must provide a coversheet"); } webBuilder.RegisterServices(services => { services.AddMvc(); services.Configure <RazorViewEngineOptions>(options => { options.FileProviders.Add(new PhysicalFileProvider("/Users/pknopf/git/docgen/src/DocGen.Web.Manual/Internal/Resources")); var templateDirectory = Path.Combine(_options.ContentDirectory, "templates"); if (Directory.Exists(templateDirectory)) { options.FileProviders.Add(new PhysicalFileProvider(templateDirectory)); } }); services.AddSingleton(_translator); services.AddSingleton(_manualTranslations); services.AddSingleton(sections); services.AddSingleton(coversheet); services.AddSingleton(_symbolGlossaryStore); // These regitrations are so that our controllers can inject core DocGen services. DocGen.Core.Services.Register(services); }); return(new ManualWeb(webBuilder)); }