feat(RES-58): Add new parameter "bundle" (#19)
All checks were successful
gitea-openium/resgen.swift/pipeline/head This commit looks good
All checks were successful
gitea-openium/resgen.swift/pipeline/head This commit looks good
Add bundle parameter to define if resource should be load from Bundle.main (app) or Bundle.module (SPM package) Reviewed-on: #19
This commit is contained in:
@@ -49,7 +49,7 @@ struct Analytics: ParsableCommand {
|
||||
sections: sections,
|
||||
target: options.target,
|
||||
tags: ["ios", "iosonly"],
|
||||
staticVar: options.staticMembers,
|
||||
isStatic: options.staticMembers,
|
||||
outputFile: options.outputFile,
|
||||
visibility: options.extensionVisibility
|
||||
)
|
||||
|
@@ -22,7 +22,7 @@ enum AnalyticsGenerator {
|
||||
sections: [AnalyticsCategory],
|
||||
target: String,
|
||||
tags: [String],
|
||||
staticVar: Bool,
|
||||
isStatic: Bool,
|
||||
outputFile: String,
|
||||
visibility: ExtensionVisibility
|
||||
) {
|
||||
@@ -43,7 +43,7 @@ enum AnalyticsGenerator {
|
||||
targets: targets,
|
||||
sections: sections,
|
||||
tags: tags,
|
||||
staticVar: staticVar,
|
||||
isStatic: isStatic,
|
||||
visibility: visibility
|
||||
)
|
||||
|
||||
@@ -64,19 +64,19 @@ enum AnalyticsGenerator {
|
||||
targets: [TrackerType],
|
||||
sections: [AnalyticsCategory],
|
||||
tags: [String],
|
||||
staticVar: Bool,
|
||||
isStatic: Bool,
|
||||
visibility: ExtensionVisibility
|
||||
) -> String {
|
||||
[
|
||||
getHeader(
|
||||
targets: targets,
|
||||
staticVar: staticVar,
|
||||
isStatic: isStatic,
|
||||
visibility: visibility
|
||||
),
|
||||
getProperties(
|
||||
sections: sections,
|
||||
tags: tags,
|
||||
staticVar: staticVar,
|
||||
isStatic: isStatic,
|
||||
visibility: visibility
|
||||
),
|
||||
getFooter()
|
||||
@@ -88,7 +88,7 @@ enum AnalyticsGenerator {
|
||||
|
||||
private static func getHeader(
|
||||
targets: [TrackerType],
|
||||
staticVar: Bool,
|
||||
isStatic: Bool,
|
||||
visibility: ExtensionVisibility
|
||||
) -> String {
|
||||
"""
|
||||
@@ -306,7 +306,7 @@ enum AnalyticsGenerator {
|
||||
private static func getProperties(
|
||||
sections: [AnalyticsCategory],
|
||||
tags: [String],
|
||||
staticVar: Bool,
|
||||
isStatic: Bool,
|
||||
visibility: ExtensionVisibility
|
||||
) -> String {
|
||||
sections
|
||||
@@ -322,7 +322,7 @@ enum AnalyticsGenerator {
|
||||
return // Go to next definition
|
||||
}
|
||||
|
||||
if staticVar {
|
||||
if isStatic {
|
||||
res += "\n\n\(definition.getStaticProperty(visibility: visibility))"
|
||||
} else {
|
||||
res += "\n\n\(definition.getProperty(visibility: visibility))"
|
||||
|
@@ -59,11 +59,12 @@ struct Colors: ParsableCommand {
|
||||
let extensionFilePath = options.extensionFilePath {
|
||||
ColorExtensionGenerator.writeExtensionFile(
|
||||
colors: parsedColors,
|
||||
staticVar: options.staticMembers,
|
||||
isStatic: options.staticMembers,
|
||||
extensionName: extensionName,
|
||||
extensionFilePath: extensionFilePath,
|
||||
isSwiftUI: true,
|
||||
visibility: options.extensionVisibility
|
||||
visibility: options.extensionVisibility,
|
||||
assetBundle: options.assetBundle
|
||||
)
|
||||
}
|
||||
|
||||
@@ -72,11 +73,12 @@ struct Colors: ParsableCommand {
|
||||
let extensionFilePathUIKit = options.extensionFilePathUIKit {
|
||||
ColorExtensionGenerator.writeExtensionFile(
|
||||
colors: parsedColors,
|
||||
staticVar: options.staticMembers,
|
||||
isStatic: options.staticMembers,
|
||||
extensionName: extensionNameUIKit,
|
||||
extensionFilePath: extensionFilePathUIKit,
|
||||
isSwiftUI: false,
|
||||
visibility: options.extensionVisibility
|
||||
visibility: options.extensionVisibility,
|
||||
assetBundle: options.assetBundle
|
||||
)
|
||||
}
|
||||
|
||||
|
@@ -5,6 +5,8 @@
|
||||
// Created by Thibaut Schmitt on 17/01/2022.
|
||||
//
|
||||
|
||||
// CPD-OFF
|
||||
|
||||
import ArgumentParser
|
||||
import Foundation
|
||||
import ToolCore
|
||||
@@ -44,6 +46,11 @@ struct ColorsToolOptions: ParsableArguments {
|
||||
)
|
||||
var extensionVisibility: ExtensionVisibility = .internal
|
||||
|
||||
@Option(
|
||||
help: "Bundle where the asset are generated"
|
||||
)
|
||||
var assetBundle: AssetBundle = .main
|
||||
|
||||
@Option(
|
||||
help: "Path where to generate the extension.",
|
||||
transform: { $0.replaceTiltWithHomeDirectoryPath() }
|
||||
@@ -97,4 +104,4 @@ extension ColorsToolOptions {
|
||||
|
||||
return "\(extensionOutputPath)/\(extensionFileNameUIKit)"
|
||||
}
|
||||
}
|
||||
}// CPD-ON
|
||||
|
@@ -17,19 +17,21 @@ struct ColorExtensionGenerator {
|
||||
|
||||
static func writeExtensionFile(
|
||||
colors: [ParsedColor],
|
||||
staticVar: Bool,
|
||||
isStatic: Bool,
|
||||
extensionName: String,
|
||||
extensionFilePath: String,
|
||||
isSwiftUI: Bool,
|
||||
visibility: ExtensionVisibility
|
||||
visibility: ExtensionVisibility,
|
||||
assetBundle: AssetBundle
|
||||
) {
|
||||
// Create extension content
|
||||
let extensionContent = Self.getExtensionContent(
|
||||
colors: colors,
|
||||
staticVar: staticVar,
|
||||
isStatic: isStatic,
|
||||
extensionName: extensionName,
|
||||
isSwiftUI: isSwiftUI,
|
||||
visibility: visibility
|
||||
visibility: visibility,
|
||||
assetBundle: assetBundle
|
||||
)
|
||||
|
||||
// Write content
|
||||
@@ -45,10 +47,11 @@ struct ColorExtensionGenerator {
|
||||
|
||||
static func getExtensionContent(
|
||||
colors: [ParsedColor],
|
||||
staticVar: Bool,
|
||||
isStatic: Bool,
|
||||
extensionName: String,
|
||||
isSwiftUI: Bool,
|
||||
visibility: ExtensionVisibility
|
||||
visibility: ExtensionVisibility,
|
||||
assetBundle: AssetBundle
|
||||
) -> String {
|
||||
[
|
||||
Self.getHeader(
|
||||
@@ -57,9 +60,10 @@ struct ColorExtensionGenerator {
|
||||
),
|
||||
Self.getProperties(
|
||||
for: colors,
|
||||
withStaticVar: staticVar,
|
||||
withIsStatic: isStatic,
|
||||
isSwiftUI: isSwiftUI,
|
||||
visibility: visibility
|
||||
visibility: visibility,
|
||||
assetBundle: assetBundle
|
||||
),
|
||||
Self.getFooter()
|
||||
]
|
||||
@@ -85,15 +89,17 @@ struct ColorExtensionGenerator {
|
||||
|
||||
private static func getProperties(
|
||||
for colors: [ParsedColor],
|
||||
withStaticVar staticVar: Bool,
|
||||
withIsStatic isStatic: Bool,
|
||||
isSwiftUI: Bool,
|
||||
visibility: ExtensionVisibility
|
||||
visibility: ExtensionVisibility,
|
||||
assetBundle: AssetBundle
|
||||
) -> String {
|
||||
colors.map {
|
||||
$0.getColorProperty(
|
||||
isStatic: staticVar,
|
||||
isStatic: isStatic,
|
||||
isSwiftUI: isSwiftUI,
|
||||
visibility: visibility
|
||||
visibility: visibility,
|
||||
assetBundle: assetBundle
|
||||
)
|
||||
}
|
||||
.joined(separator: "\n\n")
|
||||
|
@@ -83,20 +83,21 @@ struct ParsedColor {
|
||||
func getColorProperty(
|
||||
isStatic: Bool,
|
||||
isSwiftUI: Bool,
|
||||
visibility: ExtensionVisibility
|
||||
visibility: ExtensionVisibility,
|
||||
assetBundle: AssetBundle
|
||||
) -> String {
|
||||
if isSwiftUI {
|
||||
return """
|
||||
/// Color \(name) is \(light) (light) or \(dark) (dark)"
|
||||
\(visibility) \(isStatic ? "static " : "")var \(name): Color {
|
||||
Color("\(name)")
|
||||
Color("\(name)", bundle: Bundle.\(assetBundle))
|
||||
}
|
||||
"""
|
||||
}
|
||||
return """
|
||||
/// Color \(name) is \(light) (light) or \(dark) (dark)"
|
||||
\(isStatic ? "" : "@objc ")\(visibility) \(isStatic ? "static " : "")var \(name): UIColor {
|
||||
UIColor(named: "\(name)")!
|
||||
UIColor(named: "\(name)", in: Bundle.\(assetBundle), compatibleWith: nil)!
|
||||
}
|
||||
"""
|
||||
}
|
||||
|
@@ -54,7 +54,7 @@ struct Fonts: ParsableCommand {
|
||||
// Generate extension
|
||||
FontExtensionGenerator.writeExtensionFile(
|
||||
fontsNames: fontsNames,
|
||||
staticVar: options.staticMembers,
|
||||
isStatic: options.staticMembers,
|
||||
extensionName: options.extensionName,
|
||||
extensionFilePath: options.extensionFilePath,
|
||||
isSwiftUI: true,
|
||||
@@ -65,7 +65,7 @@ struct Fonts: ParsableCommand {
|
||||
let extensionFilePathUIKit = options.extensionFilePathUIKit {
|
||||
FontExtensionGenerator.writeExtensionFile(
|
||||
fontsNames: fontsNames,
|
||||
staticVar: options.staticMembers,
|
||||
isStatic: options.staticMembers,
|
||||
extensionName: extensionNameUIKit,
|
||||
extensionFilePath: extensionFilePathUIKit,
|
||||
isSwiftUI: false,
|
||||
|
@@ -26,7 +26,7 @@ enum FontExtensionGenerator {
|
||||
|
||||
static func writeExtensionFile(
|
||||
fontsNames: [FontName],
|
||||
staticVar: Bool,
|
||||
isStatic: Bool,
|
||||
extensionName: String,
|
||||
extensionFilePath: String,
|
||||
isSwiftUI: Bool,
|
||||
@@ -35,7 +35,7 @@ enum FontExtensionGenerator {
|
||||
// Create extension content
|
||||
let extensionContent = Self.getExtensionContent(
|
||||
fontsNames: fontsNames,
|
||||
staticVar: staticVar,
|
||||
isStatic: isStatic,
|
||||
extensionName: extensionName,
|
||||
isSwiftUI: isSwiftUI,
|
||||
visibility: visibility
|
||||
@@ -54,7 +54,7 @@ enum FontExtensionGenerator {
|
||||
|
||||
static func getExtensionContent(
|
||||
fontsNames: [FontName],
|
||||
staticVar: Bool,
|
||||
isStatic: Bool,
|
||||
extensionName: String,
|
||||
isSwiftUI: Bool,
|
||||
visibility: ExtensionVisibility
|
||||
@@ -70,7 +70,7 @@ enum FontExtensionGenerator {
|
||||
),
|
||||
Self.getFontMethods(
|
||||
fontsNames: fontsNames,
|
||||
staticVar: staticVar,
|
||||
isStatic: isStatic,
|
||||
isSwiftUI: isSwiftUI,
|
||||
visibility: visibility
|
||||
),
|
||||
@@ -94,7 +94,7 @@ enum FontExtensionGenerator {
|
||||
|
||||
private static func getFontMethods(
|
||||
fontsNames: [FontName],
|
||||
staticVar: Bool,
|
||||
isStatic: Bool,
|
||||
isSwiftUI: Bool,
|
||||
visibility: ExtensionVisibility
|
||||
) -> String {
|
||||
@@ -104,7 +104,7 @@ enum FontExtensionGenerator {
|
||||
.unique()
|
||||
.map {
|
||||
$0.getProperty(
|
||||
isStatic: staticVar,
|
||||
isStatic: isStatic,
|
||||
isSwiftUI: isSwiftUI,
|
||||
visibility: visibility
|
||||
)
|
||||
|
@@ -126,6 +126,7 @@ struct ColorsConfiguration: Codable, CustomDebugStringConvertible {
|
||||
let extensionNameUIKit: String?
|
||||
let extensionSuffix: String?
|
||||
let visibility: String?
|
||||
let assetBundle: String?
|
||||
let staticMembers: Bool?
|
||||
|
||||
internal init(
|
||||
@@ -137,6 +138,7 @@ struct ColorsConfiguration: Codable, CustomDebugStringConvertible {
|
||||
extensionNameUIKit: String?,
|
||||
extensionSuffix: String?,
|
||||
visibility: String?,
|
||||
assetBundle: String?,
|
||||
staticMembers: Bool?
|
||||
) {
|
||||
self.inputFile = inputFile
|
||||
@@ -147,6 +149,7 @@ struct ColorsConfiguration: Codable, CustomDebugStringConvertible {
|
||||
self.extensionNameUIKit = extensionNameUIKit
|
||||
self.extensionSuffix = extensionSuffix
|
||||
self.visibility = visibility
|
||||
self.assetBundle = assetBundle
|
||||
self.staticMembers = staticMembers
|
||||
}
|
||||
|
||||
@@ -161,6 +164,7 @@ struct ColorsConfiguration: Codable, CustomDebugStringConvertible {
|
||||
- Extension name UIKit: \(extensionNameUIKit ?? "-")
|
||||
- Extension suffix: \(extensionSuffix ?? "-")
|
||||
- Visiblity: \(visibility ?? "default")
|
||||
- Asset Bundle: \(assetBundle ?? "default")
|
||||
- Static members: \(staticMembers != nil ? "\(String(describing: staticMembers))" : "default")
|
||||
"""
|
||||
}
|
||||
@@ -221,6 +225,7 @@ struct ImagesConfiguration: Codable, CustomDebugStringConvertible {
|
||||
let extensionNameUIKit: String?
|
||||
let extensionSuffix: String?
|
||||
let visibility: String?
|
||||
let assetBundle: String?
|
||||
let staticMembers: Bool?
|
||||
|
||||
internal init(
|
||||
@@ -231,6 +236,7 @@ struct ImagesConfiguration: Codable, CustomDebugStringConvertible {
|
||||
extensionNameUIKit: String?,
|
||||
extensionSuffix: String?,
|
||||
visibility: String?,
|
||||
assetBundle: String?,
|
||||
staticMembers: Bool?
|
||||
) {
|
||||
self.inputFile = inputFile
|
||||
@@ -240,6 +246,7 @@ struct ImagesConfiguration: Codable, CustomDebugStringConvertible {
|
||||
self.extensionNameUIKit = extensionNameUIKit
|
||||
self.extensionSuffix = extensionSuffix
|
||||
self.visibility = visibility
|
||||
self.assetBundle = assetBundle
|
||||
self.staticMembers = staticMembers
|
||||
}
|
||||
|
||||
@@ -253,6 +260,7 @@ struct ImagesConfiguration: Codable, CustomDebugStringConvertible {
|
||||
- Extension name UIKit: \(extensionNameUIKit ?? "-")
|
||||
- Extension suffix: \(extensionSuffix ?? "-")
|
||||
- Visiblity: \(visibility ?? "default")
|
||||
- Asset Bundle: \(assetBundle ?? "default")
|
||||
- Static members: \(staticMembers != nil ? "\(String(describing: staticMembers))" : "default")
|
||||
"""
|
||||
}
|
||||
@@ -268,6 +276,7 @@ struct StringsConfiguration: Codable, CustomDebugStringConvertible {
|
||||
let extensionName: String?
|
||||
let extensionSuffix: String?
|
||||
let visibility: String?
|
||||
let assetBundle: String?
|
||||
let staticMembers: Bool?
|
||||
let xcStrings: Bool?
|
||||
|
||||
@@ -280,6 +289,7 @@ struct StringsConfiguration: Codable, CustomDebugStringConvertible {
|
||||
extensionName: String?,
|
||||
extensionSuffix: String?,
|
||||
visibility: String?,
|
||||
assetBundle: String?,
|
||||
staticMembers: Bool?,
|
||||
xcStrings: Bool?
|
||||
) {
|
||||
@@ -291,6 +301,7 @@ struct StringsConfiguration: Codable, CustomDebugStringConvertible {
|
||||
self.extensionName = extensionName
|
||||
self.extensionSuffix = extensionSuffix
|
||||
self.visibility = visibility
|
||||
self.assetBundle = assetBundle
|
||||
self.staticMembers = staticMembers
|
||||
self.xcStrings = xcStrings
|
||||
}
|
||||
@@ -306,6 +317,7 @@ struct StringsConfiguration: Codable, CustomDebugStringConvertible {
|
||||
- Extension name: \(extensionName ?? "-")
|
||||
- Extension suffix: \(extensionSuffix ?? "-")
|
||||
- Visiblity: \(visibility ?? "default")
|
||||
- Asset Bundle: \(assetBundle ?? "default")
|
||||
- Static members: \(staticMembers != nil ? "\(String(describing: staticMembers))" : "default")
|
||||
- XC Strings: \(xcStrings != nil ? "\(String(describing: xcStrings))" : "default")
|
||||
"""
|
||||
|
@@ -36,6 +36,7 @@ extension ColorsConfiguration: Runnable {
|
||||
("--extension-name-ui-kit", extensionNameUIKit),
|
||||
("--extension-suffix", extensionSuffix),
|
||||
("--visibility", visibility),
|
||||
("--asset-bundle", assetBundle),
|
||||
("--static-members", staticMembers?.description)
|
||||
].forEach { argumentName, argumentValue in
|
||||
if let argumentValue {
|
||||
|
@@ -34,6 +34,7 @@ extension ImagesConfiguration: Runnable {
|
||||
("--extension-name-ui-kit", extensionNameUIKit),
|
||||
("--extension-suffix", extensionSuffix),
|
||||
("--visibility", visibility),
|
||||
("--asset-bundle", assetBundle),
|
||||
("--static-members", staticMembers?.description)
|
||||
].forEach { argumentName, argumentValue in
|
||||
if let argumentValue {
|
||||
|
@@ -37,6 +37,7 @@ extension StringsConfiguration: Runnable {
|
||||
("--extension-name", extensionName),
|
||||
("--extension-suffix", extensionSuffix),
|
||||
("--visibility", visibility),
|
||||
("--asset-bundle", assetBundle),
|
||||
("--xc-strings", staticMembers?.description),
|
||||
("--static-members", xcStrings?.description)
|
||||
].forEach { argumentName, argumentValue in
|
||||
|
@@ -14,21 +14,23 @@ enum ImageExtensionGenerator {
|
||||
|
||||
static func generateExtensionFile(
|
||||
images: [ParsedImage],
|
||||
staticVar: Bool,
|
||||
isStatic: Bool,
|
||||
inputFilename: String,
|
||||
extensionName: String,
|
||||
extensionFilePath: String,
|
||||
isSwiftUI: Bool,
|
||||
visibility: ExtensionVisibility
|
||||
visibility: ExtensionVisibility,
|
||||
assetBundle: AssetBundle
|
||||
) {
|
||||
// Create extension conten1t
|
||||
let extensionContent = Self.getExtensionContent(
|
||||
images: images,
|
||||
staticVar: staticVar,
|
||||
isStatic: isStatic,
|
||||
extensionName: extensionName,
|
||||
inputFilename: inputFilename,
|
||||
isSwiftUI: isSwiftUI,
|
||||
visibility: visibility
|
||||
visibility: visibility,
|
||||
assetBundle: assetBundle
|
||||
)
|
||||
|
||||
// Write content
|
||||
@@ -44,11 +46,12 @@ enum ImageExtensionGenerator {
|
||||
|
||||
static func getExtensionContent(
|
||||
images: [ParsedImage],
|
||||
staticVar: Bool,
|
||||
isStatic: Bool,
|
||||
extensionName: String,
|
||||
inputFilename: String,
|
||||
isSwiftUI: Bool,
|
||||
visibility: ExtensionVisibility
|
||||
visibility: ExtensionVisibility,
|
||||
assetBundle: AssetBundle
|
||||
) -> String {
|
||||
[
|
||||
Self.getHeader(
|
||||
@@ -58,9 +61,10 @@ enum ImageExtensionGenerator {
|
||||
),
|
||||
Self.getProperties(
|
||||
images: images,
|
||||
staticVar: staticVar,
|
||||
isStatic: isStatic,
|
||||
isSwiftUI: isSwiftUI,
|
||||
visibility: visibility
|
||||
visibility: visibility,
|
||||
assetBundle: assetBundle
|
||||
),
|
||||
Self.getFooter()
|
||||
]
|
||||
@@ -84,13 +88,20 @@ enum ImageExtensionGenerator {
|
||||
|
||||
private static func getProperties(
|
||||
images: [ParsedImage],
|
||||
staticVar: Bool,
|
||||
isStatic: Bool,
|
||||
isSwiftUI: Bool,
|
||||
visibility: ExtensionVisibility
|
||||
visibility: ExtensionVisibility,
|
||||
assetBundle: AssetBundle
|
||||
) -> String {
|
||||
images
|
||||
.map {
|
||||
"\n\($0.getImageProperty(isStatic: staticVar, isSwiftUI: isSwiftUI, visibility: visibility))"
|
||||
.map { parsedImage in
|
||||
let property = parsedImage.getImageProperty(
|
||||
isStatic: isStatic,
|
||||
isSwiftUI: isSwiftUI,
|
||||
visibility: visibility,
|
||||
assetBundle: assetBundle
|
||||
)
|
||||
return "\n\(property)"
|
||||
}
|
||||
.joined(separator: "\n")
|
||||
}
|
||||
|
@@ -57,12 +57,13 @@ struct Images: ParsableCommand {
|
||||
let extensionFilePath = options.extensionFilePath {
|
||||
ImageExtensionGenerator.generateExtensionFile(
|
||||
images: imagesToGenerate,
|
||||
staticVar: options.staticMembers,
|
||||
isStatic: options.staticMembers,
|
||||
inputFilename: options.inputFilenameWithoutExt,
|
||||
extensionName: extensionName,
|
||||
extensionFilePath: extensionFilePath,
|
||||
isSwiftUI: true,
|
||||
visibility: options.extensionVisibility
|
||||
visibility: options.extensionVisibility,
|
||||
assetBundle: options.assetBundle
|
||||
)
|
||||
}
|
||||
|
||||
@@ -70,12 +71,13 @@ struct Images: ParsableCommand {
|
||||
let extensionFilePathUIKit = options.extensionFilePathUIKit {
|
||||
ImageExtensionGenerator.generateExtensionFile(
|
||||
images: imagesToGenerate,
|
||||
staticVar: options.staticMembers,
|
||||
isStatic: options.staticMembers,
|
||||
inputFilename: options.inputFilenameWithoutExt,
|
||||
extensionName: extensionNameUIKit,
|
||||
extensionFilePath: extensionFilePathUIKit,
|
||||
isSwiftUI: false,
|
||||
visibility: options.extensionVisibility
|
||||
visibility: options.extensionVisibility,
|
||||
assetBundle: options.assetBundle
|
||||
)
|
||||
}
|
||||
|
||||
|
@@ -5,6 +5,8 @@
|
||||
// Created by Thibaut Schmitt on 24/01/2022.
|
||||
//
|
||||
|
||||
// CPD-OFF
|
||||
|
||||
import ArgumentParser
|
||||
import Foundation
|
||||
import ToolCore
|
||||
@@ -51,6 +53,11 @@ struct ImagesOptions: ParsableArguments {
|
||||
)
|
||||
var extensionVisibility: ExtensionVisibility = .internal
|
||||
|
||||
@Option(
|
||||
help: "Bundle where the asset are generated"
|
||||
)
|
||||
var assetBundle: AssetBundle = .main
|
||||
|
||||
@Option(
|
||||
help: "Path where to generate the extension.",
|
||||
transform: { $0.replaceTiltWithHomeDirectoryPath() }
|
||||
@@ -113,3 +120,5 @@ extension ImagesOptions {
|
||||
.lastPathComponent
|
||||
}
|
||||
}
|
||||
|
||||
// CPD-ON
|
||||
|
@@ -130,17 +130,22 @@ struct ParsedImage {
|
||||
|
||||
// MARK: - Extension property
|
||||
|
||||
func getImageProperty(isStatic: Bool, isSwiftUI: Bool, visibility: ExtensionVisibility) -> String {
|
||||
func getImageProperty(
|
||||
isStatic: Bool,
|
||||
isSwiftUI: Bool,
|
||||
visibility: ExtensionVisibility,
|
||||
assetBundle: AssetBundle
|
||||
) -> String {
|
||||
if isSwiftUI {
|
||||
return """
|
||||
\(visibility) \(isStatic ? "static " : "")var \(name): Image {
|
||||
Image("\(name)")
|
||||
Image("\(name)", bundle: Bundle.\(assetBundle))
|
||||
}
|
||||
"""
|
||||
}
|
||||
return """
|
||||
\(visibility) \(isStatic ? "static " : "")var \(name): UIImage {
|
||||
UIImage(named: "\(name)")!
|
||||
UIImage(named: "\(name)", in: Bundle.\(assetBundle), with: nil)!
|
||||
}
|
||||
"""
|
||||
}
|
||||
|
@@ -247,23 +247,25 @@ enum StringsFileGenerator {
|
||||
sections: [Section],
|
||||
defaultLang lang: String,
|
||||
tags: [String],
|
||||
staticVar: Bool,
|
||||
isStatic: Bool,
|
||||
inputFilename: String,
|
||||
extensionName: String,
|
||||
extensionFilePath: String,
|
||||
extensionSuffix: String,
|
||||
visibility: ExtensionVisibility
|
||||
visibility: ExtensionVisibility,
|
||||
assetBundle: AssetBundle
|
||||
) {
|
||||
// Get extension content
|
||||
let extensionFileContent = Self.getExtensionContent(
|
||||
sections: sections,
|
||||
defaultLang: lang,
|
||||
tags: tags,
|
||||
staticVar: staticVar,
|
||||
isStatic: isStatic,
|
||||
inputFilename: inputFilename,
|
||||
extensionName: extensionName,
|
||||
extensionSuffix: extensionSuffix,
|
||||
visibility: visibility
|
||||
visibility: visibility,
|
||||
assetBundle: assetBundle
|
||||
)
|
||||
|
||||
// Write content
|
||||
@@ -283,11 +285,12 @@ enum StringsFileGenerator {
|
||||
sections: [Section],
|
||||
defaultLang lang: String,
|
||||
tags: [String],
|
||||
staticVar: Bool,
|
||||
isStatic: Bool,
|
||||
inputFilename: String,
|
||||
extensionName: String,
|
||||
extensionSuffix: String,
|
||||
visibility: ExtensionVisibility
|
||||
visibility: ExtensionVisibility,
|
||||
assetBundle: AssetBundle
|
||||
) -> String {
|
||||
[
|
||||
Self.getHeader(
|
||||
@@ -305,8 +308,9 @@ enum StringsFileGenerator {
|
||||
sections: sections,
|
||||
defaultLang: lang,
|
||||
tags: tags,
|
||||
staticVar: staticVar,
|
||||
visibility: visibility
|
||||
isStatic: isStatic,
|
||||
visibility: visibility,
|
||||
assetBundle: assetBundle
|
||||
),
|
||||
Self.getFooter()
|
||||
]
|
||||
@@ -379,8 +383,9 @@ enum StringsFileGenerator {
|
||||
sections: [Section],
|
||||
defaultLang lang: String,
|
||||
tags: [String],
|
||||
staticVar: Bool,
|
||||
visibility: ExtensionVisibility
|
||||
isStatic: Bool,
|
||||
visibility: ExtensionVisibility,
|
||||
assetBundle: AssetBundle
|
||||
) -> String {
|
||||
sections.compactMap { section in
|
||||
// Check that at least one string will be generated
|
||||
@@ -394,19 +399,12 @@ enum StringsFileGenerator {
|
||||
return nil // Go to next definition
|
||||
}
|
||||
|
||||
let property: String = {
|
||||
if staticVar {
|
||||
definition.getNSLocalizedStringStaticProperty(
|
||||
forLang: lang,
|
||||
visibility: visibility
|
||||
)
|
||||
} else {
|
||||
definition.getNSLocalizedStringProperty(
|
||||
forLang: lang,
|
||||
visibility: visibility
|
||||
)
|
||||
}
|
||||
}()
|
||||
let property = definition.getNSLocalizedStringProperty(
|
||||
forLang: lang,
|
||||
isStatic: isStatic,
|
||||
visibility: visibility,
|
||||
assetBundle: assetBundle
|
||||
)
|
||||
|
||||
return "\n\(property)"
|
||||
}
|
||||
|
@@ -15,7 +15,7 @@ enum TagsGenerator {
|
||||
sections: [Section],
|
||||
lang: String,
|
||||
tags: [String],
|
||||
staticVar: Bool,
|
||||
isStatic: Bool,
|
||||
extensionName: String,
|
||||
extensionFilePath: String,
|
||||
visibility: ExtensionVisibility
|
||||
@@ -25,7 +25,7 @@ enum TagsGenerator {
|
||||
sections: sections,
|
||||
lang: lang,
|
||||
tags: tags,
|
||||
staticVar: staticVar,
|
||||
isStatic: isStatic,
|
||||
extensionName: extensionName,
|
||||
visibility: visibility
|
||||
)
|
||||
@@ -47,20 +47,20 @@ enum TagsGenerator {
|
||||
sections: [Section],
|
||||
lang: String,
|
||||
tags: [String],
|
||||
staticVar: Bool,
|
||||
isStatic: Bool,
|
||||
extensionName: String,
|
||||
visibility: ExtensionVisibility
|
||||
) -> String {
|
||||
[
|
||||
Self.getHeader(
|
||||
extensionClassname: extensionName,
|
||||
staticVar: staticVar
|
||||
isStatic: isStatic
|
||||
),
|
||||
Self.getProperties(
|
||||
sections: sections,
|
||||
lang: lang,
|
||||
tags: tags,
|
||||
staticVar: staticVar,
|
||||
isStatic: isStatic,
|
||||
visibility: visibility
|
||||
),
|
||||
Self.getFooter()
|
||||
@@ -70,11 +70,11 @@ enum TagsGenerator {
|
||||
|
||||
// MARK: - Extension part
|
||||
|
||||
private static func getHeader(extensionClassname: String, staticVar: Bool) -> String {
|
||||
private static func getHeader(extensionClassname: String, isStatic: Bool) -> String {
|
||||
"""
|
||||
// Generated by ResgenSwift.Strings.\(Tags.toolName) \(ResgenSwiftVersion)
|
||||
|
||||
\(staticVar ? "typelias Tags = String\n\n" : "")import UIKit
|
||||
\(isStatic ? "typelias Tags = String\n\n" : "")import UIKit
|
||||
|
||||
extension \(extensionClassname) {
|
||||
"""
|
||||
@@ -84,7 +84,7 @@ enum TagsGenerator {
|
||||
sections: [Section],
|
||||
lang: String,
|
||||
tags: [String],
|
||||
staticVar: Bool,
|
||||
isStatic: Bool,
|
||||
visibility: ExtensionVisibility
|
||||
) -> String {
|
||||
sections
|
||||
@@ -100,11 +100,12 @@ enum TagsGenerator {
|
||||
return // Go to next definition
|
||||
}
|
||||
|
||||
if staticVar {
|
||||
res += "\n\n\(definition.getStaticProperty(forLang: lang, visibility: visibility))"
|
||||
} else {
|
||||
res += "\n\n\(definition.getProperty(forLang: lang, visibility: visibility))"
|
||||
}
|
||||
let property = definition.getProperty(
|
||||
forLang: lang,
|
||||
visibility: visibility,
|
||||
isStatic: isStatic
|
||||
)
|
||||
res += "\n\n\(property)"
|
||||
}
|
||||
return res
|
||||
}
|
||||
|
@@ -105,7 +105,8 @@ class Definition {
|
||||
translation: String,
|
||||
isStatic: Bool,
|
||||
comment: String?,
|
||||
visibility: ExtensionVisibility
|
||||
visibility: ExtensionVisibility,
|
||||
assetBundle: AssetBundle
|
||||
) -> String {
|
||||
"""
|
||||
/// Translation in \(lang) :
|
||||
@@ -114,7 +115,7 @@ class Definition {
|
||||
/// Comment :
|
||||
/// \(comment?.isEmpty == false ? comment! : "No comment")
|
||||
\(visibility) \(isStatic ? "static " : "")var \(name): String {
|
||||
NSLocalizedString("\(name)", tableName: kStringsFileName, bundle: Bundle.main, value: "\(translation)", comment: "\(comment ?? "")")
|
||||
NSLocalizedString("\(name)", tableName: kStringsFileName, bundle: Bundle.\(assetBundle), value: "\(translation)", comment: "\(comment ?? "")")
|
||||
}
|
||||
"""
|
||||
}
|
||||
@@ -141,7 +142,12 @@ class Definition {
|
||||
"""
|
||||
}
|
||||
|
||||
func getNSLocalizedStringProperty(forLang lang: String, visibility: ExtensionVisibility) -> String {
|
||||
func getNSLocalizedStringProperty(
|
||||
forLang lang: String,
|
||||
isStatic: Bool,
|
||||
visibility: ExtensionVisibility,
|
||||
assetBundle: AssetBundle
|
||||
) -> String {
|
||||
guard let translation = translations[lang] else {
|
||||
let error = StringiumError.langNotDefined(lang, name, reference != nil)
|
||||
print(error.description)
|
||||
@@ -152,9 +158,10 @@ class Definition {
|
||||
let property = getBaseProperty(
|
||||
lang: lang,
|
||||
translation: translation,
|
||||
isStatic: false,
|
||||
isStatic: isStatic,
|
||||
comment: self.comment,
|
||||
visibility: visibility
|
||||
visibility: visibility,
|
||||
assetBundle: assetBundle
|
||||
)
|
||||
|
||||
// Generate method
|
||||
@@ -163,40 +170,7 @@ class Definition {
|
||||
method = getBaseMethod(
|
||||
lang: lang,
|
||||
translation: translation,
|
||||
isStatic: false,
|
||||
inputParameters: parameters.inputParameters,
|
||||
translationArguments: parameters.translationArguments,
|
||||
comment: self.comment,
|
||||
visibility: visibility
|
||||
)
|
||||
}
|
||||
|
||||
return property + method
|
||||
}
|
||||
|
||||
func getNSLocalizedStringStaticProperty(forLang lang: String, visibility: ExtensionVisibility) -> String {
|
||||
guard let translation = translations[lang] else {
|
||||
let error = StringiumError.langNotDefined(lang, name, reference != nil)
|
||||
print(error.description)
|
||||
Stringium.exit(withError: error)
|
||||
}
|
||||
|
||||
// Generate property
|
||||
let property = getBaseProperty(
|
||||
lang: lang,
|
||||
translation: translation,
|
||||
isStatic: true,
|
||||
comment: self.comment,
|
||||
visibility: visibility
|
||||
)
|
||||
|
||||
// Generate method
|
||||
var method = ""
|
||||
if let parameters = self.getStringParameters(input: translation) {
|
||||
method = getBaseMethod(
|
||||
lang: lang,
|
||||
translation: translation,
|
||||
isStatic: true,
|
||||
isStatic: isStatic,
|
||||
inputParameters: parameters.inputParameters,
|
||||
translationArguments: parameters.translationArguments,
|
||||
comment: self.comment,
|
||||
@@ -209,7 +183,11 @@ class Definition {
|
||||
|
||||
// MARK: - Raw strings
|
||||
|
||||
func getProperty(forLang lang: String, visibility: ExtensionVisibility) -> String {
|
||||
func getProperty(
|
||||
forLang lang: String,
|
||||
visibility: ExtensionVisibility,
|
||||
isStatic: Bool
|
||||
) -> String {
|
||||
guard let translation = translations[lang] else {
|
||||
let error = StringiumError.langNotDefined(lang, name, reference != nil)
|
||||
print(error.description)
|
||||
@@ -222,26 +200,7 @@ class Definition {
|
||||
///
|
||||
/// Comment :
|
||||
/// \(comment?.isEmpty == false ? comment! : "No comment")
|
||||
\(visibility) var \(name): String {
|
||||
"\(translation)"
|
||||
}
|
||||
"""
|
||||
}
|
||||
|
||||
func getStaticProperty(forLang lang: String, visibility: ExtensionVisibility) -> String {
|
||||
guard let translation = translations[lang] else {
|
||||
let error = StringiumError.langNotDefined(lang, name, reference != nil)
|
||||
print(error.description)
|
||||
Stringium.exit(withError: error)
|
||||
}
|
||||
|
||||
return """
|
||||
/// Translation in \(lang) :
|
||||
/// \(translation)
|
||||
///
|
||||
/// Comment :
|
||||
/// \(comment?.isEmpty == false ? comment! : "No comment")
|
||||
\(visibility) static var \(name): String {
|
||||
\(visibility) \(isStatic ? "static " : "")var \(name): String {
|
||||
"\(translation)"
|
||||
}
|
||||
"""
|
||||
|
@@ -68,12 +68,13 @@ struct Stringium: ParsableCommand {
|
||||
sections: sections,
|
||||
defaultLang: options.defaultLang,
|
||||
tags: options.tags,
|
||||
staticVar: options.staticMembers,
|
||||
isStatic: options.staticMembers,
|
||||
inputFilename: options.inputFilenameWithoutExt,
|
||||
extensionName: extensionName,
|
||||
extensionFilePath: extensionFilePath,
|
||||
extensionSuffix: options.extensionSuffix ?? "",
|
||||
visibility: options.extensionVisibility
|
||||
visibility: options.extensionVisibility,
|
||||
assetBundle: options.assetBundle
|
||||
)
|
||||
}
|
||||
|
||||
|
@@ -57,6 +57,11 @@ struct StringiumOptions: ParsableArguments {
|
||||
)
|
||||
var extensionVisibility: ExtensionVisibility = .internal
|
||||
|
||||
@Option(
|
||||
help: "Bundle where the asset are generated"
|
||||
)
|
||||
var assetBundle: AssetBundle = .main
|
||||
|
||||
@Option(
|
||||
help: "Path where to generate the extension.",
|
||||
transform: { $0.replaceTiltWithHomeDirectoryPath() }
|
||||
|
@@ -47,7 +47,7 @@ struct Tags: ParsableCommand {
|
||||
sections: sections,
|
||||
lang: options.lang,
|
||||
tags: ["ios", "iosonly", Self.noTranslationTag],
|
||||
staticVar: options.staticMembers,
|
||||
isStatic: options.staticMembers,
|
||||
extensionName: options.extensionName,
|
||||
extensionFilePath: options.extensionFilePath,
|
||||
visibility: options.extensionVisibility
|
||||
|
Reference in New Issue
Block a user