feat: Adds generate commands that call to pandoc to generate pdf, latex, and html files from a project.

This commit is contained in:
2024-12-13 15:33:20 -05:00
parent d1b3379815
commit 3f56dda568
22 changed files with 606 additions and 57 deletions

View File

@@ -1,9 +1,12 @@
import Foundation
// NOTE: When adding items, then the 'hpa.toml' resource file needs to be updated.
/// Represents configurable settings for the command line tool.
public struct Configuration: Codable, Equatable, Sendable {
public let args: [String]?
public let useVaultArgs: Bool
public let generate: Generate?
public let playbook: Playbook?
public let template: Template
public let vault: Vault
@@ -11,12 +14,14 @@ public struct Configuration: Codable, Equatable, Sendable {
public init(
args: [String]? = nil,
useVaultArgs: Bool = true,
generate: Generate? = nil,
playbook: Playbook? = nil,
template: Template = .init(),
vault: Vault = .init()
) {
self.args = args
self.useVaultArgs = useVaultArgs
self.generate = generate
self.playbook = playbook
self.template = template
self.vault = vault
@@ -32,6 +37,40 @@ public struct Configuration: Codable, Equatable, Sendable {
)
}
public struct Generate: Codable, Equatable, Sendable {
public let buildDirectory: String?
public let files: [String]?
public let includeInHeader: [String]?
public let outputFileName: String?
public let pdfEngine: String?
public init(
buildDirectory: String? = nil,
files: [String]? = nil,
includeInHeader: [String]? = nil,
outputFileName: String? = nil,
pdfEngine: String? = nil
) {
self.buildDirectory = buildDirectory
self.files = files
self.includeInHeader = includeInHeader
self.outputFileName = outputFileName
self.pdfEngine = pdfEngine
}
public static let `default` = Self.mock
public static var mock: Self {
.init(
buildDirectory: ".build",
files: ["Report.md", "Definitions.md"],
includeInHeader: ["head.tex", "footer.tex"],
outputFileName: "Report",
pdfEngine: "xelatex"
)
}
}
public struct Playbook: Codable, Equatable, Sendable {
public let directory: String?