resgen.swift/Sources/Strings/Model/Definition.swift

109 lines
3.4 KiB
Swift

//
// Definition.swift
//
//
// Created by Thibaut Schmitt on 04/01/2022.
//
import Foundation
extension Strings {
class Definition {
let name: String
var tags = [String]()
var comment: String?
var translations = [String: String]()
var reference: String?
var isPlurals = false
var isValid: Bool {
name.isEmpty == false &&
translations.isEmpty == false
}
init(name: String) {
self.name = name
}
static func match(_ line: String) -> Definition? {
guard line.range(of: "\\[(.*?)]", options: .regularExpression, range: nil, locale: nil) != nil else {
return nil
}
let definitionName = line
.replacingOccurrences(of: ["[", "]"], with: "")
.removeLeadingTrailingWhitespace()
return Definition(name: definitionName)
}
// MARK: -
func getNSLocalizedStringProperty(forLang lang: String) -> String {
guard let translation = translations[lang] else {
let error = StringiumError.langNotDefined(lang, name, reference != nil)
print(error.localizedDescription)
Stringium.exit(withError: error)
}
return """
/// Translation in \(lang) :
/// \(translation)
var \(name): String {
NSLocalizedString("\(name)", tableName: kStringsFileName, bundle: Bundle.main, value: "\(translation)", comment: "")
}
"""
}
func getNSLocalizedStringStaticProperty(forLang lang: String) -> String {
guard let translation = translations[lang] else {
let error = StringiumError.langNotDefined(lang, name, reference != nil)
print(error.localizedDescription)
Stringium.exit(withError: error)
}
return """
/// Translation in \(lang) :
/// \(translation)
static var \(name): String {
NSLocalizedString("\(name)", tableName: kStringsFileName, bundle: Bundle.main, value: "\(translation)", comment: "")
}
"""
}
// MARK: - Raw strings
func getProperty(forLang lang: String) -> String {
guard let translation = translations[lang] else {
let error = StringiumError.langNotDefined(lang, name, reference != nil)
print(error.localizedDescription)
Stringium.exit(withError: error)
}
return """
/// Translation in \(lang) :
/// \(translation)
var \(name): String {
"\(translation)"
}
"""
}
func getStaticProperty(forLang lang: String) -> String {
guard let translation = translations[lang] else {
let error = StringiumError.langNotDefined(lang, name, reference != nil)
print(error.localizedDescription)
Stringium.exit(withError: error)
}
return """
/// Translation in \(lang) :
/// \(translation)
static var \(name): String {
"\(translation)"
}
"""
}
}
}