// // FontToolContentGenerator.swift // // // Created by Thibaut Schmitt on 13/12/2021. // import Foundation import ToolCore class FontExtensionGenerator { private static func getFontNameEnum(fontsNames: [FontName]) -> String { var enumDefinition = " enum FontName: String {\n" fontsNames.forEach { enumDefinition += " case \($0.fontNameSanitize) = \"\($0.postscriptName)\"\n" } enumDefinition += " }\n" return enumDefinition } static func writeExtensionFile(fontsNames: [FontName], staticVar: Bool, extensionName: String, extensionFilePath: String, isSwiftUI: Bool) { // Create extension content let extensionContent = Self.getExtensionContent(fontsNames: fontsNames, staticVar: staticVar, extensionName: extensionName, isSwiftUI: isSwiftUI) // Write content let extensionFilePathURL = URL(fileURLWithPath: extensionFilePath) do { try extensionContent.write(to: extensionFilePathURL, atomically: false, encoding: .utf8) } catch let error { let error = FontsToolError.writeExtension(extensionFilePath, error.localizedDescription) print(error.description) Fonts.exit(withError: error) } } static func getExtensionContent(fontsNames: [FontName], staticVar: Bool, extensionName: String, isSwiftUI: Bool) -> String { [ Self.getHeader(extensionClassname: extensionName, isSwiftUI: isSwiftUI), Self.getFontNameEnum(fontsNames: fontsNames), Self.getFontMethods(fontsNames: fontsNames, staticVar: staticVar, isSwiftUI: isSwiftUI), Self.getFooter() ] .joined(separator: "\n") } private static func getHeader(extensionClassname: String, isSwiftUI: Bool) -> String { """ // Generated by ResgenSwift.\(Fonts.toolName) \(ResgenSwiftVersion) import \(isSwiftUI ? "SwiftUI" : "UIKit") extension \(extensionClassname) {\n """ } private static func getFontMethods(fontsNames: [FontName], staticVar: Bool, isSwiftUI: Bool) -> String { let pragma = " // MARK: - Getter" var propertiesOrMethods: [String] = fontsNames .unique() .map { $0.getProperty(isStatic: staticVar, isSwiftUI: isSwiftUI) } propertiesOrMethods.insert(pragma, at: 0) return propertiesOrMethods.joined(separator: "\n\n") } private static func getFooter() -> String { """ } """ } }