final class PageGenerator { private let content: Content private let imageGenerator: ImageGenerator private let navigationBarData: NavigationBarData let results = GenerationResultsHandler() init(content: Content, imageGenerator: ImageGenerator, navigationBarData: NavigationBarData) { self.content = content self.imageGenerator = imageGenerator self.navigationBarData = navigationBarData } func generate(page: Page, language: ContentLanguage) throws -> String { let contentGenerator = PageContentParser( page: page, content: content, language: language, results: results, imageGenerator: imageGenerator) let rawPageContent = try content.storage.pageContent(for: page.id, language: language) let pageContent = contentGenerator.generatePage(from: rawPageContent) let localized = page.localized(in: language) let tags: [FeedEntryData.Tag] = page.tags.map { tag in .init(name: tag.localized(in: language).name, url: content.tagLink(tag, language: language)) } return ContentPage( language: language, dateString: page.dateText(in: language), title: localized.title, tags: tags, linkTitle: localized.linkPreviewTitle ?? localized.title, description: localized.linkPreviewDescription ?? "", navigationBarData: navigationBarData, pageContent: pageContent) .content } }