//
// FontTool.swift
//
//
// Created by Thibaut Schmitt on 13/12/2021.
//
import Foundation
import CLIToolCore
import ArgumentParser
/*
Lire l'infoPlist et check si les fonts dedans sont les memes que celles à générer
*/
//swift run -c release FontToolCore ./SampleFiles/Fonts --extension-output-path ~/Desktop --extension-name R2Font
struct FontTool: ParsableCommand {
static let defaultExtensionName = "UIFont"
@Argument(help: "Input folder where fonts to generate are.")
var inputFolder: String
@Option(help: "Path where to generate the extension.")
var extensionOutputPath: String
@Option(help: "Extension name. If not specified, it will generate an UIFont extension")
var extensionName: String = Self.defaultExtensionName
public func run() throws {
print("[FontTool] Starting fonts generation")
let fontsData = FontToolHelper.getFontsData(fromInputFolder: inputFolder)
let extensionHeader = FontToolContentGenerator.getExtensionHeader(fontsNames: fontsData.fontsNames)
let extensionDefinitionOpening = "extension \(extensionName) {\n"
let extensionFontsNamesEnum = FontToolContentGenerator.getFontNameEnum(fontsNames: fontsData.fontsNames)
let extensionFontsMethods = FontToolContentGenerator.getFontMethods(fontsNames: fontsData.fontsNames, isUIFontExtension: isUIFontExtension())
let extensionDefinitionClosing = "}"
generateExtensionFile(extensionHeader,
extensionDefinitionOpening,
extensionFontsNamesEnum,
extensionFontsMethods,
extensionDefinitionClosing)
print("Info.plist information:")
print("\(generatePlistUIAppFonts(fontsNames: fontsData.fontsNames))")
print("[FontTool] Fonts generated")
}
private func generateExtensionFile(_ args: String...) {
// Create output path
let extensionFilePath = "\(extensionOutputPath)/\(extensionName)+Font.swift"
// Create file if not exists
let fileManager = FileManager()
if fileManager.fileExists(atPath: extensionFilePath) == false {
Shell.shell("touch", "\(extensionFilePath)")
}
// Create extension content
let extensionContent = args.joined(separator: "\n")
// Write content
let extensionFilePathURL = URL(fileURLWithPath: extensionFilePath)
try! extensionContent.write(to: extensionFilePathURL, atomically: true, encoding: .utf8)
}
private func generatePlistUIAppFonts(fontsNames: [String]) -> String {
var plistData = "UIAppFonts\n\t\n"
fontsNames
.compactMap { $0 }
.forEach {
plistData += "\t\t\($0)\n"
}
plistData += "\t\n*/"
return plistData
}
// MARK: - Helpers
private func isUIFontExtension() -> Bool {
extensionName == Self.defaultExtensionName
}
}
FontTool.main()