feat(RES-34): Fix plist font filename (#14)
All checks were successful
gitea-openium/resgen.swift/pipeline/head This commit looks good

Reviewed-on: #14
This commit is contained in:
2025-05-05 09:53:05 +02:00
parent 8442c89944
commit 756de4f1de
96 changed files with 3028 additions and 2852 deletions

View File

@ -8,23 +8,29 @@
import Foundation
import ToolCore
class StringsFileGenerator {
// swiftlint:disable type_body_length file_length
enum StringsFileGenerator {
// MARK: - Strings Files
static func writeStringsFiles(sections: [Section],
langs: [String],
defaultLang: String,
tags: [String],
outputPath: String,
inputFilenameWithoutExt: String) {
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)
stringsFilesContent[lang] = Self.generateStringsFileContent(
lang: lang,
defaultLang: defaultLang,
tags: tags,
sections: sections
)
}
// Write strings file content
@ -35,7 +41,7 @@ class StringsFileGenerator {
let stringsFilePathURL = URL(fileURLWithPath: stringsFilePath)
do {
try fileContent.write(to: stringsFilePathURL, atomically: false, encoding: .utf8)
} catch let error {
} catch {
let error = StringiumError.writeFile(error.localizedDescription, stringsFilePath)
print(error.description)
Stringium.exit(withError: error)
@ -43,12 +49,14 @@ class StringsFileGenerator {
}
}
static func writeXcStringsFiles(sections: [Section],
langs: [String],
defaultLang: String,
tags: [String],
outputPath: String,
inputFilenameWithoutExt: String) {
static func writeXcStringsFiles(
sections: [Section],
langs: [String],
defaultLang: String,
tags: [String],
outputPath: String,
inputFilenameWithoutExt: String
) {
let fileContent: String = Self.generateXcStringsFileContent(
langs: langs,
@ -61,17 +69,19 @@ class StringsFileGenerator {
let stringsFilePathURL = URL(fileURLWithPath: stringsFilePath)
do {
try fileContent.write(to: stringsFilePathURL, atomically: false, encoding: .utf8)
} catch let error {
} catch {
let error = StringiumError.writeFile(error.localizedDescription, stringsFilePath)
print(error.description)
Stringium.exit(withError: error)
}
}
static func generateStringsFileContent(lang: String,
defaultLang: String,
tags inputTags: [String],
sections: [Section]) -> String {
static func generateStringsFileContent(
lang: String,
defaultLang: String,
tags inputTags: [String],
sections: [Section]
) -> String {
var stringsFileContent = """
/**
* Apple Strings File
@ -120,11 +130,18 @@ class StringsFileGenerator {
// MARK: - XcStrings Generation
static func generateXcStringsFileContent(langs: [String],
defaultLang: String,
tags inputTags: [String],
sections: [Section]) -> String {
let rootObject = generateRootObject(langs: langs, defaultLang: defaultLang, tags: inputTags, sections: sections)
static func generateXcStringsFileContent(
langs: [String],
defaultLang: String,
tags inputTags: [String],
sections: [Section]
) -> String {
let rootObject = generateRootObject(
langs: langs,
defaultLang: defaultLang,
tags: inputTags,
sections: sections
)
let file = generateXcStringsFileContentFromRootObject(rootObject: rootObject)
return file
@ -138,7 +155,6 @@ class StringsFileGenerator {
let json = try encoder.encode(rootObject)
return String(decoding: json, as: UTF8.self)
} catch {
debugPrint("Failed to encode: \(error)")
}
@ -146,20 +162,22 @@ class StringsFileGenerator {
return ""
}
static func generateRootObject(langs: [String],
defaultLang: String,
tags inputTags: [String],
sections: [Section]) -> Root {
static func generateRootObject(
langs: [String],
defaultLang: String,
tags inputTags: [String],
sections: [Section]
) -> Root {
var xcStringDefinitionTab: [XCStringDefinition] = []
sections.forEach { section in
// Check that at least one string will be generated
sections.forEach { section in // swiftlint:disable:this closure_body_length
// Check that at least one string will be generated
guard section.hasOneOrMoreMatchingTags(tags: inputTags) else {
return // Go to next section
}
section.definitions.forEach { definition in
section.definitions.forEach { definition in // swiftlint:disable:this closure_body_length
var skipDefinition = false
var isNoTranslation = false
@ -190,7 +208,6 @@ class StringsFileGenerator {
} else {
// Search for langs in twine
for (lang, value) in definition.translations where !value.isEmpty {
let localization = XCStringLocalization(
lang: lang,
content: XCStringLocalizationLangContent(
@ -219,7 +236,7 @@ class StringsFileGenerator {
}
let xcStringContainer = XCStringDefinitionContainer(strings: xcStringDefinitionTab)
return Root(
sourceLanguage: defaultLang,
strings: xcStringContainer,
@ -229,28 +246,32 @@ class StringsFileGenerator {
// MARK: - Extension file
static func writeExtensionFiles(sections: [Section],
defaultLang lang: String,
tags: [String],
staticVar: Bool,
inputFilename: String,
extensionName: String,
extensionFilePath: String,
extensionSuffix: String) {
static func writeExtensionFiles(
sections: [Section],
defaultLang lang: String,
tags: [String],
staticVar: Bool,
inputFilename: String,
extensionName: String,
extensionFilePath: String,
extensionSuffix: String
) {
// Get extension content
let extensionFileContent = Self.getExtensionContent(sections: sections,
defaultLang: lang,
tags: tags,
staticVar: staticVar,
inputFilename: inputFilename,
extensionName: extensionName,
extensionSuffix: extensionSuffix)
let extensionFileContent = Self.getExtensionContent(
sections: sections,
defaultLang: lang,
tags: tags,
staticVar: staticVar,
inputFilename: inputFilename,
extensionName: extensionName,
extensionSuffix: extensionSuffix
)
// Write content
let extensionFilePathURL = URL(fileURLWithPath: extensionFilePath)
do {
try extensionFileContent.write(to: extensionFilePathURL, atomically: false, encoding: .utf8)
} catch let error {
} catch {
let error = StringiumError.writeFile(extensionFilePath, error.localizedDescription)
print(error.description)
Stringium.exit(withError: error)
@ -259,17 +280,32 @@ class StringsFileGenerator {
// MARK: - Extension content
static func getExtensionContent(sections: [Section],
defaultLang lang: String,
tags: [String],
staticVar: Bool,
inputFilename: String,
extensionName: String,
extensionSuffix: String) -> String {
static func getExtensionContent(
sections: [Section],
defaultLang lang: String,
tags: [String],
staticVar: Bool,
inputFilename: String,
extensionName: String,
extensionSuffix: String
) -> String {
[
Self.getHeader(stringsFilename: inputFilename, extensionClassname: extensionName),
Self.getEnumKey(sections: sections, tags: tags, extensionClassname: extensionName, extensionSuffix: extensionSuffix),
Self.getProperties(sections: sections, defaultLang: lang, tags: tags, staticVar: staticVar),
Self.getHeader(
stringsFilename: inputFilename,
extensionClassname: extensionName
),
Self.getEnumKey(
sections: sections,
tags: tags,
extensionClassname: extensionName,
extensionSuffix: extensionSuffix
),
Self.getProperties(
sections: sections,
defaultLang: lang,
tags: tags,
staticVar: staticVar
),
Self.getFooter()
]
.joined(separator: "\n")
@ -289,7 +325,12 @@ class StringsFileGenerator {
"""
}
private static func getEnumKey(sections: [Section], tags: [String], extensionClassname: String, extensionSuffix: String) -> String {
private static func getEnumKey(
sections: [Section],
tags: [String],
extensionClassname: String,
extensionSuffix: String
) -> String {
var enumDefinition = "\n enum Key\(extensionSuffix.uppercasedFirst()): String {\n"
// Enum