Remove global configuration and improve printing
This commit is contained in:
parent
58eae51d40
commit
94375f3a81
@ -56,4 +56,13 @@ struct Configuration: Codable {
|
|||||||
var outputDirectory: URL {
|
var outputDirectory: URL {
|
||||||
.init(fileURLWithPath: outputPath)
|
.init(fileURLWithPath: outputPath)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func printOverview() {
|
||||||
|
print(" Source folder: \(contentDirectory.path)")
|
||||||
|
print(" Output folder: \(outputDirectory.path)")
|
||||||
|
print(" Page width: \(pageImageWidth)")
|
||||||
|
print(" Minify JavaScript: \(minifyCSSandJS)")
|
||||||
|
print(" Minify CSS: \(minifyCSSandJS)")
|
||||||
|
print(" Create markdown files: \(createMdFilesIfMissing)")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -14,6 +14,8 @@ final class FileSystem {
|
|||||||
|
|
||||||
private let images: ImageGenerator
|
private let images: ImageGenerator
|
||||||
|
|
||||||
|
private let configuration: Configuration
|
||||||
|
|
||||||
private var tempFile: URL {
|
private var tempFile: URL {
|
||||||
input.appendingPathComponent(FileSystem.tempFileName)
|
input.appendingPathComponent(FileSystem.tempFileName)
|
||||||
}
|
}
|
||||||
@ -68,11 +70,12 @@ final class FileSystem {
|
|||||||
*/
|
*/
|
||||||
private var generatedPages: Set<String> = []
|
private var generatedPages: Set<String> = []
|
||||||
|
|
||||||
init(in input: URL, to output: URL) {
|
init(in input: URL, to output: URL, configuration: Configuration) {
|
||||||
self.input = input
|
self.input = input
|
||||||
self.output = output
|
self.output = output
|
||||||
self.images = .init(input: input, output: output)
|
self.images = .init(input: input, output: output)
|
||||||
self.generatorInfoFolder = input.appendingPathComponent("run")
|
self.generatorInfoFolder = input.appendingPathComponent("run")
|
||||||
|
self.configuration = configuration
|
||||||
}
|
}
|
||||||
|
|
||||||
func urlInOutputFolder(_ path: String) -> URL {
|
func urlInOutputFolder(_ path: String) -> URL {
|
||||||
@ -102,6 +105,10 @@ final class FileSystem {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func contentOfMdFile(atPath path: String, source: String) -> String? {
|
||||||
|
contentOfOptionalFile(atPath: path, source: source, createEmptyFileIfMissing: configuration.createMdFilesIfMissing)
|
||||||
|
}
|
||||||
|
|
||||||
func contentOfOptionalFile(atPath path: String, source: String, createEmptyFileIfMissing: Bool = false) -> String? {
|
func contentOfOptionalFile(atPath path: String, source: String, createEmptyFileIfMissing: Bool = false) -> String? {
|
||||||
let url = input.appendingPathComponent(path)
|
let url = input.appendingPathComponent(path)
|
||||||
guard exists(url) else {
|
guard exists(url) else {
|
||||||
@ -148,6 +155,10 @@ final class FileSystem {
|
|||||||
images.requireMultiVersionImage(source: source, destination: destination, requiredBy: path, width: width, desiredHeight: desiredHeight)
|
images.requireMultiVersionImage(source: source, destination: destination, requiredBy: path, width: width, desiredHeight: desiredHeight)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func requireFullSizeMultiVersionImage(source: String, destination: String, requiredBy path: String) -> NSSize {
|
||||||
|
images.requireMultiVersionImage(source: source, destination: destination, requiredBy: path, width: configuration.pageImageWidth, desiredHeight: nil)
|
||||||
|
}
|
||||||
|
|
||||||
func createImages() {
|
func createImages() {
|
||||||
images.createImages()
|
images.createImages()
|
||||||
}
|
}
|
||||||
|
@ -120,11 +120,10 @@ struct PageContentGenerator {
|
|||||||
private func handleImage(page: Element, file: String, rightTitle: String?, leftTitle: String?) -> String {
|
private func handleImage(page: Element, file: String, rightTitle: String?, leftTitle: String?) -> String {
|
||||||
let imagePath = page.pathRelativeToRootForContainedInputFile(file)
|
let imagePath = page.pathRelativeToRootForContainedInputFile(file)
|
||||||
|
|
||||||
let size = files.requireMultiVersionImage(
|
let size = files.requireFullSizeMultiVersionImage(
|
||||||
source: imagePath,
|
source: imagePath,
|
||||||
destination: imagePath,
|
destination: imagePath,
|
||||||
requiredBy: page.path,
|
requiredBy: page.path)
|
||||||
width: configuration.pageImageWidth)
|
|
||||||
|
|
||||||
let content: [PageImageTemplate.Key : String] = [
|
let content: [PageImageTemplate.Key : String] = [
|
||||||
.image: file.dropAfterLast("."),
|
.image: file.dropAfterLast("."),
|
||||||
|
@ -73,9 +73,7 @@ struct PageGenerator {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private func makeContent(page: Element, metadata: Element.LocalizedMetadata, language: String, path: String) -> (content: String, includesCode: Bool, isEmpty: Bool) {
|
private func makeContent(page: Element, metadata: Element.LocalizedMetadata, language: String, path: String) -> (content: String, includesCode: Bool, isEmpty: Bool) {
|
||||||
let create = configuration.createMdFilesIfMissing
|
if let raw = files.contentOfMdFile(atPath: path, source: page.path)?.trimmed.nonEmpty {
|
||||||
if let raw = files.contentOfOptionalFile(atPath: path, source: page.path, createEmptyFileIfMissing: create)?
|
|
||||||
.trimmed.nonEmpty {
|
|
||||||
let (content, includesCode) = PageContentGenerator(factory: factory.factory)
|
let (content, includesCode) = PageContentGenerator(factory: factory.factory)
|
||||||
.generate(page: page, language: language, content: raw)
|
.generate(page: page, language: language, content: raw)
|
||||||
return (content, includesCode, false)
|
return (content, includesCode, false)
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
import Foundation
|
import Foundation
|
||||||
import ArgumentParser
|
import ArgumentParser
|
||||||
|
|
||||||
var configuration: Configuration!
|
|
||||||
let log = ValidationLog()
|
let log = ValidationLog()
|
||||||
var files: FileSystem!
|
var files: FileSystem!
|
||||||
var siteRoot: Element!
|
var siteRoot: Element!
|
||||||
@ -28,14 +27,34 @@ private func loadSiteData(in folder: URL) throws -> Element? {
|
|||||||
return root
|
return root
|
||||||
}
|
}
|
||||||
|
|
||||||
private func generate(configPath: String) throws {
|
private func loadConfiguration(at configPath: String) -> Configuration? {
|
||||||
|
print("--- CONFIGURATION ----------------------------------")
|
||||||
|
print("")
|
||||||
|
print(" Configuration file: \(configPath)")
|
||||||
let configUrl = URL(fileURLWithPath: configPath)
|
let configUrl = URL(fileURLWithPath: configPath)
|
||||||
let data = try Data(contentsOf: configUrl)
|
let config: Configuration
|
||||||
configuration = try JSONDecoder().decode(from: data)
|
do {
|
||||||
|
let data = try Data(contentsOf: configUrl)
|
||||||
|
config = try JSONDecoder().decode(from: data)
|
||||||
|
} catch {
|
||||||
|
print(" Configuration error: \(error)")
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
config.printOverview()
|
||||||
|
print(" ")
|
||||||
|
return config
|
||||||
|
}
|
||||||
|
|
||||||
|
private func generate(configPath: String) throws {
|
||||||
|
guard let configuration = loadConfiguration(at: configPath) else {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
files = .init(
|
files = .init(
|
||||||
in: configuration.contentDirectory,
|
in: configuration.contentDirectory,
|
||||||
to: configuration.outputDirectory)
|
to: configuration.outputDirectory,
|
||||||
|
configuration: configuration)
|
||||||
|
|
||||||
|
|
||||||
// 2. Scan site elements
|
// 2. Scan site elements
|
||||||
siteRoot = try loadSiteData(in: configuration.contentDirectory)
|
siteRoot = try loadSiteData(in: configuration.contentDirectory)
|
||||||
|
Loading…
Reference in New Issue
Block a user