Refactor + Bugs fixes on Strings + Gestion de la génération des images

This commit is contained in:
2022-02-14 14:02:49 +01:00
parent 11a40305dd
commit 5dd2340a11
76 changed files with 1878 additions and 704 deletions

View File

@ -8,121 +8,120 @@
import Foundation
import CLIToolCore
extension Strings {
class StringsFileGenerator {
// MARK: - Strings Files
static func writeStringsFiles(sections: [Section], langs: [String], defaultLang: String, tags: [String], outputPath: String, inputFilenameWithoutExt: String) {
var stringsFilesContent = [String: String]()
for lang in langs {
stringsFilesContent[lang] = Self.generateStringsFileContent(lang: lang,
defaultLang: defaultLang,
tags: tags,
sections: sections)
}
// Write strings file content
langs.forEach { lang in
guard let fileContent = stringsFilesContent[lang] else { return }
let stringsFilePath = "\(outputPath)/\(lang).lproj/\(inputFilenameWithoutExt).strings"
let stringsFilePathURL = URL(fileURLWithPath: stringsFilePath)
do {
try fileContent.write(to: stringsFilePathURL, atomically: true, encoding: .utf8)
} catch (let error) {
let error = StringiumError.writeFile(error.localizedDescription, stringsFilePath)
print(error.localizedDescription)
Stringium.exit(withError: error)
}
}
class StringsFileGenerator {
// MARK: - Strings Files
static func writeStringsFiles(sections: [Section], langs: [String], defaultLang: String, tags: [String], outputPath: String, inputFilenameWithoutExt: String) {
var stringsFilesContent = [String: String]()
for lang in langs {
stringsFilesContent[lang] = Self.generateStringsFileContent(lang: lang,
defaultLang: defaultLang,
tags: tags,
sections: sections)
}
private static func generateStringsFileContent(lang: String, defaultLang: String, tags inputTags: [String], sections: [Section]) -> String {
var stringsFileContent = """
// Write strings file content
langs.forEach { lang in
guard let fileContent = stringsFilesContent[lang] else { return }
let stringsFilePath = "\(outputPath)/\(lang).lproj/\(inputFilenameWithoutExt).strings"
let stringsFilePathURL = URL(fileURLWithPath: stringsFilePath)
do {
try fileContent.write(to: stringsFilePathURL, atomically: true, encoding: .utf8)
} catch (let error) {
let error = StringiumError.writeFile(error.localizedDescription, stringsFilePath)
print(error.localizedDescription)
Stringium.exit(withError: error)
}
}
}
private static func generateStringsFileContent(lang: String, defaultLang: String, tags inputTags: [String], sections: [Section]) -> String {
var stringsFileContent = """
/**
* Apple Strings File
* Generated by ResgenSwift 1.0.0
* Language: \(lang)
*/\n
"""
sections.forEach { section in
// Check that at least one string will be generated
guard section.hasOneOrMoreMatchingTags(tags: inputTags) else {
return // Go to next section
}
stringsFileContent += "\n/********** \(section.name) **********/\n\n"
section.definitions.forEach { definition in
let translationOpt: String? = {
if definition.tags.contains(Stringium.noTranslationTag) {
return definition.translations[defaultLang]
}
return definition.translations[lang]
}()
if let translation = translationOpt {
stringsFileContent += "\"\(definition.name)\" = \"\(translation)\";\n\n"
} else {
let error = StringiumError.langNotDefined(lang, definition.name, definition.reference != nil)
print(error.localizedDescription)
Stringium.exit(withError: error)
}
}
}
return stringsFileContent
}
// MARK: - Extension file
static func writeExtensionFiles(sections: [Section], defaultLang lang: String, tags: [String], staticVar: Bool, inputFilename: String, extensionName: String, extensionFilePath: String) {
let extensionHeader = Self.getHeader(stringsFilename: inputFilename, extensionClassname: extensionName)
let extensionFooter = Self.getFooter()
let extensionContent: String = {
var content = ""
sections.forEach { section in
// Check that at least one string will be generated
guard section.hasOneOrMoreMatchingTags(tags: inputTags) else {
guard section.hasOneOrMoreMatchingTags(tags: tags) else {
return // Go to next section
}
stringsFileContent += "\n/********** \(section.name) **********/\n\n"
content += "\n\t// MARK: - \(section.name)"
section.definitions.forEach { definition in
let translationOpt: String? = {
if definition.tags.contains(Stringium.noTranslationTag) {
return definition.translations[defaultLang]
}
return definition.translations[lang]
}()
if let translation = translationOpt {
stringsFileContent += "\"\(definition.name)\" = \"\(translation)\"\n\n"
if staticVar {
content += "\n\n\(definition.getNSLocalizedStringStaticProperty(forLang: lang))"
} else {
let error = StringiumError.langNotDefined(lang, definition.name, definition.reference != nil)
print(error.localizedDescription)
Stringium.exit(withError: error)
content += "\n\n\(definition.getNSLocalizedStringProperty(forLang: lang))"
}
}
content += "\n"
}
return stringsFileContent
return content
}()
// Create file if not exists
let fileManager = FileManager()
if fileManager.fileExists(atPath: extensionFilePath) == false {
Shell.shell("touch", "\(extensionFilePath)")
}
// MARK: - Extension file
// Create extension content
let extensionFileContent = [extensionHeader, extensionContent, extensionFooter].joined(separator: "\n")
static func writeExtensionFiles(sections: [Section], defaultLang lang: String, tags: [String], staticVar: Bool, inputFilename: String, extensionName: String, extensionFilePath: String) {
let extensionHeader = Self.getHeader(stringsFilename: inputFilename, extensionClassname: extensionName)
let extensionFooter = Self.getFooter()
let extensionContent: String = {
var content = ""
sections.forEach { section in
// Check that at least one string will be generated
guard section.hasOneOrMoreMatchingTags(tags: tags) else {
return // Go to next section
}
content += "\n\t// MARK: - \(section.name)"
section.definitions.forEach { definition in
if staticVar {
content += "\n\n\(definition.getNSLocalizedStringStaticProperty(forLang: lang))"
} else {
content += "\n\n\(definition.getNSLocalizedStringProperty(forLang: lang))"
}
}
content += "\n"
}
return content
}()
// Create file if not exists
let fileManager = FileManager()
if fileManager.fileExists(atPath: extensionFilePath) == false {
Shell.shell("touch", "\(extensionFilePath)")
}
// Create extension content
let extensionFileContent = [extensionHeader, extensionContent, extensionFooter].joined(separator: "\n")
// Write content
let extensionFilePathURL = URL(fileURLWithPath: extensionFilePath)
do {
try extensionFileContent.write(to: extensionFilePathURL, atomically: true, encoding: .utf8)
} catch (let error) {
let error = StringiumError.writeFile(extensionFilePath, error.localizedDescription)
print(error.localizedDescription)
Stringium.exit(withError: error)
}
// Write content
let extensionFilePathURL = URL(fileURLWithPath: extensionFilePath)
do {
try extensionFileContent.write(to: extensionFilePathURL, atomically: true, encoding: .utf8)
} catch (let error) {
let error = StringiumError.writeFile(extensionFilePath, error.localizedDescription)
print(error.localizedDescription)
Stringium.exit(withError: error)
}
private static func getHeader(stringsFilename: String, extensionClassname: String) -> String {
}
private static func getHeader(stringsFilename: String, extensionClassname: String) -> String {
"""
// Generated from Strings-Stringium at \(Date())
@ -132,12 +131,11 @@ extension Strings {
extension \(extensionClassname) {
"""
}
private static func getFooter() -> String {
}
private static func getFooter() -> String {
"""
}
"""
}
}
}

View File

@ -9,54 +9,53 @@ import Foundation
import CLIToolCore
import CoreVideo
extension Strings {
class TagsGenerator {
static func writeExtensionFiles(sections: [Section], lang: String, tags: [String], staticVar: Bool, extensionName: String, extensionFilePath: String) {
let extensionHeader = Self.getHeader(extensionClassname: extensionName)
let extensionFooter = Self.getFooter()
let extensionContent: String = {
var content = ""
sections.forEach { section in
// Check that at least one string will be generated
guard section.hasOneOrMoreMatchingTags(tags: tags) else {
return // Go to next section
}
content += "\n\t// MARK: - \(section.name)"
section.definitions.forEach { definition in
if staticVar {
content += "\n\n\(definition.getStaticProperty(forLang: lang))"
} else {
content += "\n\n\(definition.getProperty(forLang: lang))"
}
}
content += "\n"
class TagsGenerator {
static func writeExtensionFiles(sections: [Section], lang: String, tags: [String], staticVar: Bool, extensionName: String, extensionFilePath: String) {
let extensionHeader = Self.getHeader(extensionClassname: extensionName)
let extensionFooter = Self.getFooter()
let extensionContent: String = {
var content = ""
sections.forEach { section in
// Check that at least one string will be generated
guard section.hasOneOrMoreMatchingTags(tags: tags) else {
return // Go to next section
}
return content
}()
// Create file if not exists
let fileManager = FileManager()
if fileManager.fileExists(atPath: extensionFilePath) == false {
Shell.shell("touch", "\(extensionFilePath)")
}
// Create extension content
let extensionFileContent = [extensionHeader, extensionContent, extensionFooter].joined(separator: "\n")
// Write content
let extensionFilePathURL = URL(fileURLWithPath: extensionFilePath)
do {
try extensionFileContent.write(to: extensionFilePathURL, atomically: true, encoding: .utf8)
} catch (let error) {
let error = StringiumError.writeFile(extensionFilePath, error.localizedDescription)
print(error.localizedDescription)
Stringium.exit(withError: error)
content += "\n\t// MARK: - \(section.name)"
section.definitions.forEach { definition in
if staticVar {
content += "\n\n\(definition.getStaticProperty(forLang: lang))"
} else {
content += "\n\n\(definition.getProperty(forLang: lang))"
}
}
content += "\n"
}
return content
}()
// Create file if not exists
let fileManager = FileManager()
if fileManager.fileExists(atPath: extensionFilePath) == false {
Shell.shell("touch", "\(extensionFilePath)")
}
private static func getHeader(extensionClassname: String) -> String {
// Create extension content
let extensionFileContent = [extensionHeader, extensionContent, extensionFooter].joined(separator: "\n")
// Write content
let extensionFilePathURL = URL(fileURLWithPath: extensionFilePath)
do {
try extensionFileContent.write(to: extensionFilePathURL, atomically: true, encoding: .utf8)
} catch (let error) {
let error = StringiumError.writeFile(extensionFilePath, error.localizedDescription)
print(error.localizedDescription)
Stringium.exit(withError: error)
}
}
private static func getHeader(extensionClassname: String) -> String {
"""
// Generated from Strings-Tags at \(Date())
@ -66,12 +65,11 @@ extension Strings {
extension \(extensionClassname) {
"""
}
private static func getFooter() -> String {
}
private static func getFooter() -> String {
"""
}
"""
}
}
}