44 lines
1.4 KiB
Swift
44 lines
1.4 KiB
Swift
import Foundation
|
|
import Ink
|
|
|
|
final class PageContentParser {
|
|
|
|
private let language: ContentLanguage
|
|
|
|
private let content: Content
|
|
|
|
private let results: PageGenerationResults
|
|
|
|
// MARK: Markdown handlers
|
|
|
|
private let code: MarkdownCodeProcessor
|
|
|
|
private let headlines: MarkdownHeadlineProcessor
|
|
|
|
private let image: MarkdownImageProcessor
|
|
|
|
private let link: MarkdownLinkProcessor
|
|
|
|
init(content: Content, language: ContentLanguage, results: PageGenerationResults) {
|
|
self.content = content
|
|
self.results = results
|
|
self.language = language
|
|
|
|
self.code = .init(content: content, results: results, language: language)
|
|
self.headlines = .init(content: content, results: results, language: language)
|
|
self.image = .init(content: content, results: results, language: language)
|
|
self.link = .init(content: content, results: results, language: language)
|
|
}
|
|
|
|
func generatePage(from content: String) -> String {
|
|
let parser = MarkdownParser(modifiers: [
|
|
Modifier(target: .images, closure: image.process),
|
|
Modifier(target: .codeBlocks, closure: code.process),
|
|
Modifier(target: .links, closure: link.process),
|
|
Modifier(target: .html, closure: image.html.process),
|
|
Modifier(target: .headings, closure: headlines.process)
|
|
])
|
|
return parser.html(from: content)
|
|
}
|
|
}
|