From 9e6ee2c4996bd4158d3e2c159fce0a7f293a4d91 Mon Sep 17 00:00:00 2001 From: Christoph Hagen Date: Fri, 9 Sep 2022 13:29:31 +0200 Subject: [PATCH] Use argument parser --- Package.swift | 2 ++ Sources/Generator/main.swift | 50 ------------------------------------ Sources/Generator/run.swift | 43 +++++++++++++++++++++++++++++++ 3 files changed, 45 insertions(+), 50 deletions(-) delete mode 100644 Sources/Generator/main.swift create mode 100644 Sources/Generator/run.swift diff --git a/Package.swift b/Package.swift index daf8915..9297e80 100644 --- a/Package.swift +++ b/Package.swift @@ -12,6 +12,7 @@ let package = Package( dependencies: [ .package(url: "https://github.com/johnsundell/ink.git", from: "0.5.0"), .package(url: "https://github.com/JohnSundell/Splash", from: "0.16.0"), + .package(url: "https://github.com/apple/swift-argument-parser", from: "1.0.0"), ], targets: [ .executableTarget( @@ -19,6 +20,7 @@ let package = Package( dependencies: [ .product(name: "Ink", package: "ink"), .product(name: "Splash", package: "Splash"), + .product(name: "ArgumentParser", package: "swift-argument-parser"), ]), ] ) diff --git a/Sources/Generator/main.swift b/Sources/Generator/main.swift deleted file mode 100644 index 2198310..0000000 --- a/Sources/Generator/main.swift +++ /dev/null @@ -1,50 +0,0 @@ -import Foundation - -#warning("TODO: Add markdown box command: ![box](title;body)") -#warning("TODO: Add pretty link to other page in page content: ![page](page_id)") -#warning("TODO: Improve display of processed image list and warnings") - -let args = CommandLine.arguments - -guard args.count == 2 else { - print("Invalid argument list") - print("Usage: generator config-path") - exit(1) -} - -let configuration: Configuration -do { - let configUrl = URL(fileURLWithPath: args[1]) - let data = try Data(contentsOf: configUrl) - configuration = try JSONDecoder().decode(from: data) -} catch { - print("Failed to read configuration: \(error)") - exit(1) -} - -let log = ValidationLog() -let files = FileSystem( - in: configuration.contentDirectory, - to: configuration.outputDirectory) - -guard let siteData = Element(atRoot: configuration.contentDirectory) else { - exit(0) -} - -do { - let siteGenerator = try SiteGenerator() - siteGenerator.generate(site: siteData) -} catch { - print("Failed to generate website: \(error)") - exit(2) -} - -files.printGeneratedPages() -files.printEmptyPages() -files.printDraftPages() - -files.createImages() -print("Images generated") -files.copyRequiredFiles() -files.printExternalFiles() -files.writeHashes() diff --git a/Sources/Generator/run.swift b/Sources/Generator/run.swift new file mode 100644 index 0000000..7f52d11 --- /dev/null +++ b/Sources/Generator/run.swift @@ -0,0 +1,43 @@ +import Foundation +import ArgumentParser + +var configuration: Configuration! +let log = ValidationLog() +var files: FileSystem! + +@main +struct CHGenerator: ParsableCommand { + + @Argument(help: "The path to the generator configuration file") + var configPath: String + + mutating func run() throws { + try generate(configPath: configPath) + } +} + +private func generate(configPath: String) throws { + let configUrl = URL(fileURLWithPath: configPath) + let data = try Data(contentsOf: configUrl) + configuration = try JSONDecoder().decode(from: data) + + files = .init( + in: configuration.contentDirectory, + to: configuration.outputDirectory) + + guard let siteData = Element(atRoot: configuration.contentDirectory) else { + return + } + let siteGenerator = try SiteGenerator() + siteGenerator.generate(site: siteData) + + files.printGeneratedPages() + files.printEmptyPages() + files.printDraftPages() + + files.createImages() + print("Images generated") + files.copyRequiredFiles() + files.printExternalFiles() + files.writeHashes() +}