diff --git a/Monal/.swiftgen/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Info.plist b/Monal/.swiftgen/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Info.plist new file mode 100644 index 0000000..01d943f --- /dev/null +++ b/Monal/.swiftgen/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Info.plist @@ -0,0 +1,42 @@ + + + + + BuildMachineOSBuild + + CFBundleDevelopmentRegion + en + CFBundleExecutable + SwiftGen_SwiftGenCLI + CFBundleIdentifier + SwiftGen.SwiftGenCLI.resources + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + SwiftGen_SwiftGenCLI + CFBundlePackageType + BNDL + CFBundleSupportedPlatforms + + MacOSX + + DTCompiler + com.apple.compilers.llvm.clang.1_0 + DTPlatformBuild + 13A233 + DTPlatformName + macosx + DTPlatformVersion + 11.3 + DTSDKBuild + 20E214 + DTSDKName + macosx11.3 + DTXcode + 1300 + DTXcodeBuild + 13A233 + LSMinimumSystemVersion + 10.11 + + diff --git a/Monal/.swiftgen/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/colors/literals-swift4.stencil b/Monal/.swiftgen/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/colors/literals-swift4.stencil new file mode 100644 index 0000000..af60477 --- /dev/null +++ b/Monal/.swiftgen/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/colors/literals-swift4.stencil @@ -0,0 +1,43 @@ +// swiftlint:disable all +// Generated using SwiftGen — https://github.com/SwiftGen/SwiftGen + +{% if palettes %} +{% set enumName %}{{param.enumName|default:"ColorName"}}{% endset %} +{% set accessModifier %}{% if param.publicAccess %}public{% else %}internal{% endif %}{% endset %} +#if os(macOS) + import AppKit + {% if enumName != 'NSColor' %}{{accessModifier}} enum {{enumName}} { }{% endif %} +#elseif os(iOS) || os(tvOS) || os(watchOS) + import UIKit + {% if enumName != 'UIColor' %}{{accessModifier}} enum {{enumName}} { }{% endif %} +#endif + +// swiftlint:disable superfluous_disable_command +// swiftlint:disable file_length + +// MARK: - Colors + +// swiftlint:disable identifier_name line_length type_body_length +{{accessModifier}} extension {{enumName}} { +{% macro h2f hex %}{{hex|hexToInt|int255toFloat}}{% endmacro %} +{% macro enumBlock colors accessPrefix %} + {% for color in colors %} + /// 0x{{color.red}}{{color.green}}{{color.blue}}{{color.alpha}} (r: {{color.red|hexToInt}}, g: {{color.green|hexToInt}}, b: {{color.blue|hexToInt}}, a: {{color.alpha|hexToInt}}) + {{accessPrefix}}static let {{color.name|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}} = #colorLiteral(red: {% call h2f color.red %}, green: {% call h2f color.green %}, blue: {% call h2f color.blue %}, alpha: {% call h2f color.alpha %}) + {% endfor %} +{% endmacro %} + {% if palettes.count > 1 or param.forceFileNameEnum %} + {% set accessPrefix %}{{accessModifier}} {% endset %} + {% for palette in palettes %} + enum {{palette.name|swiftIdentifier:"pretty"|escapeReservedKeywords}} { + {% filter indent:2 %}{% call enumBlock palette.colors accessPrefix %}{% endfilter %} + } + {% endfor %} + {% else %} + {% call enumBlock palettes.first.colors "" %} + {% endif %} +} +// swiftlint:enable identifier_name line_length type_body_length +{% else %} +// No color found +{% endif %} diff --git a/Monal/.swiftgen/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/colors/literals-swift5.stencil b/Monal/.swiftgen/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/colors/literals-swift5.stencil new file mode 100644 index 0000000..af60477 --- /dev/null +++ b/Monal/.swiftgen/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/colors/literals-swift5.stencil @@ -0,0 +1,43 @@ +// swiftlint:disable all +// Generated using SwiftGen — https://github.com/SwiftGen/SwiftGen + +{% if palettes %} +{% set enumName %}{{param.enumName|default:"ColorName"}}{% endset %} +{% set accessModifier %}{% if param.publicAccess %}public{% else %}internal{% endif %}{% endset %} +#if os(macOS) + import AppKit + {% if enumName != 'NSColor' %}{{accessModifier}} enum {{enumName}} { }{% endif %} +#elseif os(iOS) || os(tvOS) || os(watchOS) + import UIKit + {% if enumName != 'UIColor' %}{{accessModifier}} enum {{enumName}} { }{% endif %} +#endif + +// swiftlint:disable superfluous_disable_command +// swiftlint:disable file_length + +// MARK: - Colors + +// swiftlint:disable identifier_name line_length type_body_length +{{accessModifier}} extension {{enumName}} { +{% macro h2f hex %}{{hex|hexToInt|int255toFloat}}{% endmacro %} +{% macro enumBlock colors accessPrefix %} + {% for color in colors %} + /// 0x{{color.red}}{{color.green}}{{color.blue}}{{color.alpha}} (r: {{color.red|hexToInt}}, g: {{color.green|hexToInt}}, b: {{color.blue|hexToInt}}, a: {{color.alpha|hexToInt}}) + {{accessPrefix}}static let {{color.name|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}} = #colorLiteral(red: {% call h2f color.red %}, green: {% call h2f color.green %}, blue: {% call h2f color.blue %}, alpha: {% call h2f color.alpha %}) + {% endfor %} +{% endmacro %} + {% if palettes.count > 1 or param.forceFileNameEnum %} + {% set accessPrefix %}{{accessModifier}} {% endset %} + {% for palette in palettes %} + enum {{palette.name|swiftIdentifier:"pretty"|escapeReservedKeywords}} { + {% filter indent:2 %}{% call enumBlock palette.colors accessPrefix %}{% endfilter %} + } + {% endfor %} + {% else %} + {% call enumBlock palettes.first.colors "" %} + {% endif %} +} +// swiftlint:enable identifier_name line_length type_body_length +{% else %} +// No color found +{% endif %} diff --git a/Monal/.swiftgen/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/colors/swift4.stencil b/Monal/.swiftgen/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/colors/swift4.stencil new file mode 100644 index 0000000..57c2d79 --- /dev/null +++ b/Monal/.swiftgen/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/colors/swift4.stencil @@ -0,0 +1,84 @@ +// swiftlint:disable all +// Generated using SwiftGen — https://github.com/SwiftGen/SwiftGen + +{% if palettes %} +{% set colorAlias %}{{param.colorAliasName|default:"Color"}}{% endset %} +{% set accessModifier %}{% if param.publicAccess %}public{% else %}internal{% endif %}{% endset %} +#if os(macOS) + import AppKit.NSColor + {{accessModifier}} typealias {{colorAlias}} = NSColor +#elseif os(iOS) || os(tvOS) || os(watchOS) + import UIKit.UIColor + {{accessModifier}} typealias {{colorAlias}} = UIColor +#endif + +// swiftlint:disable superfluous_disable_command file_length implicit_return + +// MARK: - Colors + +// swiftlint:disable identifier_name line_length type_body_length +{% set enumName %}{{param.enumName|default:"ColorName"}}{% endset %} +{{accessModifier}} struct {{enumName}} { + {{accessModifier}} let rgbaValue: UInt32 + {{accessModifier}} var color: {{colorAlias}} { return {{colorAlias}}(named: self) } + +{% macro rgbaValue color %}0x{{color.red}}{{color.green}}{{color.blue}}{{color.alpha}}{% endmacro %} +{% macro enumBlock colors %} + {% for color in colors %} + /// + /// Alpha: {{color.alpha|hexToInt|int255toFloat|percent}}
(0x{{color.red}}{{color.green}}{{color.blue}}{{color.alpha}}) + {{accessModifier}} static let {{color.name|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}} = {{enumName}}(rgbaValue: {% call rgbaValue color %}) + {% endfor %} +{% endmacro %} + {% if palettes.count > 1 or param.forceFileNameEnum %} + {% for palette in palettes %} + {{accessModifier}} enum {{palette.name|swiftIdentifier:"pretty"|escapeReservedKeywords}} { + {% filter indent:2 %}{% call enumBlock palette.colors %}{% endfilter %} + } + {% endfor %} + {% else %} + {% call enumBlock palettes.first.colors %} + {% endif %} +} +// swiftlint:enable identifier_name line_length type_body_length + +// MARK: - Implementation Details + +internal extension {{colorAlias}} { + convenience init(rgbaValue: UInt32) { + let components = RGBAComponents(rgbaValue: rgbaValue).normalized + self.init(red: components[0], green: components[1], blue: components[2], alpha: components[3]) + } +} + +private struct RGBAComponents { + let rgbaValue: UInt32 + + private var shifts: [UInt32] { + [ + rgbaValue >> 24, // red + rgbaValue >> 16, // green + rgbaValue >> 8, // blue + rgbaValue // alpha + ] + } + + private var components: [CGFloat] { + shifts.map { + CGFloat($0 & 0xff) + } + } + + var normalized: [CGFloat] { + components.map { $0 / 255.0 } + } +} + +{{accessModifier}} extension {{colorAlias}} { + convenience init(named color: {{enumName}}) { + self.init(rgbaValue: color.rgbaValue) + } +} +{% else %} +// No color found +{% endif %} diff --git a/Monal/.swiftgen/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/colors/swift5.stencil b/Monal/.swiftgen/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/colors/swift5.stencil new file mode 100644 index 0000000..57c2d79 --- /dev/null +++ b/Monal/.swiftgen/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/colors/swift5.stencil @@ -0,0 +1,84 @@ +// swiftlint:disable all +// Generated using SwiftGen — https://github.com/SwiftGen/SwiftGen + +{% if palettes %} +{% set colorAlias %}{{param.colorAliasName|default:"Color"}}{% endset %} +{% set accessModifier %}{% if param.publicAccess %}public{% else %}internal{% endif %}{% endset %} +#if os(macOS) + import AppKit.NSColor + {{accessModifier}} typealias {{colorAlias}} = NSColor +#elseif os(iOS) || os(tvOS) || os(watchOS) + import UIKit.UIColor + {{accessModifier}} typealias {{colorAlias}} = UIColor +#endif + +// swiftlint:disable superfluous_disable_command file_length implicit_return + +// MARK: - Colors + +// swiftlint:disable identifier_name line_length type_body_length +{% set enumName %}{{param.enumName|default:"ColorName"}}{% endset %} +{{accessModifier}} struct {{enumName}} { + {{accessModifier}} let rgbaValue: UInt32 + {{accessModifier}} var color: {{colorAlias}} { return {{colorAlias}}(named: self) } + +{% macro rgbaValue color %}0x{{color.red}}{{color.green}}{{color.blue}}{{color.alpha}}{% endmacro %} +{% macro enumBlock colors %} + {% for color in colors %} + /// + /// Alpha: {{color.alpha|hexToInt|int255toFloat|percent}}
(0x{{color.red}}{{color.green}}{{color.blue}}{{color.alpha}}) + {{accessModifier}} static let {{color.name|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}} = {{enumName}}(rgbaValue: {% call rgbaValue color %}) + {% endfor %} +{% endmacro %} + {% if palettes.count > 1 or param.forceFileNameEnum %} + {% for palette in palettes %} + {{accessModifier}} enum {{palette.name|swiftIdentifier:"pretty"|escapeReservedKeywords}} { + {% filter indent:2 %}{% call enumBlock palette.colors %}{% endfilter %} + } + {% endfor %} + {% else %} + {% call enumBlock palettes.first.colors %} + {% endif %} +} +// swiftlint:enable identifier_name line_length type_body_length + +// MARK: - Implementation Details + +internal extension {{colorAlias}} { + convenience init(rgbaValue: UInt32) { + let components = RGBAComponents(rgbaValue: rgbaValue).normalized + self.init(red: components[0], green: components[1], blue: components[2], alpha: components[3]) + } +} + +private struct RGBAComponents { + let rgbaValue: UInt32 + + private var shifts: [UInt32] { + [ + rgbaValue >> 24, // red + rgbaValue >> 16, // green + rgbaValue >> 8, // blue + rgbaValue // alpha + ] + } + + private var components: [CGFloat] { + shifts.map { + CGFloat($0 & 0xff) + } + } + + var normalized: [CGFloat] { + components.map { $0 / 255.0 } + } +} + +{{accessModifier}} extension {{colorAlias}} { + convenience init(named color: {{enumName}}) { + self.init(rgbaValue: color.rgbaValue) + } +} +{% else %} +// No color found +{% endif %} diff --git a/Monal/.swiftgen/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/coredata/swift4.stencil b/Monal/.swiftgen/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/coredata/swift4.stencil new file mode 100644 index 0000000..9832876 --- /dev/null +++ b/Monal/.swiftgen/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/coredata/swift4.stencil @@ -0,0 +1,211 @@ +// swiftlint:disable all +// Generated using SwiftGen — https://github.com/SwiftGen/SwiftGen + +// swiftlint:disable superfluous_disable_command implicit_return +// swiftlint:disable sorted_imports +import CoreData +import Foundation +{% for import in param.extraImports %} +import {{ import }} +{% empty %} +{# If extraImports is a single String instead of an array, `for` considers it empty but we still have to check if there's a single String value #} +{% if param.extraImports %}import {{ param.extraImports }}{% endif %} +{% endfor %} + +// swiftlint:disable attributes file_length vertical_whitespace_closing_braces +// swiftlint:disable identifier_name line_length type_body_length +{% set accessModifier %}{% if param.publicAccess %}public{% else %}internal{% endif %}{% endset %} + +{% for model in models %} +{% for name, entity in model.entities %} +{% set superclass %}{{ model.entities[entity.superEntity].className|default:"NSManagedObject" }}{% endset %} +{% set entityClassName %}{{ entity.className|default:"NSManagedObject" }}{% endset %} +// MARK: - {{ entity.name }} + +{% if not entity.shouldGenerateCode %} +// Note: '{{ entity.name }}' has codegen enabled for Xcode, skipping code generation. + +{% elif entityClassName|contains:"." %} +// Warning: '{{ entityClassName }}' cannot be a valid type name, skipping code generation. + +{% else %} +{% if param.generateObjcName %} +@objc({{ entityClassName }}) +{% endif %} +{{ accessModifier }} class {{ entityClassName }}: {{ superclass }} { + {% set override %}{% if superclass != "NSManagedObject" %}override {% endif %}{% endset %} + {{ override }}{{ accessModifier }} class var entityName: String { + return "{{ entity.name }}" + } + + {{ override }}{{ accessModifier }} class func entity(in managedObjectContext: NSManagedObjectContext) -> NSEntityDescription? { + return NSEntityDescription.entity(forEntityName: entityName, in: managedObjectContext) + } + + @available(*, deprecated, renamed: "makeFetchRequest", message: "To avoid collisions with the less concrete method in `NSManagedObject`, please use `makeFetchRequest()` instead.") + @nonobjc {{ accessModifier }} class func fetchRequest() -> NSFetchRequest<{{ entityClassName }}> { + return NSFetchRequest<{{ entityClassName }}>(entityName: entityName) + } + + @nonobjc {{ accessModifier }} class func makeFetchRequest() -> NSFetchRequest<{{ entityClassName }}> { + return NSFetchRequest<{{ entityClassName }}>(entityName: entityName) + } + + // swiftlint:disable discouraged_optional_boolean discouraged_optional_collection + {% for attribute in entity.attributes %} + {% if attribute.userInfo.RawType %} + {% set rawType attribute.userInfo.RawType %} + {% set unwrapOptional attribute.userInfo.unwrapOptional %} + {{ accessModifier }} var {{ attribute.name }}: {{ rawType }}{% if not unwrapOptional %}?{% endif %} { + get { + let key = "{{ attribute.name }}" + willAccessValue(forKey: key) + defer { didAccessValue(forKey: key) } + + {% if unwrapOptional %} + guard let value = primitiveValue(forKey: key) as? {{ rawType }}.RawValue, + let result = {{ rawType }}(rawValue: value) else { + fatalError("Could not convert value for key '\(key)' to type '{{ rawType }}'") + } + return result + {% else %} + guard let value = primitiveValue(forKey: key) as? {{ rawType }}.RawValue else { + return nil + } + return {{ rawType }}(rawValue: value) + {% endif %} + } + set { + let key = "{{ attribute.name }}" + willChangeValue(forKey: key) + defer { didChangeValue(forKey: key) } + + setPrimitiveValue(newValue{% if not unwrapOptional %}?{% endif %}.rawValue, forKey: key) + } + } + {% elif attribute.usesScalarValueType and attribute.isOptional %} + {{ accessModifier }} var {{ attribute.name }}: {{ attribute.typeName }}? { + get { + let key = "{{ attribute.name }}" + willAccessValue(forKey: key) + defer { didAccessValue(forKey: key) } + + return primitiveValue(forKey: key) as? {{ attribute.typeName }} + } + set { + let key = "{{ attribute.name }}" + willChangeValue(forKey: key) + defer { didChangeValue(forKey: key) } + + setPrimitiveValue(newValue, forKey: key) + } + } + {% else %} + @NSManaged {{ accessModifier }} var {{ attribute.name }}: {{ attribute.typeName }}{% if attribute.isOptional %}?{% endif %} + {% endif %} + {% endfor %} + {% for relationship in entity.relationships %} + {% if relationship.isToMany %} + @NSManaged {{ accessModifier }} var {{ relationship.name }}: {% if relationship.isOrdered %}NSOrderedSet{% else %}Set<{{ model.entities[relationship.destinationEntity].className|default:"NSManagedObject" }}>{% endif %}{% if relationship.isOptional %}?{% endif %} + {% else %} + @NSManaged {{ accessModifier }} var {{ relationship.name }}: {{ model.entities[relationship.destinationEntity].className|default:"NSManagedObject" }}{% if relationship.isOptional %}?{% endif %} + {% endif %} + {% endfor %} + {% for fetchedProperty in entity.fetchedProperties %} + @NSManaged {{ accessModifier }} var {{ fetchedProperty.name }}: [{{ fetchedProperty.fetchRequest.entity }}] + {% endfor %} + // swiftlint:enable discouraged_optional_boolean discouraged_optional_collection +} + +{% for relationship in entity.relationships where relationship.isToMany %} +{% set destinationEntityClassName %}{{ model.entities[relationship.destinationEntity].className|default:"NSManagedObject" }}{% endset %} +{% set collectionClassName %}{% if relationship.isOrdered %}NSOrderedSet{% else %}Set<{{ destinationEntityClassName }}>{% endif %}{% endset %} +{% set relationshipName %}{{ relationship.name | upperFirstLetter }}{% endset %} +// MARK: Relationship {{ relationshipName }} + +extension {{ entityClassName }} { + {% if relationship.isOrdered %} + @objc(insertObject:in{{ relationshipName }}AtIndex:) + @NSManaged public func insertInto{{ relationshipName }}(_ value: {{ destinationEntityClassName }}, at idx: Int) + + @objc(removeObjectFrom{{ relationshipName }}AtIndex:) + @NSManaged public func removeFrom{{ relationshipName }}(at idx: Int) + + @objc(insert{{ relationshipName }}:atIndexes:) + @NSManaged public func insertInto{{ relationshipName }}(_ values: [{{ destinationEntityClassName }}], at indexes: NSIndexSet) + + @objc(remove{{ relationshipName }}AtIndexes:) + @NSManaged public func removeFrom{{ relationshipName }}(at indexes: NSIndexSet) + + @objc(replaceObjectIn{{ relationshipName }}AtIndex:withObject:) + @NSManaged public func replace{{ relationshipName }}(at idx: Int, with value: {{ destinationEntityClassName }}) + + @objc(replace{{ relationshipName }}AtIndexes:with{{ relationshipName }}:) + @NSManaged public func replace{{ relationshipName }}(at indexes: NSIndexSet, with values: [{{ destinationEntityClassName }}]) + + {% endif %} + @objc(add{{ relationshipName }}Object:) + @NSManaged public func addTo{{ relationshipName }}(_ value: {{ destinationEntityClassName }}) + + @objc(remove{{ relationshipName }}Object:) + @NSManaged public func removeFrom{{ relationshipName }}(_ value: {{ destinationEntityClassName }}) + + @objc(add{{ relationshipName }}:) + @NSManaged public func addTo{{ relationshipName }}(_ values: {{ collectionClassName }}) + + @objc(remove{{ relationshipName }}:) + @NSManaged public func removeFrom{{ relationshipName }}(_ values: {{ collectionClassName }}) +} + +{% endfor %} +{% if model.fetchRequests[entity.name].count > 0 %} +// MARK: Fetch Requests + +extension {{ entityClassName }} { + {% for fetchRequest in model.fetchRequests[entity.name] %} + {% set resultTypeName %}{% filter removeNewlines:"leading" %} + {% if fetchRequest.resultType == "Object" %} + {{ entityClassName }} + {% elif fetchRequest.resultType == "Object ID" %} + NSManagedObjectID + {% elif fetchRequest.resultType == "Dictionary" %} + [String: Any] + {% endif %} + {% endfilter %}{% endset %} + class func fetch{{ fetchRequest.name | upperFirstLetter }}({% filter removeNewlines:"leading" %} + managedObjectContext: NSManagedObjectContext + {% for variableName, variableType in fetchRequest.substitutionVariables %} + , {{ variableName | lowerFirstWord }}: {{ variableType }} + {% endfor %} + {% endfilter %}) throws -> [{{ resultTypeName }}] { + guard let persistentStoreCoordinator = managedObjectContext.persistentStoreCoordinator else { + fatalError("Managed object context has no persistent store coordinator for getting fetch request templates") + } + let model = persistentStoreCoordinator.managedObjectModel + let substitutionVariables: [String: Any] = [ + {% for variableName, variableType in fetchRequest.substitutionVariables %} + "{{ variableName }}": {{ variableName | lowerFirstWord }}{{ "," if not forloop.last }} + {% empty %} + : + {% endfor %} + ] + + guard let fetchRequest = model.fetchRequestFromTemplate(withName: "{{ fetchRequest.name }}", substitutionVariables: substitutionVariables) else { + fatalError("No fetch request template named '{{ fetchRequest.name }}' found.") + } + + guard let result = try managedObjectContext.fetch(fetchRequest) as? [{{ resultTypeName }}] else { + fatalError("Unable to cast fetch result to correct result type.") + } + + return result + } + + {% endfor %} +} + +{% endif %} +{% endif %} +{% endfor %} +{% endfor %} +// swiftlint:enable identifier_name line_length type_body_length diff --git a/Monal/.swiftgen/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/coredata/swift5.stencil b/Monal/.swiftgen/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/coredata/swift5.stencil new file mode 100644 index 0000000..9832876 --- /dev/null +++ b/Monal/.swiftgen/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/coredata/swift5.stencil @@ -0,0 +1,211 @@ +// swiftlint:disable all +// Generated using SwiftGen — https://github.com/SwiftGen/SwiftGen + +// swiftlint:disable superfluous_disable_command implicit_return +// swiftlint:disable sorted_imports +import CoreData +import Foundation +{% for import in param.extraImports %} +import {{ import }} +{% empty %} +{# If extraImports is a single String instead of an array, `for` considers it empty but we still have to check if there's a single String value #} +{% if param.extraImports %}import {{ param.extraImports }}{% endif %} +{% endfor %} + +// swiftlint:disable attributes file_length vertical_whitespace_closing_braces +// swiftlint:disable identifier_name line_length type_body_length +{% set accessModifier %}{% if param.publicAccess %}public{% else %}internal{% endif %}{% endset %} + +{% for model in models %} +{% for name, entity in model.entities %} +{% set superclass %}{{ model.entities[entity.superEntity].className|default:"NSManagedObject" }}{% endset %} +{% set entityClassName %}{{ entity.className|default:"NSManagedObject" }}{% endset %} +// MARK: - {{ entity.name }} + +{% if not entity.shouldGenerateCode %} +// Note: '{{ entity.name }}' has codegen enabled for Xcode, skipping code generation. + +{% elif entityClassName|contains:"." %} +// Warning: '{{ entityClassName }}' cannot be a valid type name, skipping code generation. + +{% else %} +{% if param.generateObjcName %} +@objc({{ entityClassName }}) +{% endif %} +{{ accessModifier }} class {{ entityClassName }}: {{ superclass }} { + {% set override %}{% if superclass != "NSManagedObject" %}override {% endif %}{% endset %} + {{ override }}{{ accessModifier }} class var entityName: String { + return "{{ entity.name }}" + } + + {{ override }}{{ accessModifier }} class func entity(in managedObjectContext: NSManagedObjectContext) -> NSEntityDescription? { + return NSEntityDescription.entity(forEntityName: entityName, in: managedObjectContext) + } + + @available(*, deprecated, renamed: "makeFetchRequest", message: "To avoid collisions with the less concrete method in `NSManagedObject`, please use `makeFetchRequest()` instead.") + @nonobjc {{ accessModifier }} class func fetchRequest() -> NSFetchRequest<{{ entityClassName }}> { + return NSFetchRequest<{{ entityClassName }}>(entityName: entityName) + } + + @nonobjc {{ accessModifier }} class func makeFetchRequest() -> NSFetchRequest<{{ entityClassName }}> { + return NSFetchRequest<{{ entityClassName }}>(entityName: entityName) + } + + // swiftlint:disable discouraged_optional_boolean discouraged_optional_collection + {% for attribute in entity.attributes %} + {% if attribute.userInfo.RawType %} + {% set rawType attribute.userInfo.RawType %} + {% set unwrapOptional attribute.userInfo.unwrapOptional %} + {{ accessModifier }} var {{ attribute.name }}: {{ rawType }}{% if not unwrapOptional %}?{% endif %} { + get { + let key = "{{ attribute.name }}" + willAccessValue(forKey: key) + defer { didAccessValue(forKey: key) } + + {% if unwrapOptional %} + guard let value = primitiveValue(forKey: key) as? {{ rawType }}.RawValue, + let result = {{ rawType }}(rawValue: value) else { + fatalError("Could not convert value for key '\(key)' to type '{{ rawType }}'") + } + return result + {% else %} + guard let value = primitiveValue(forKey: key) as? {{ rawType }}.RawValue else { + return nil + } + return {{ rawType }}(rawValue: value) + {% endif %} + } + set { + let key = "{{ attribute.name }}" + willChangeValue(forKey: key) + defer { didChangeValue(forKey: key) } + + setPrimitiveValue(newValue{% if not unwrapOptional %}?{% endif %}.rawValue, forKey: key) + } + } + {% elif attribute.usesScalarValueType and attribute.isOptional %} + {{ accessModifier }} var {{ attribute.name }}: {{ attribute.typeName }}? { + get { + let key = "{{ attribute.name }}" + willAccessValue(forKey: key) + defer { didAccessValue(forKey: key) } + + return primitiveValue(forKey: key) as? {{ attribute.typeName }} + } + set { + let key = "{{ attribute.name }}" + willChangeValue(forKey: key) + defer { didChangeValue(forKey: key) } + + setPrimitiveValue(newValue, forKey: key) + } + } + {% else %} + @NSManaged {{ accessModifier }} var {{ attribute.name }}: {{ attribute.typeName }}{% if attribute.isOptional %}?{% endif %} + {% endif %} + {% endfor %} + {% for relationship in entity.relationships %} + {% if relationship.isToMany %} + @NSManaged {{ accessModifier }} var {{ relationship.name }}: {% if relationship.isOrdered %}NSOrderedSet{% else %}Set<{{ model.entities[relationship.destinationEntity].className|default:"NSManagedObject" }}>{% endif %}{% if relationship.isOptional %}?{% endif %} + {% else %} + @NSManaged {{ accessModifier }} var {{ relationship.name }}: {{ model.entities[relationship.destinationEntity].className|default:"NSManagedObject" }}{% if relationship.isOptional %}?{% endif %} + {% endif %} + {% endfor %} + {% for fetchedProperty in entity.fetchedProperties %} + @NSManaged {{ accessModifier }} var {{ fetchedProperty.name }}: [{{ fetchedProperty.fetchRequest.entity }}] + {% endfor %} + // swiftlint:enable discouraged_optional_boolean discouraged_optional_collection +} + +{% for relationship in entity.relationships where relationship.isToMany %} +{% set destinationEntityClassName %}{{ model.entities[relationship.destinationEntity].className|default:"NSManagedObject" }}{% endset %} +{% set collectionClassName %}{% if relationship.isOrdered %}NSOrderedSet{% else %}Set<{{ destinationEntityClassName }}>{% endif %}{% endset %} +{% set relationshipName %}{{ relationship.name | upperFirstLetter }}{% endset %} +// MARK: Relationship {{ relationshipName }} + +extension {{ entityClassName }} { + {% if relationship.isOrdered %} + @objc(insertObject:in{{ relationshipName }}AtIndex:) + @NSManaged public func insertInto{{ relationshipName }}(_ value: {{ destinationEntityClassName }}, at idx: Int) + + @objc(removeObjectFrom{{ relationshipName }}AtIndex:) + @NSManaged public func removeFrom{{ relationshipName }}(at idx: Int) + + @objc(insert{{ relationshipName }}:atIndexes:) + @NSManaged public func insertInto{{ relationshipName }}(_ values: [{{ destinationEntityClassName }}], at indexes: NSIndexSet) + + @objc(remove{{ relationshipName }}AtIndexes:) + @NSManaged public func removeFrom{{ relationshipName }}(at indexes: NSIndexSet) + + @objc(replaceObjectIn{{ relationshipName }}AtIndex:withObject:) + @NSManaged public func replace{{ relationshipName }}(at idx: Int, with value: {{ destinationEntityClassName }}) + + @objc(replace{{ relationshipName }}AtIndexes:with{{ relationshipName }}:) + @NSManaged public func replace{{ relationshipName }}(at indexes: NSIndexSet, with values: [{{ destinationEntityClassName }}]) + + {% endif %} + @objc(add{{ relationshipName }}Object:) + @NSManaged public func addTo{{ relationshipName }}(_ value: {{ destinationEntityClassName }}) + + @objc(remove{{ relationshipName }}Object:) + @NSManaged public func removeFrom{{ relationshipName }}(_ value: {{ destinationEntityClassName }}) + + @objc(add{{ relationshipName }}:) + @NSManaged public func addTo{{ relationshipName }}(_ values: {{ collectionClassName }}) + + @objc(remove{{ relationshipName }}:) + @NSManaged public func removeFrom{{ relationshipName }}(_ values: {{ collectionClassName }}) +} + +{% endfor %} +{% if model.fetchRequests[entity.name].count > 0 %} +// MARK: Fetch Requests + +extension {{ entityClassName }} { + {% for fetchRequest in model.fetchRequests[entity.name] %} + {% set resultTypeName %}{% filter removeNewlines:"leading" %} + {% if fetchRequest.resultType == "Object" %} + {{ entityClassName }} + {% elif fetchRequest.resultType == "Object ID" %} + NSManagedObjectID + {% elif fetchRequest.resultType == "Dictionary" %} + [String: Any] + {% endif %} + {% endfilter %}{% endset %} + class func fetch{{ fetchRequest.name | upperFirstLetter }}({% filter removeNewlines:"leading" %} + managedObjectContext: NSManagedObjectContext + {% for variableName, variableType in fetchRequest.substitutionVariables %} + , {{ variableName | lowerFirstWord }}: {{ variableType }} + {% endfor %} + {% endfilter %}) throws -> [{{ resultTypeName }}] { + guard let persistentStoreCoordinator = managedObjectContext.persistentStoreCoordinator else { + fatalError("Managed object context has no persistent store coordinator for getting fetch request templates") + } + let model = persistentStoreCoordinator.managedObjectModel + let substitutionVariables: [String: Any] = [ + {% for variableName, variableType in fetchRequest.substitutionVariables %} + "{{ variableName }}": {{ variableName | lowerFirstWord }}{{ "," if not forloop.last }} + {% empty %} + : + {% endfor %} + ] + + guard let fetchRequest = model.fetchRequestFromTemplate(withName: "{{ fetchRequest.name }}", substitutionVariables: substitutionVariables) else { + fatalError("No fetch request template named '{{ fetchRequest.name }}' found.") + } + + guard let result = try managedObjectContext.fetch(fetchRequest) as? [{{ resultTypeName }}] else { + fatalError("Unable to cast fetch result to correct result type.") + } + + return result + } + + {% endfor %} +} + +{% endif %} +{% endif %} +{% endfor %} +{% endfor %} +// swiftlint:enable identifier_name line_length type_body_length diff --git a/Monal/.swiftgen/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/files/flat-swift4.stencil b/Monal/.swiftgen/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/files/flat-swift4.stencil new file mode 100644 index 0000000..09df24d --- /dev/null +++ b/Monal/.swiftgen/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/files/flat-swift4.stencil @@ -0,0 +1,103 @@ +// swiftlint:disable all +// Generated using SwiftGen — https://github.com/SwiftGen/SwiftGen + +{% if groups.count > 0 %} +{% set enumName %}{{param.enumName|default:"Files"}}{% endset %} +{% set useExt %}{% if param.useExtension|default:"true" %}true{% endif %}{% endset %} +{% set accessModifier %}{% if param.publicAccess %}public{% else %}internal{% endif %}{% endset %} +{% set resourceType %}{{param.resourceTypeName|default:"File"}}{% endset %} +import Foundation + +// swiftlint:disable superfluous_disable_command file_length line_length implicit_return + +// MARK: - Files + +{% macro groupBlock group %} + {% for file in group.files %} + {% call fileBlock file %} + {% endfor %} + {% for dir in group.directories %} + {% call dirBlock dir %} + {% endfor %} +{% endmacro %} +{% macro fileBlock file %} + /// {% if file.path and param.preservePath %}{{file.path}}/{% endif %}{{file.name}}{% if file.ext %}.{{file.ext}}{% endif %} + {% set identifier %}{{ file.name }}{% if useExt %}.{{ file.ext }}{% endif %}{% endset %} + {{accessModifier}} static let {{identifier|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}} = {{resourceType}}(name: "{{file.name}}", ext: {% if file.ext %}"{{file.ext}}"{% else %}nil{% endif %}, relativePath: "{{file.path if param.preservePath}}", mimeType: "{{file.mimeType}}") +{% endmacro %} +{% macro dirBlock directory %} + {% for file in directory.files %} + {% call fileBlock file %} + {% endfor %} + {% for dir in directory.directories %} + {% call dirBlock dir %} + {% endfor %} +{% endmacro %} +// swiftlint:disable explicit_type_interface identifier_name +// swiftlint:disable nesting type_body_length type_name vertical_whitespace_opening_braces +{{accessModifier}} enum {{enumName}} { + {% if groups.count > 1 or param.forceFileNameEnum %} + {% for group in groups %} + {{accessModifier}} enum {{group.name|swiftIdentifier:"pretty"|escapeReservedKeywords}} { + {% filter indent:2 %}{% call groupBlock group %}{% endfilter %} + } + {% endfor %} + {% else %} + {% call groupBlock groups.first %} + {% endif %} +} +// swiftlint:enable explicit_type_interface identifier_name +// swiftlint:enable nesting type_body_length type_name vertical_whitespace_opening_braces + +// MARK: - Implementation Details + +{{accessModifier}} struct {{resourceType}} { + {{accessModifier}} let name: String + {{accessModifier}} let ext: String? + {{accessModifier}} let relativePath: String + {{accessModifier}} let mimeType: String + + {{accessModifier}} var url: URL { + return url(locale: nil) + } + + {{accessModifier}} func url(locale: Locale?) -> URL { + let bundle = {{param.bundle|default:"BundleToken.bundle"}} + let url = bundle.url( + forResource: name, + withExtension: ext, + subdirectory: relativePath, + localization: locale?.identifier + ) + guard let result = url else { + let file = name + (ext.flatMap { ".\($0)" } ?? "") + fatalError("Could not locate file named \(file)") + } + return result + } + + {{accessModifier}} var path: String { + return path(locale: nil) + } + + {{accessModifier}} func path(locale: Locale?) -> String { + return url(locale: locale).path + } +} +{% if not param.bundle %} + +// swiftlint:disable convenience_type explicit_type_interface +private final class BundleToken { + static let bundle: Bundle = { + #if SWIFT_PACKAGE + return Bundle.module + #else + return Bundle(for: BundleToken.self) + #endif + }() +} +// swiftlint:enable convenience_type explicit_type_interface +{% endif %} +{% else %} +// No files found +{% endif %} diff --git a/Monal/.swiftgen/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/files/flat-swift5.stencil b/Monal/.swiftgen/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/files/flat-swift5.stencil new file mode 100644 index 0000000..09df24d --- /dev/null +++ b/Monal/.swiftgen/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/files/flat-swift5.stencil @@ -0,0 +1,103 @@ +// swiftlint:disable all +// Generated using SwiftGen — https://github.com/SwiftGen/SwiftGen + +{% if groups.count > 0 %} +{% set enumName %}{{param.enumName|default:"Files"}}{% endset %} +{% set useExt %}{% if param.useExtension|default:"true" %}true{% endif %}{% endset %} +{% set accessModifier %}{% if param.publicAccess %}public{% else %}internal{% endif %}{% endset %} +{% set resourceType %}{{param.resourceTypeName|default:"File"}}{% endset %} +import Foundation + +// swiftlint:disable superfluous_disable_command file_length line_length implicit_return + +// MARK: - Files + +{% macro groupBlock group %} + {% for file in group.files %} + {% call fileBlock file %} + {% endfor %} + {% for dir in group.directories %} + {% call dirBlock dir %} + {% endfor %} +{% endmacro %} +{% macro fileBlock file %} + /// {% if file.path and param.preservePath %}{{file.path}}/{% endif %}{{file.name}}{% if file.ext %}.{{file.ext}}{% endif %} + {% set identifier %}{{ file.name }}{% if useExt %}.{{ file.ext }}{% endif %}{% endset %} + {{accessModifier}} static let {{identifier|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}} = {{resourceType}}(name: "{{file.name}}", ext: {% if file.ext %}"{{file.ext}}"{% else %}nil{% endif %}, relativePath: "{{file.path if param.preservePath}}", mimeType: "{{file.mimeType}}") +{% endmacro %} +{% macro dirBlock directory %} + {% for file in directory.files %} + {% call fileBlock file %} + {% endfor %} + {% for dir in directory.directories %} + {% call dirBlock dir %} + {% endfor %} +{% endmacro %} +// swiftlint:disable explicit_type_interface identifier_name +// swiftlint:disable nesting type_body_length type_name vertical_whitespace_opening_braces +{{accessModifier}} enum {{enumName}} { + {% if groups.count > 1 or param.forceFileNameEnum %} + {% for group in groups %} + {{accessModifier}} enum {{group.name|swiftIdentifier:"pretty"|escapeReservedKeywords}} { + {% filter indent:2 %}{% call groupBlock group %}{% endfilter %} + } + {% endfor %} + {% else %} + {% call groupBlock groups.first %} + {% endif %} +} +// swiftlint:enable explicit_type_interface identifier_name +// swiftlint:enable nesting type_body_length type_name vertical_whitespace_opening_braces + +// MARK: - Implementation Details + +{{accessModifier}} struct {{resourceType}} { + {{accessModifier}} let name: String + {{accessModifier}} let ext: String? + {{accessModifier}} let relativePath: String + {{accessModifier}} let mimeType: String + + {{accessModifier}} var url: URL { + return url(locale: nil) + } + + {{accessModifier}} func url(locale: Locale?) -> URL { + let bundle = {{param.bundle|default:"BundleToken.bundle"}} + let url = bundle.url( + forResource: name, + withExtension: ext, + subdirectory: relativePath, + localization: locale?.identifier + ) + guard let result = url else { + let file = name + (ext.flatMap { ".\($0)" } ?? "") + fatalError("Could not locate file named \(file)") + } + return result + } + + {{accessModifier}} var path: String { + return path(locale: nil) + } + + {{accessModifier}} func path(locale: Locale?) -> String { + return url(locale: locale).path + } +} +{% if not param.bundle %} + +// swiftlint:disable convenience_type explicit_type_interface +private final class BundleToken { + static let bundle: Bundle = { + #if SWIFT_PACKAGE + return Bundle.module + #else + return Bundle(for: BundleToken.self) + #endif + }() +} +// swiftlint:enable convenience_type explicit_type_interface +{% endif %} +{% else %} +// No files found +{% endif %} diff --git a/Monal/.swiftgen/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/files/structured-swift4.stencil b/Monal/.swiftgen/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/files/structured-swift4.stencil new file mode 100644 index 0000000..6d6db96 --- /dev/null +++ b/Monal/.swiftgen/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/files/structured-swift4.stencil @@ -0,0 +1,107 @@ +// swiftlint:disable all +// Generated using SwiftGen — https://github.com/SwiftGen/SwiftGen + +{% if groups.count > 0 %} +{% set enumName %}{{param.enumName|default:"Files"}}{% endset %} +{% set useExt %}{% if param.useExtension|default:"true" %}true{% endif %}{% endset %} +{% set accessModifier %}{% if param.publicAccess %}public{% else %}internal{% endif %}{% endset %} +{% set resourceType %}{{param.resourceTypeName|default:"File"}}{% endset %} +import Foundation + +// swiftlint:disable superfluous_disable_command file_length line_length implicit_return + +// MARK: - Files + +{% macro groupBlock group %} + {% for file in group.files %} + {% call fileBlock file %} + {% endfor %} + {% for dir in group.directories %} + {% call dirBlock dir "" %} + {% endfor %} +{% endmacro %} +{% macro fileBlock file %} + /// {% if file.path and param.preservePath %}{{file.path}}/{% endif %}{{file.name}}{% if file.ext %}.{{file.ext}}{% endif %} + {% set identifier %}{{ file.name }}{% if useExt %}.{{ file.ext }}{% endif %}{% endset %} + {{accessModifier}} static let {{identifier|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}} = {{resourceType}}(name: "{{file.name}}", ext: {% if file.ext %}"{{file.ext}}"{% else %}nil{% endif %}, relativePath: "{{file.path if param.preservePath}}", mimeType: "{{file.mimeType}}") +{% endmacro %} +{% macro dirBlock directory parent %} + {% set fullDir %}{{parent}}{{directory.name}}/{% endset %} + /// {{ fullDir }} + {{accessModifier}} enum {{directory.name|swiftIdentifier:"pretty"|escapeReservedKeywords}} { + {% for file in directory.files %} + {% filter indent:2 %}{% call fileBlock file %}{% endfilter %} + {% endfor %} + {% for dir in directory.directories %} + {% filter indent:2 %}{% call dirBlock dir fullDir %}{% endfilter %} + {% endfor %} + } +{% endmacro %} +// swiftlint:disable explicit_type_interface identifier_name +// swiftlint:disable nesting type_body_length type_name vertical_whitespace_opening_braces +{{accessModifier}} enum {{enumName}} { + {% if groups.count > 1 or param.forceFileNameEnum %} + {% for group in groups %} + {{accessModifier}} enum {{group.name|swiftIdentifier:"pretty"|escapeReservedKeywords}} { + {% filter indent:2 %}{% call groupBlock group %}{% endfilter %} + } + {% endfor %} + {% else %} + {% call groupBlock groups.first %} + {% endif %} +} +// swiftlint:enable explicit_type_interface identifier_name +// swiftlint:enable nesting type_body_length type_name vertical_whitespace_opening_braces + +// MARK: - Implementation Details + +{{accessModifier}} struct {{resourceType}} { + {{accessModifier}} let name: String + {{accessModifier}} let ext: String? + {{accessModifier}} let relativePath: String + {{accessModifier}} let mimeType: String + + {{accessModifier}} var url: URL { + return url(locale: nil) + } + + {{accessModifier}} func url(locale: Locale?) -> URL { + let bundle = {{param.bundle|default:"BundleToken.bundle"}} + let url = bundle.url( + forResource: name, + withExtension: ext, + subdirectory: relativePath, + localization: locale?.identifier + ) + guard let result = url else { + let file = name + (ext.flatMap { ".\($0)" } ?? "") + fatalError("Could not locate file named \(file)") + } + return result + } + + {{accessModifier}} var path: String { + return path(locale: nil) + } + + {{accessModifier}} func path(locale: Locale?) -> String { + return url(locale: locale).path + } +} +{% if not param.bundle %} + +// swiftlint:disable convenience_type explicit_type_interface +private final class BundleToken { + static let bundle: Bundle = { + #if SWIFT_PACKAGE + return Bundle.module + #else + return Bundle(for: BundleToken.self) + #endif + }() +} +// swiftlint:enable convenience_type explicit_type_interface +{% endif %} +{% else %} +// No files found +{% endif %} diff --git a/Monal/.swiftgen/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/files/structured-swift5.stencil b/Monal/.swiftgen/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/files/structured-swift5.stencil new file mode 100644 index 0000000..6d6db96 --- /dev/null +++ b/Monal/.swiftgen/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/files/structured-swift5.stencil @@ -0,0 +1,107 @@ +// swiftlint:disable all +// Generated using SwiftGen — https://github.com/SwiftGen/SwiftGen + +{% if groups.count > 0 %} +{% set enumName %}{{param.enumName|default:"Files"}}{% endset %} +{% set useExt %}{% if param.useExtension|default:"true" %}true{% endif %}{% endset %} +{% set accessModifier %}{% if param.publicAccess %}public{% else %}internal{% endif %}{% endset %} +{% set resourceType %}{{param.resourceTypeName|default:"File"}}{% endset %} +import Foundation + +// swiftlint:disable superfluous_disable_command file_length line_length implicit_return + +// MARK: - Files + +{% macro groupBlock group %} + {% for file in group.files %} + {% call fileBlock file %} + {% endfor %} + {% for dir in group.directories %} + {% call dirBlock dir "" %} + {% endfor %} +{% endmacro %} +{% macro fileBlock file %} + /// {% if file.path and param.preservePath %}{{file.path}}/{% endif %}{{file.name}}{% if file.ext %}.{{file.ext}}{% endif %} + {% set identifier %}{{ file.name }}{% if useExt %}.{{ file.ext }}{% endif %}{% endset %} + {{accessModifier}} static let {{identifier|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}} = {{resourceType}}(name: "{{file.name}}", ext: {% if file.ext %}"{{file.ext}}"{% else %}nil{% endif %}, relativePath: "{{file.path if param.preservePath}}", mimeType: "{{file.mimeType}}") +{% endmacro %} +{% macro dirBlock directory parent %} + {% set fullDir %}{{parent}}{{directory.name}}/{% endset %} + /// {{ fullDir }} + {{accessModifier}} enum {{directory.name|swiftIdentifier:"pretty"|escapeReservedKeywords}} { + {% for file in directory.files %} + {% filter indent:2 %}{% call fileBlock file %}{% endfilter %} + {% endfor %} + {% for dir in directory.directories %} + {% filter indent:2 %}{% call dirBlock dir fullDir %}{% endfilter %} + {% endfor %} + } +{% endmacro %} +// swiftlint:disable explicit_type_interface identifier_name +// swiftlint:disable nesting type_body_length type_name vertical_whitespace_opening_braces +{{accessModifier}} enum {{enumName}} { + {% if groups.count > 1 or param.forceFileNameEnum %} + {% for group in groups %} + {{accessModifier}} enum {{group.name|swiftIdentifier:"pretty"|escapeReservedKeywords}} { + {% filter indent:2 %}{% call groupBlock group %}{% endfilter %} + } + {% endfor %} + {% else %} + {% call groupBlock groups.first %} + {% endif %} +} +// swiftlint:enable explicit_type_interface identifier_name +// swiftlint:enable nesting type_body_length type_name vertical_whitespace_opening_braces + +// MARK: - Implementation Details + +{{accessModifier}} struct {{resourceType}} { + {{accessModifier}} let name: String + {{accessModifier}} let ext: String? + {{accessModifier}} let relativePath: String + {{accessModifier}} let mimeType: String + + {{accessModifier}} var url: URL { + return url(locale: nil) + } + + {{accessModifier}} func url(locale: Locale?) -> URL { + let bundle = {{param.bundle|default:"BundleToken.bundle"}} + let url = bundle.url( + forResource: name, + withExtension: ext, + subdirectory: relativePath, + localization: locale?.identifier + ) + guard let result = url else { + let file = name + (ext.flatMap { ".\($0)" } ?? "") + fatalError("Could not locate file named \(file)") + } + return result + } + + {{accessModifier}} var path: String { + return path(locale: nil) + } + + {{accessModifier}} func path(locale: Locale?) -> String { + return url(locale: locale).path + } +} +{% if not param.bundle %} + +// swiftlint:disable convenience_type explicit_type_interface +private final class BundleToken { + static let bundle: Bundle = { + #if SWIFT_PACKAGE + return Bundle.module + #else + return Bundle(for: BundleToken.self) + #endif + }() +} +// swiftlint:enable convenience_type explicit_type_interface +{% endif %} +{% else %} +// No files found +{% endif %} diff --git a/Monal/.swiftgen/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/fonts/swift4.stencil b/Monal/.swiftgen/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/fonts/swift4.stencil new file mode 100644 index 0000000..744d6a4 --- /dev/null +++ b/Monal/.swiftgen/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/fonts/swift4.stencil @@ -0,0 +1,110 @@ +// swiftlint:disable all +// Generated using SwiftGen — https://github.com/SwiftGen/SwiftGen + +{% if families %} +{% set accessModifier %}{% if param.publicAccess %}public{% else %}internal{% endif %}{% endset %} +{% set fontType %}{{param.fontTypeName|default:"FontConvertible"}}{% endset %} +#if os(macOS) + import AppKit.NSFont +#elseif os(iOS) || os(tvOS) || os(watchOS) + import UIKit.UIFont +#endif + +// Deprecated typealiases +@available(*, deprecated, renamed: "{{fontType}}.Font", message: "This typealias will be removed in SwiftGen 7.0") +{{accessModifier}} typealias {{param.fontAliasName|default:"Font"}} = {{fontType}}.Font + +// swiftlint:disable superfluous_disable_command +// swiftlint:disable file_length +// swiftlint:disable implicit_return + +// MARK: - Fonts + +// swiftlint:disable identifier_name line_length type_body_length +{% macro transformPath path %}{% filter removeNewlines %} + {% if param.preservePath %} + {{path}} + {% else %} + {{path|basename}} + {% endif %} +{% endfilter %}{% endmacro %} +{{accessModifier}} enum {{param.enumName|default:"FontFamily"}} { + {% for family in families %} + {{accessModifier}} enum {{family.name|swiftIdentifier:"pretty"|escapeReservedKeywords}} { + {% for font in family.fonts %} + {{accessModifier}} static let {{font.style|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}} = {{fontType}}(name: "{{font.name}}", family: "{{family.name}}", path: "{% call transformPath font.path %}") + {% endfor %} + {{accessModifier}} static let all: [{{fontType}}] = [{% for font in family.fonts %}{{font.style|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}}{{ ", " if not forloop.last }}{% endfor %}] + } + {% endfor %} + {{accessModifier}} static let allCustomFonts: [{{fontType}}] = [{% for family in families %}{{family.name|swiftIdentifier:"pretty"|escapeReservedKeywords}}.all{{ ", " if not forloop.last }}{% endfor %}].flatMap { $0 } + {{accessModifier}} static func registerAllCustomFonts() { + allCustomFonts.forEach { $0.register() } + } +} +// swiftlint:enable identifier_name line_length type_body_length + +// MARK: - Implementation Details + +{{accessModifier}} struct {{fontType}} { + {{accessModifier}} let name: String + {{accessModifier}} let family: String + {{accessModifier}} let path: String + + #if os(macOS) + {{accessModifier}} typealias Font = NSFont + #elseif os(iOS) || os(tvOS) || os(watchOS) + {{accessModifier}} typealias Font = UIFont + #endif + + {{accessModifier}} func font(size: CGFloat) -> Font! { + return Font(font: self, size: size) + } + + {{accessModifier}} func register() { + // swiftlint:disable:next conditional_returns_on_newline + guard let url = url else { return } + CTFontManagerRegisterFontsForURL(url as CFURL, .process, nil) + } + + fileprivate var url: URL? { + {% if param.lookupFunction %} + return {{param.lookupFunction}}(name, family, path) + {% else %} + return {{param.bundle|default:"BundleToken.bundle"}}.url(forResource: path, withExtension: nil) + {% endif %} + } +} + +{{accessModifier}} extension {{fontType}}.Font { + convenience init?(font: {{fontType}}, size: CGFloat) { + #if os(iOS) || os(tvOS) || os(watchOS) + if !UIFont.fontNames(forFamilyName: font.family).contains(font.name) { + font.register() + } + #elseif os(macOS) + if let url = font.url, CTFontManagerGetScopeForURL(url as CFURL) == .none { + font.register() + } + #endif + + self.init(name: font.name, size: size) + } +} +{% if not param.bundle and not param.lookupFunction %} + +// swiftlint:disable convenience_type +private final class BundleToken { + static let bundle: Bundle = { + #if SWIFT_PACKAGE + return Bundle.module + #else + return Bundle(for: BundleToken.self) + #endif + }() +} +// swiftlint:enable convenience_type +{% endif %} +{% else %} +// No fonts found +{% endif %} diff --git a/Monal/.swiftgen/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/fonts/swift5.stencil b/Monal/.swiftgen/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/fonts/swift5.stencil new file mode 100644 index 0000000..5a268b5 --- /dev/null +++ b/Monal/.swiftgen/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/fonts/swift5.stencil @@ -0,0 +1,113 @@ +// swiftlint:disable all +// Generated using SwiftGen — https://github.com/SwiftGen/SwiftGen + +{% if families %} +{% set accessModifier %}{% if param.publicAccess %}public{% else %}internal{% endif %}{% endset %} +{% set fontType %}{{param.fontTypeName|default:"FontConvertible"}}{% endset %} +#if os(macOS) + import AppKit.NSFont +#elseif os(iOS) || os(tvOS) || os(watchOS) + import UIKit.UIFont +#endif + +// Deprecated typealiases +@available(*, deprecated, renamed: "{{fontType}}.Font", message: "This typealias will be removed in SwiftGen 7.0") +{{accessModifier}} typealias {{param.fontAliasName|default:"Font"}} = {{fontType}}.Font + +// swiftlint:disable superfluous_disable_command +// swiftlint:disable file_length + +// MARK: - Fonts + +// swiftlint:disable identifier_name line_length type_body_length +{% macro transformPath path %}{% filter removeNewlines %} + {% if param.preservePath %} + {{path}} + {% else %} + {{path|basename}} + {% endif %} +{% endfilter %}{% endmacro %} +{{accessModifier}} enum {{param.enumName|default:"FontFamily"}} { + {% for family in families %} + {{accessModifier}} enum {{family.name|swiftIdentifier:"pretty"|escapeReservedKeywords}} { + {% for font in family.fonts %} + {{accessModifier}} static let {{font.style|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}} = {{fontType}}(name: "{{font.name}}", family: "{{family.name}}", path: "{% call transformPath font.path %}") + {% endfor %} + {{accessModifier}} static let all: [{{fontType}}] = [{% for font in family.fonts %}{{font.style|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}}{{ ", " if not forloop.last }}{% endfor %}] + } + {% endfor %} + {{accessModifier}} static let allCustomFonts: [{{fontType}}] = [{% for family in families %}{{family.name|swiftIdentifier:"pretty"|escapeReservedKeywords}}.all{{ ", " if not forloop.last }}{% endfor %}].flatMap { $0 } + {{accessModifier}} static func registerAllCustomFonts() { + allCustomFonts.forEach { $0.register() } + } +} +// swiftlint:enable identifier_name line_length type_body_length + +// MARK: - Implementation Details + +{{accessModifier}} struct {{fontType}} { + {{accessModifier}} let name: String + {{accessModifier}} let family: String + {{accessModifier}} let path: String + + #if os(macOS) + {{accessModifier}} typealias Font = NSFont + #elseif os(iOS) || os(tvOS) || os(watchOS) + {{accessModifier}} typealias Font = UIFont + #endif + + {{accessModifier}} func font(size: CGFloat) -> Font { + guard let font = Font(font: self, size: size) else { + fatalError("Unable to initialize font '\(name)' (\(family))") + } + return font + } + + {{accessModifier}} func register() { + // swiftlint:disable:next conditional_returns_on_newline + guard let url = url else { return } + CTFontManagerRegisterFontsForURL(url as CFURL, .process, nil) + } + + fileprivate var url: URL? { + // swiftlint:disable:next implicit_return + {% if param.lookupFunction %} + return {{param.lookupFunction}}(name, family, path) + {% else %} + return {{param.bundle|default:"BundleToken.bundle"}}.url(forResource: path, withExtension: nil) + {% endif %} + } +} + +{{accessModifier}} extension {{fontType}}.Font { + convenience init?(font: {{fontType}}, size: CGFloat) { + #if os(iOS) || os(tvOS) || os(watchOS) + if !UIFont.fontNames(forFamilyName: font.family).contains(font.name) { + font.register() + } + #elseif os(macOS) + if let url = font.url, CTFontManagerGetScopeForURL(url as CFURL) == .none { + font.register() + } + #endif + + self.init(name: font.name, size: size) + } +} +{% if not param.bundle and not param.lookupFunction %} + +// swiftlint:disable convenience_type +private final class BundleToken { + static let bundle: Bundle = { + #if SWIFT_PACKAGE + return Bundle.module + #else + return Bundle(for: BundleToken.self) + #endif + }() +} +// swiftlint:enable convenience_type +{% endif %} +{% else %} +// No fonts found +{% endif %} diff --git a/Monal/.swiftgen/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/ib/scenes-swift4.stencil b/Monal/.swiftgen/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/ib/scenes-swift4.stencil new file mode 100644 index 0000000..9ad52ff --- /dev/null +++ b/Monal/.swiftgen/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/ib/scenes-swift4.stencil @@ -0,0 +1,157 @@ +// swiftlint:disable all +// Generated using SwiftGen — https://github.com/SwiftGen/SwiftGen + +{% if platform and storyboards %} +{% set accessModifier %}{% if param.publicAccess %}public{% else %}internal{% endif %}{% endset %} +{% set isAppKit %}{% if platform == "macOS" %}true{% endif %}{% endset %} +{% set prefix %}{% if isAppKit %}NS{% else %}UI{% endif %}{% endset %} +{% set controller %}{% if isAppKit %}Controller{% else %}ViewController{% endif %}{% endset %} +// swiftlint:disable sorted_imports +import Foundation +{% for module in modules where module != env.PRODUCT_MODULE_NAME and module != param.module %} +import {{module}} +{% endfor %} + +// swiftlint:disable superfluous_disable_command +// swiftlint:disable file_length implicit_return + +// MARK: - Storyboard Scenes + +// swiftlint:disable explicit_type_interface identifier_name line_length type_body_length type_name +{% macro moduleName item %}{% filter removeNewlines %} + {% if item.moduleIsPlaceholder %} + {{ env.PRODUCT_MODULE_NAME|default:param.module }} + {% else %} + {{ item.module }} + {% endif %} +{% endfilter %}{% endmacro %} +{% macro className item %}{% filter removeNewlines %} + {% set module %}{% call moduleName item %}{% endset %} + {% if module and ( not param.ignoreTargetModule or module != env.PRODUCT_MODULE_NAME and module != param.module ) %} + {{module}}. + {% endif %} + {{item.type}} +{% endfilter %}{% endmacro %} +{{accessModifier}} enum {{param.enumName|default:"StoryboardScene"}} { + {% for storyboard in storyboards %} + {% set storyboardName %}{{storyboard.name|swiftIdentifier:"pretty"|escapeReservedKeywords}}{% endset %} + {{accessModifier}} enum {{storyboardName}}: StoryboardType { + {{accessModifier}} static let storyboardName = "{{storyboard.name}}" + {% if storyboard.initialScene %} + + {% set sceneClass %}{% call className storyboard.initialScene %}{% endset %} + {{accessModifier}} static let initialScene = InitialSceneType<{{sceneClass}}>(storyboard: {{storyboardName}}.self) + {% endif %} + {% for scene in storyboard.scenes %} + + {% set sceneID %}{{scene.identifier|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}}{% endset %} + {% set sceneClass %}{% call className scene %}{% endset %} + {{accessModifier}} static let {{sceneID}} = SceneType<{{sceneClass}}>(storyboard: {{storyboardName}}.self, identifier: "{{scene.identifier}}") + {% endfor %} + } + {% endfor %} +} +// swiftlint:enable explicit_type_interface identifier_name line_length type_body_length type_name + +// MARK: - Implementation Details + +{{accessModifier}} protocol StoryboardType { + static var storyboardName: String { get } +} + +{{accessModifier}} extension StoryboardType { + static var storyboard: {{prefix}}Storyboard { + let name = {% if isAppKit %}NSStoryboard.Name({% endif %}self.storyboardName{% if isAppKit %}){% endif %} + {% if param.lookupFunction %} + return {{param.lookupFunction}}(name) + {% else %} + return {{prefix}}Storyboard(name: name, bundle: {{param.bundle|default:"BundleToken.bundle"}}) + {% endif %} + } +} + +{{accessModifier}} struct SceneType { + {{accessModifier}} let storyboard: StoryboardType.Type + {{accessModifier}} let identifier: String + + {{accessModifier}} func instantiate() -> T { + let identifier = {% if isAppKit %}NSStoryboard.SceneIdentifier({% endif %}self.identifier{% if isAppKit %}){% endif %} + guard let controller = storyboard.storyboard.instantiate{{controller}}(withIdentifier: identifier) as? T else { + fatalError("{{controller}} '\(identifier)' is not of the expected class \(T.self).") + } + return controller + } + + {% if isAppKit %} + @available(macOS 10.15, *) + {{accessModifier}} func instantiate(creator block: @escaping (NSCoder) -> T?) -> T where T: NSViewController { + return storyboard.storyboard.instantiate{{controller}}(identifier: identifier, creator: block) + } + + @available(macOS 10.15, *) + {{accessModifier}} func instantiate(creator block: @escaping (NSCoder) -> T?) -> T where T: NSWindowController { + return storyboard.storyboard.instantiate{{controller}}(identifier: identifier, creator: block) + } + {% else %} + @available(iOS 13.0, tvOS 13.0, *) + {{accessModifier}} func instantiate(creator block: @escaping (NSCoder) -> T?) -> T { + return storyboard.storyboard.instantiate{{controller}}(identifier: identifier, creator: block) + } + {% endif %} +} + +{{accessModifier}} struct InitialSceneType { + {{accessModifier}} let storyboard: StoryboardType.Type + + {{accessModifier}} func instantiate() -> T { + guard let controller = storyboard.storyboard.instantiateInitial{{controller}}() as? T else { + fatalError("{{controller}} is not of the expected class \(T.self).") + } + return controller + } + + {% if isAppKit %} + @available(macOS 10.15, *) + {{accessModifier}} func instantiate(creator block: @escaping (NSCoder) -> T?) -> T where T: NSViewController { + guard let controller = storyboard.storyboard.instantiateInitial{{controller}}(creator: block) else { + fatalError("Storyboard \(storyboard.storyboardName) does not have an initial scene.") + } + return controller + } + + @available(macOS 10.15, *) + {{accessModifier}} func instantiate(creator block: @escaping (NSCoder) -> T?) -> T where T: NSWindowController { + guard let controller = storyboard.storyboard.instantiateInitial{{controller}}(creator: block) else { + fatalError("Storyboard \(storyboard.storyboardName) does not have an initial scene.") + } + return controller + } + {% else %} + @available(iOS 13.0, tvOS 13.0, *) + {{accessModifier}} func instantiate(creator block: @escaping (NSCoder) -> T?) -> T { + guard let controller = storyboard.storyboard.instantiateInitial{{controller}}(creator: block) else { + fatalError("Storyboard \(storyboard.storyboardName) does not have an initial scene.") + } + return controller + } + {% endif %} +} +{% if not param.bundle and not param.lookupFunction %} + +// swiftlint:disable convenience_type +private final class BundleToken { + static let bundle: Bundle = { + #if SWIFT_PACKAGE + return Bundle.module + #else + return Bundle(for: BundleToken.self) + #endif + }() +} +// swiftlint:enable convenience_type +{% endif %} +{% elif storyboards %} +// Mixed AppKit and UIKit storyboard files found, please invoke swiftgen with these separately +{% else %} +// No storyboard found +{% endif %} diff --git a/Monal/.swiftgen/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/ib/scenes-swift5.stencil b/Monal/.swiftgen/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/ib/scenes-swift5.stencil new file mode 100644 index 0000000..5f29f8b --- /dev/null +++ b/Monal/.swiftgen/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/ib/scenes-swift5.stencil @@ -0,0 +1,159 @@ +// swiftlint:disable all +// Generated using SwiftGen — https://github.com/SwiftGen/SwiftGen + +{% if platform and storyboards %} +{% set accessModifier %}{% if param.publicAccess %}public{% else %}internal{% endif %}{% endset %} +{% set isAppKit %}{% if platform == "macOS" %}true{% endif %}{% endset %} +{% set prefix %}{% if isAppKit %}NS{% else %}UI{% endif %}{% endset %} +{% set controller %}{% if isAppKit %}Controller{% else %}ViewController{% endif %}{% endset %} +// swiftlint:disable sorted_imports +import Foundation +{% for module in modules where module != env.PRODUCT_MODULE_NAME and module != param.module %} +import {{module}} +{% endfor %} + +// swiftlint:disable superfluous_disable_command +// swiftlint:disable file_length implicit_return + +// MARK: - Storyboard Scenes + +// swiftlint:disable explicit_type_interface identifier_name line_length type_body_length type_name +{% macro moduleName item %}{% filter removeNewlines %} + {% if item.moduleIsPlaceholder %} + {{ env.PRODUCT_MODULE_NAME|default:param.module }} + {% else %} + {{ item.module }} + {% endif %} +{% endfilter %}{% endmacro %} +{% macro className item %}{% filter removeNewlines %} + {% set module %}{% call moduleName item %}{% endset %} + {% if module and ( not param.ignoreTargetModule or module != env.PRODUCT_MODULE_NAME and module != param.module ) %} + {{module}}. + {% endif %} + {{item.type}} +{% endfilter %}{% endmacro %} +{{accessModifier}} enum {{param.enumName|default:"StoryboardScene"}} { + {% for storyboard in storyboards %} + {% set storyboardName %}{{storyboard.name|swiftIdentifier:"pretty"|escapeReservedKeywords}}{% endset %} + {{accessModifier}} enum {{storyboardName}}: StoryboardType { + {{accessModifier}} static let storyboardName = "{{storyboard.name}}" + {% if storyboard.initialScene %} + + {% set sceneClass %}{% call className storyboard.initialScene %}{% endset %} + {{accessModifier}} static let initialScene = InitialSceneType<{{sceneClass}}>(storyboard: {{storyboardName}}.self) + {% endif %} + {% for scene in storyboard.scenes %} + + {% set sceneID %}{{scene.identifier|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}}{% endset %} + {% set sceneClass %}{% call className scene %}{% endset %} + {{accessModifier}} static let {{sceneID}} = SceneType<{{sceneClass}}>(storyboard: {{storyboardName}}.self, identifier: "{{scene.identifier}}") + {% endfor %} + } + {% endfor %} +} +// swiftlint:enable explicit_type_interface identifier_name line_length type_body_length type_name + +// MARK: - Implementation Details + +{{accessModifier}} protocol StoryboardType { + static var storyboardName: String { get } +} + +{{accessModifier}} extension StoryboardType { + static var storyboard: {{prefix}}Storyboard { + let name = {% if isAppKit %}NSStoryboard.Name({% endif %}self.storyboardName{% if isAppKit %}){% endif %} + {% if param.lookupFunction %} + return {{param.lookupFunction}}(name) + {% else %} + return {{prefix}}Storyboard(name: name, bundle: {{param.bundle|default:"BundleToken.bundle"}}) + {% endif %} + } +} + +{{accessModifier}} struct SceneType { + {{accessModifier}} let storyboard: StoryboardType.Type + {{accessModifier}} let identifier: String + + {{accessModifier}} func instantiate() -> T { + let identifier = {% if isAppKit %}NSStoryboard.SceneIdentifier({% endif %}self.identifier{% if isAppKit %}){% endif %} + guard let controller = storyboard.storyboard.instantiate{{controller}}(withIdentifier: identifier) as? T else { + fatalError("{{controller}} '\(identifier)' is not of the expected class \(T.self).") + } + return controller + } + + {% if isAppKit %} + @available(macOS 10.15, *) + {{accessModifier}} func instantiate(creator block: @escaping (NSCoder) -> T?) -> T where T: NSViewController { + let identifier = NSStoryboard.SceneIdentifier(self.identifier) + return storyboard.storyboard.instantiate{{controller}}(identifier: identifier, creator: block) + } + + @available(macOS 10.15, *) + {{accessModifier}} func instantiate(creator block: @escaping (NSCoder) -> T?) -> T where T: NSWindowController { + let identifier = NSStoryboard.SceneIdentifier(self.identifier) + return storyboard.storyboard.instantiate{{controller}}(identifier: identifier, creator: block) + } + {% else %} + @available(iOS 13.0, tvOS 13.0, *) + {{accessModifier}} func instantiate(creator block: @escaping (NSCoder) -> T?) -> T { + return storyboard.storyboard.instantiate{{controller}}(identifier: identifier, creator: block) + } + {% endif %} +} + +{{accessModifier}} struct InitialSceneType { + {{accessModifier}} let storyboard: StoryboardType.Type + + {{accessModifier}} func instantiate() -> T { + guard let controller = storyboard.storyboard.instantiateInitial{{controller}}() as? T else { + fatalError("{{controller}} is not of the expected class \(T.self).") + } + return controller + } + + {% if isAppKit %} + @available(macOS 10.15, *) + {{accessModifier}} func instantiate(creator block: @escaping (NSCoder) -> T?) -> T where T: NSViewController { + guard let controller = storyboard.storyboard.instantiateInitial{{controller}}(creator: block) else { + fatalError("Storyboard \(storyboard.storyboardName) does not have an initial scene.") + } + return controller + } + + @available(macOS 10.15, *) + {{accessModifier}} func instantiate(creator block: @escaping (NSCoder) -> T?) -> T where T: NSWindowController { + guard let controller = storyboard.storyboard.instantiateInitial{{controller}}(creator: block) else { + fatalError("Storyboard \(storyboard.storyboardName) does not have an initial scene.") + } + return controller + } + {% else %} + @available(iOS 13.0, tvOS 13.0, *) + {{accessModifier}} func instantiate(creator block: @escaping (NSCoder) -> T?) -> T { + guard let controller = storyboard.storyboard.instantiateInitial{{controller}}(creator: block) else { + fatalError("Storyboard \(storyboard.storyboardName) does not have an initial scene.") + } + return controller + } + {% endif %} +} +{% if not param.bundle and not param.lookupFunction %} + +// swiftlint:disable convenience_type +private final class BundleToken { + static let bundle: Bundle = { + #if SWIFT_PACKAGE + return Bundle.module + #else + return Bundle(for: BundleToken.self) + #endif + }() +} +// swiftlint:enable convenience_type +{% endif %} +{% elif storyboards %} +// Mixed AppKit and UIKit storyboard files found, please invoke swiftgen with these separately +{% else %} +// No storyboard found +{% endif %} diff --git a/Monal/.swiftgen/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/ib/segues-swift4.stencil b/Monal/.swiftgen/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/ib/segues-swift4.stencil new file mode 100644 index 0000000..476d546 --- /dev/null +++ b/Monal/.swiftgen/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/ib/segues-swift4.stencil @@ -0,0 +1,60 @@ +// swiftlint:disable all +// Generated using SwiftGen — https://github.com/SwiftGen/SwiftGen + +{% if platform and storyboards %} +{% set accessModifier %}{% if param.publicAccess %}public{% else %}internal{% endif %}{% endset %} +{% set isAppKit %}{% if platform == "macOS" %}true{% endif %}{% endset %} +// swiftlint:disable sorted_imports +import Foundation +{% for module in modules where module != env.PRODUCT_MODULE_NAME and module != param.module %} +import {{module}} +{% endfor %} + +// swiftlint:disable superfluous_disable_command +// swiftlint:disable file_length + +// MARK: - Storyboard Segues + +// swiftlint:disable explicit_type_interface identifier_name line_length type_body_length type_name +{{accessModifier}} enum {{param.enumName|default:"StoryboardSegue"}} { + {% for storyboard in storyboards where storyboard.segues %} + {{accessModifier}} enum {{storyboard.name|swiftIdentifier:"pretty"|escapeReservedKeywords}}: String, SegueType { + {% for segue in storyboard.segues %} + {% set segueID %}{{segue.identifier|swiftIdentifier:"pretty"|lowerFirstWord}}{% endset %} + case {{segueID|escapeReservedKeywords}}{% if segueID != segue.identifier %} = "{{segue.identifier}}"{% endif %} + {% endfor %} + } + {% endfor %} +} +// swiftlint:enable explicit_type_interface identifier_name line_length type_body_length type_name + +// MARK: - Implementation Details + +{{accessModifier}} protocol SegueType: RawRepresentable {} + +{{accessModifier}} extension {% if isAppKit %}NSSeguePerforming{% else %}UIViewController{% endif %} { + func perform(segue: S, sender: Any? = nil) where S.RawValue == String { + let identifier = {% if isAppKit %}NSStoryboardSegue.Identifier({% endif %}segue.rawValue{% if isAppKit %}){% endif %} + performSegue{% if isAppKit %}?{% endif %}(withIdentifier: identifier, sender: sender) + } +} + +{{accessModifier}} extension SegueType where RawValue == String { + init?(_ segue: {% if isAppKit %}NS{% else %}UI{% endif %}StoryboardSegue) { + {% if isAppKit %} + #if swift(>=4.2) + guard let identifier = segue.identifier else { return nil } + #else + guard let identifier = segue.identifier?.rawValue else { return nil } + #endif + {% else %} + guard let identifier = segue.identifier else { return nil } + {% endif %} + self.init(rawValue: identifier) + } +} +{% elif storyboards %} +// Mixed AppKit and UIKit storyboard files found, please invoke swiftgen with these separately +{% else %} +// No storyboard found +{% endif %} diff --git a/Monal/.swiftgen/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/ib/segues-swift5.stencil b/Monal/.swiftgen/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/ib/segues-swift5.stencil new file mode 100644 index 0000000..476d546 --- /dev/null +++ b/Monal/.swiftgen/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/ib/segues-swift5.stencil @@ -0,0 +1,60 @@ +// swiftlint:disable all +// Generated using SwiftGen — https://github.com/SwiftGen/SwiftGen + +{% if platform and storyboards %} +{% set accessModifier %}{% if param.publicAccess %}public{% else %}internal{% endif %}{% endset %} +{% set isAppKit %}{% if platform == "macOS" %}true{% endif %}{% endset %} +// swiftlint:disable sorted_imports +import Foundation +{% for module in modules where module != env.PRODUCT_MODULE_NAME and module != param.module %} +import {{module}} +{% endfor %} + +// swiftlint:disable superfluous_disable_command +// swiftlint:disable file_length + +// MARK: - Storyboard Segues + +// swiftlint:disable explicit_type_interface identifier_name line_length type_body_length type_name +{{accessModifier}} enum {{param.enumName|default:"StoryboardSegue"}} { + {% for storyboard in storyboards where storyboard.segues %} + {{accessModifier}} enum {{storyboard.name|swiftIdentifier:"pretty"|escapeReservedKeywords}}: String, SegueType { + {% for segue in storyboard.segues %} + {% set segueID %}{{segue.identifier|swiftIdentifier:"pretty"|lowerFirstWord}}{% endset %} + case {{segueID|escapeReservedKeywords}}{% if segueID != segue.identifier %} = "{{segue.identifier}}"{% endif %} + {% endfor %} + } + {% endfor %} +} +// swiftlint:enable explicit_type_interface identifier_name line_length type_body_length type_name + +// MARK: - Implementation Details + +{{accessModifier}} protocol SegueType: RawRepresentable {} + +{{accessModifier}} extension {% if isAppKit %}NSSeguePerforming{% else %}UIViewController{% endif %} { + func perform(segue: S, sender: Any? = nil) where S.RawValue == String { + let identifier = {% if isAppKit %}NSStoryboardSegue.Identifier({% endif %}segue.rawValue{% if isAppKit %}){% endif %} + performSegue{% if isAppKit %}?{% endif %}(withIdentifier: identifier, sender: sender) + } +} + +{{accessModifier}} extension SegueType where RawValue == String { + init?(_ segue: {% if isAppKit %}NS{% else %}UI{% endif %}StoryboardSegue) { + {% if isAppKit %} + #if swift(>=4.2) + guard let identifier = segue.identifier else { return nil } + #else + guard let identifier = segue.identifier?.rawValue else { return nil } + #endif + {% else %} + guard let identifier = segue.identifier else { return nil } + {% endif %} + self.init(rawValue: identifier) + } +} +{% elif storyboards %} +// Mixed AppKit and UIKit storyboard files found, please invoke swiftgen with these separately +{% else %} +// No storyboard found +{% endif %} diff --git a/Monal/.swiftgen/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/json/inline-swift4.stencil b/Monal/.swiftgen/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/json/inline-swift4.stencil new file mode 100644 index 0000000..62ca48d --- /dev/null +++ b/Monal/.swiftgen/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/json/inline-swift4.stencil @@ -0,0 +1,82 @@ +// swiftlint:disable all +// Generated using SwiftGen — https://github.com/SwiftGen/SwiftGen + +{% if files %} +{% set accessModifier %}{% if param.publicAccess %}public{% else %}internal{% endif %}{% endset %} +import Foundation + +// swiftlint:disable superfluous_disable_command +// swiftlint:disable file_length + +// MARK: - JSON Files +{% macro fileBlock file %} + {% call documentBlock file file.document %} +{% endmacro %} +{% macro documentBlock file document %} + {% set rootType %}{% call typeBlock document.metadata %}{% endset %} + {% if document.metadata.type == "Array" %} + {{accessModifier}} static let items: {{rootType}} = {% call valueBlock document.data document.metadata %} + {% elif document.metadata.type == "Dictionary" %} + {% for key,value in document.metadata.properties %} + {{accessModifier}} {% call propertyBlock key value document.data %} + {% endfor %} + {% else %} + {{accessModifier}} static let value: {{rootType}} = {% call valueBlock document.data document.metadata %} + {% endif %} +{% endmacro %} +{% macro typeBlock metadata %}{% filter removeNewlines:"leading" %} + {% if metadata.type == "Array" %} + [{% call typeBlock metadata.element %}] + {% elif metadata.type == "Dictionary" %} + [String: Any] + {% elif metadata.type == "Optional" %} + Any? + {% else %} + {{metadata.type}} + {% endif %} +{% endfilter %}{% endmacro %} +{% macro propertyBlock key metadata data %}{% filter removeNewlines:"leading" %} + {% set propertyName %}{{key|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}}{% endset %} + {% set propertyType %}{% call typeBlock metadata %}{% endset %} + static let {{propertyName}}: {{propertyType}} = {% call valueBlock data[key] metadata %} +{% endfilter %}{% endmacro %} +{% macro valueBlock value metadata %}{% filter removeNewlines:"leading" %} + {% if metadata.type == "String" %} + "{{ value }}" + {% elif metadata.type == "Optional" %} + nil + {% elif metadata.type == "Array" and value %} + [{% for value in value %} + {% call valueBlock value metadata.element.items[forloop.counter0]|default:metadata.element %} + {{ ", " if not forloop.last }} + {% endfor %}] + {% elif metadata.type == "Dictionary" %} + [{% for key,value in value %} + "{{key}}": {% call valueBlock value metadata.properties[key] %} + {{ ", " if not forloop.last }} + {% empty %} + : + {% endfor %}] + {% elif metadata.type == "Bool" %} + {% if value %}true{% else %}false{% endif %} + {% else %} + {{ value }} + {% endif %} +{% endfilter %}{% endmacro %} + +// swiftlint:disable identifier_name line_length number_separator type_body_length +{{accessModifier}} enum {{param.enumName|default:"JSONFiles"}} { + {% if files.count > 1 or param.forceFileNameEnum %} + {% for file in files %} + {{accessModifier}} enum {{file.name|swiftIdentifier:"pretty"|escapeReservedKeywords}} { + {% filter indent:2 %}{% call fileBlock file %}{% endfilter %} + } + {% endfor %} + {% else %} + {% call fileBlock files.first %} + {% endif %} +} +// swiftlint:enable identifier_name line_length number_separator type_body_length +{% else %} +// No files found +{% endif %} diff --git a/Monal/.swiftgen/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/json/inline-swift5.stencil b/Monal/.swiftgen/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/json/inline-swift5.stencil new file mode 100644 index 0000000..62ca48d --- /dev/null +++ b/Monal/.swiftgen/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/json/inline-swift5.stencil @@ -0,0 +1,82 @@ +// swiftlint:disable all +// Generated using SwiftGen — https://github.com/SwiftGen/SwiftGen + +{% if files %} +{% set accessModifier %}{% if param.publicAccess %}public{% else %}internal{% endif %}{% endset %} +import Foundation + +// swiftlint:disable superfluous_disable_command +// swiftlint:disable file_length + +// MARK: - JSON Files +{% macro fileBlock file %} + {% call documentBlock file file.document %} +{% endmacro %} +{% macro documentBlock file document %} + {% set rootType %}{% call typeBlock document.metadata %}{% endset %} + {% if document.metadata.type == "Array" %} + {{accessModifier}} static let items: {{rootType}} = {% call valueBlock document.data document.metadata %} + {% elif document.metadata.type == "Dictionary" %} + {% for key,value in document.metadata.properties %} + {{accessModifier}} {% call propertyBlock key value document.data %} + {% endfor %} + {% else %} + {{accessModifier}} static let value: {{rootType}} = {% call valueBlock document.data document.metadata %} + {% endif %} +{% endmacro %} +{% macro typeBlock metadata %}{% filter removeNewlines:"leading" %} + {% if metadata.type == "Array" %} + [{% call typeBlock metadata.element %}] + {% elif metadata.type == "Dictionary" %} + [String: Any] + {% elif metadata.type == "Optional" %} + Any? + {% else %} + {{metadata.type}} + {% endif %} +{% endfilter %}{% endmacro %} +{% macro propertyBlock key metadata data %}{% filter removeNewlines:"leading" %} + {% set propertyName %}{{key|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}}{% endset %} + {% set propertyType %}{% call typeBlock metadata %}{% endset %} + static let {{propertyName}}: {{propertyType}} = {% call valueBlock data[key] metadata %} +{% endfilter %}{% endmacro %} +{% macro valueBlock value metadata %}{% filter removeNewlines:"leading" %} + {% if metadata.type == "String" %} + "{{ value }}" + {% elif metadata.type == "Optional" %} + nil + {% elif metadata.type == "Array" and value %} + [{% for value in value %} + {% call valueBlock value metadata.element.items[forloop.counter0]|default:metadata.element %} + {{ ", " if not forloop.last }} + {% endfor %}] + {% elif metadata.type == "Dictionary" %} + [{% for key,value in value %} + "{{key}}": {% call valueBlock value metadata.properties[key] %} + {{ ", " if not forloop.last }} + {% empty %} + : + {% endfor %}] + {% elif metadata.type == "Bool" %} + {% if value %}true{% else %}false{% endif %} + {% else %} + {{ value }} + {% endif %} +{% endfilter %}{% endmacro %} + +// swiftlint:disable identifier_name line_length number_separator type_body_length +{{accessModifier}} enum {{param.enumName|default:"JSONFiles"}} { + {% if files.count > 1 or param.forceFileNameEnum %} + {% for file in files %} + {{accessModifier}} enum {{file.name|swiftIdentifier:"pretty"|escapeReservedKeywords}} { + {% filter indent:2 %}{% call fileBlock file %}{% endfilter %} + } + {% endfor %} + {% else %} + {% call fileBlock files.first %} + {% endif %} +} +// swiftlint:enable identifier_name line_length number_separator type_body_length +{% else %} +// No files found +{% endif %} diff --git a/Monal/.swiftgen/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/json/runtime-swift4.stencil b/Monal/.swiftgen/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/json/runtime-swift4.stencil new file mode 100644 index 0000000..c2466c7 --- /dev/null +++ b/Monal/.swiftgen/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/json/runtime-swift4.stencil @@ -0,0 +1,112 @@ +// swiftlint:disable all +// Generated using SwiftGen — https://github.com/SwiftGen/SwiftGen + +{% if files %} +{% set accessModifier %}{% if param.publicAccess %}public{% else %}internal{% endif %}{% endset %} +import Foundation + +// swiftlint:disable superfluous_disable_command +// swiftlint:disable file_length + +// MARK: - JSON Files +{% macro fileBlock file %} + {% call documentBlock file file.document %} +{% endmacro %} +{% macro documentBlock file document %} + {% set rootType %}{% call typeBlock document.metadata %}{% endset %} + {% if document.metadata.type == "Array" %} + {{accessModifier}} static let items: {{rootType}} = objectFromJSON(at: "{% call transformPath file.path %}") + {% elif document.metadata.type == "Dictionary" %} + private static let _document = JSONDocument(path: "{% call transformPath file.path %}") + + {% for key,value in document.metadata.properties %} + {{accessModifier}} {% call propertyBlock key value %} + {% endfor %} + {% else %} + {{accessModifier}} static let value: {{rootType}} = objectFromJSON(at: "{% call transformPath file.path %}") + {% endif %} +{% endmacro %} +{% macro typeBlock metadata %}{% filter removeNewlines:"leading" %} + {% if metadata.type == "Array" %} + [{% call typeBlock metadata.element %}] + {% elif metadata.type == "Dictionary" %} + [String: Any] + {% elif metadata.type == "Optional" %} + Any? + {% else %} + {{metadata.type}} + {% endif %} +{% endfilter %}{% endmacro %} +{% macro propertyBlock key metadata %}{% filter removeNewlines:"leading" %} + {% set propertyName %}{{key|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}}{% endset %} + {% set propertyType %}{% call typeBlock metadata %}{% endset %} + static let {{propertyName}}: {{propertyType}} = _document["{{key}}"] +{% endfilter %}{% endmacro %} +{% macro transformPath path %}{% filter removeNewlines %} + {% if param.preservePath %} + {{path}} + {% else %} + {{path|basename}} + {% endif %} +{% endfilter %}{% endmacro %} + +// swiftlint:disable identifier_name line_length type_body_length +{{accessModifier}} enum {{param.enumName|default:"JSONFiles"}} { + {% if files.count > 1 or param.forceFileNameEnum %} + {% for file in files %} + {{accessModifier}} enum {{file.name|swiftIdentifier:"pretty"|escapeReservedKeywords}} { + {% filter indent:2 %}{% call fileBlock file %}{% endfilter %} + } + {% endfor %} + {% else %} + {% call fileBlock files.first %} + {% endif %} +} +// swiftlint:enable identifier_name line_length type_body_length + +// MARK: - Implementation Details + +private func objectFromJSON(at path: String) -> T { + {% if param.lookupFunction %} + guard let url = {{param.lookupFunction}}(path), + {% else %} + guard let url = {{param.bundle|default:"BundleToken.bundle"}}.url(forResource: path, withExtension: nil), + {% endif %} + let json = try? JSONSerialization.jsonObject(with: Data(contentsOf: url), options: []), + let result = json as? T else { + fatalError("Unable to load JSON at path: \(path)") + } + return result +} + +private struct JSONDocument { + let data: [String: Any] + + init(path: String) { + self.data = objectFromJSON(at: path) + } + + subscript(key: String) -> T { + guard let result = data[key] as? T else { + fatalError("Property '\(key)' is not of type \(T.self)") + } + return result + } +} +{% if not param.bundle and not param.lookupFunction %} + +// swiftlint:disable convenience_type +private final class BundleToken { + static let bundle: Bundle = { + #if SWIFT_PACKAGE + return Bundle.module + #else + return Bundle(for: BundleToken.self) + #endif + }() +} +// swiftlint:enable convenience_type +{% endif %} +{% else %} +// No files found +{% endif %} diff --git a/Monal/.swiftgen/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/json/runtime-swift5.stencil b/Monal/.swiftgen/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/json/runtime-swift5.stencil new file mode 100644 index 0000000..c2466c7 --- /dev/null +++ b/Monal/.swiftgen/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/json/runtime-swift5.stencil @@ -0,0 +1,112 @@ +// swiftlint:disable all +// Generated using SwiftGen — https://github.com/SwiftGen/SwiftGen + +{% if files %} +{% set accessModifier %}{% if param.publicAccess %}public{% else %}internal{% endif %}{% endset %} +import Foundation + +// swiftlint:disable superfluous_disable_command +// swiftlint:disable file_length + +// MARK: - JSON Files +{% macro fileBlock file %} + {% call documentBlock file file.document %} +{% endmacro %} +{% macro documentBlock file document %} + {% set rootType %}{% call typeBlock document.metadata %}{% endset %} + {% if document.metadata.type == "Array" %} + {{accessModifier}} static let items: {{rootType}} = objectFromJSON(at: "{% call transformPath file.path %}") + {% elif document.metadata.type == "Dictionary" %} + private static let _document = JSONDocument(path: "{% call transformPath file.path %}") + + {% for key,value in document.metadata.properties %} + {{accessModifier}} {% call propertyBlock key value %} + {% endfor %} + {% else %} + {{accessModifier}} static let value: {{rootType}} = objectFromJSON(at: "{% call transformPath file.path %}") + {% endif %} +{% endmacro %} +{% macro typeBlock metadata %}{% filter removeNewlines:"leading" %} + {% if metadata.type == "Array" %} + [{% call typeBlock metadata.element %}] + {% elif metadata.type == "Dictionary" %} + [String: Any] + {% elif metadata.type == "Optional" %} + Any? + {% else %} + {{metadata.type}} + {% endif %} +{% endfilter %}{% endmacro %} +{% macro propertyBlock key metadata %}{% filter removeNewlines:"leading" %} + {% set propertyName %}{{key|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}}{% endset %} + {% set propertyType %}{% call typeBlock metadata %}{% endset %} + static let {{propertyName}}: {{propertyType}} = _document["{{key}}"] +{% endfilter %}{% endmacro %} +{% macro transformPath path %}{% filter removeNewlines %} + {% if param.preservePath %} + {{path}} + {% else %} + {{path|basename}} + {% endif %} +{% endfilter %}{% endmacro %} + +// swiftlint:disable identifier_name line_length type_body_length +{{accessModifier}} enum {{param.enumName|default:"JSONFiles"}} { + {% if files.count > 1 or param.forceFileNameEnum %} + {% for file in files %} + {{accessModifier}} enum {{file.name|swiftIdentifier:"pretty"|escapeReservedKeywords}} { + {% filter indent:2 %}{% call fileBlock file %}{% endfilter %} + } + {% endfor %} + {% else %} + {% call fileBlock files.first %} + {% endif %} +} +// swiftlint:enable identifier_name line_length type_body_length + +// MARK: - Implementation Details + +private func objectFromJSON(at path: String) -> T { + {% if param.lookupFunction %} + guard let url = {{param.lookupFunction}}(path), + {% else %} + guard let url = {{param.bundle|default:"BundleToken.bundle"}}.url(forResource: path, withExtension: nil), + {% endif %} + let json = try? JSONSerialization.jsonObject(with: Data(contentsOf: url), options: []), + let result = json as? T else { + fatalError("Unable to load JSON at path: \(path)") + } + return result +} + +private struct JSONDocument { + let data: [String: Any] + + init(path: String) { + self.data = objectFromJSON(at: path) + } + + subscript(key: String) -> T { + guard let result = data[key] as? T else { + fatalError("Property '\(key)' is not of type \(T.self)") + } + return result + } +} +{% if not param.bundle and not param.lookupFunction %} + +// swiftlint:disable convenience_type +private final class BundleToken { + static let bundle: Bundle = { + #if SWIFT_PACKAGE + return Bundle.module + #else + return Bundle(for: BundleToken.self) + #endif + }() +} +// swiftlint:enable convenience_type +{% endif %} +{% else %} +// No files found +{% endif %} diff --git a/Monal/.swiftgen/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/plist/inline-swift4.stencil b/Monal/.swiftgen/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/plist/inline-swift4.stencil new file mode 100644 index 0000000..c8e8831 --- /dev/null +++ b/Monal/.swiftgen/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/plist/inline-swift4.stencil @@ -0,0 +1,82 @@ +// swiftlint:disable all +// Generated using SwiftGen — https://github.com/SwiftGen/SwiftGen + +{% if files %} +{% set accessModifier %}{% if param.publicAccess %}public{% else %}internal{% endif %}{% endset %} +import Foundation + +// swiftlint:disable superfluous_disable_command +// swiftlint:disable file_length + +// MARK: - Plist Files +{% macro fileBlock file %} + {% call documentBlock file file.document %} +{% endmacro %} +{% macro documentBlock file document %} + {% set rootType %}{% call typeBlock document.metadata %}{% endset %} + {% if document.metadata.type == "Array" %} + {{accessModifier}} static let items: {{rootType}} = {% call valueBlock document.data document.metadata %} + {% elif document.metadata.type == "Dictionary" %} + {% for key,value in document.metadata.properties %} + {{accessModifier}} {% call propertyBlock key value document.data %} + {% endfor %} + {% else %} + {{accessModifier}} static let value: {{rootType}} = {% call valueBlock document.data document.metadata %} + {% endif %} +{% endmacro %} +{% macro typeBlock metadata %}{% filter removeNewlines:"leading" %} + {% if metadata.type == "Array" %} + [{% call typeBlock metadata.element %}] + {% elif metadata.type == "Dictionary" %} + [String: Any] + {% else %} + {{metadata.type}} + {% endif %} +{% endfilter %}{% endmacro %} +{% macro propertyBlock key metadata data %}{% filter removeNewlines:"leading" %} + {% set propertyName %}{{key|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}}{% endset %} + {% set propertyType %}{% call typeBlock metadata %}{% endset %} + static let {{propertyName}}: {{propertyType}} = {% call valueBlock data[key] metadata %} +{% endfilter %}{% endmacro %} +{% macro valueBlock value metadata %}{% filter removeNewlines:"leading" %} + {% if metadata.type == "String" %} + "{{ value }}" + {% elif metadata.type == "Date" %} + Date(timeIntervalSinceReferenceDate: {{ value.timeIntervalSinceReferenceDate }}) + {% elif metadata.type == "Optional" %} + nil + {% elif metadata.type == "Array" and value %} + [{% for value in value %} + {% call valueBlock value metadata.element.items[forloop.counter0]|default:metadata.element %} + {{ ", " if not forloop.last }} + {% endfor %}] + {% elif metadata.type == "Dictionary" %} + [{% for key,value in value %} + "{{key}}": {% call valueBlock value metadata.properties[key] %} + {{ ", " if not forloop.last }} + {% empty %} + : + {% endfor %}] + {% elif metadata.type == "Bool" %} + {% if value %}true{% else %}false{% endif %} + {% else %} + {{ value }} + {% endif %} +{% endfilter %}{% endmacro %} + +// swiftlint:disable identifier_name line_length number_separator type_body_length +{{accessModifier}} enum {{param.enumName|default:"PlistFiles"}} { + {% if files.count > 1 or param.forceFileNameEnum %} + {% for file in files %} + {{accessModifier}} enum {{file.name|swiftIdentifier:"pretty"|escapeReservedKeywords}} { + {% filter indent:2 %}{% call fileBlock file %}{% endfilter %} + } + {% endfor %} + {% else %} + {% call fileBlock files.first %} + {% endif %} +} +// swiftlint:enable identifier_name line_length number_separator type_body_length +{% else %} +// No files found +{% endif %} diff --git a/Monal/.swiftgen/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/plist/inline-swift5.stencil b/Monal/.swiftgen/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/plist/inline-swift5.stencil new file mode 100644 index 0000000..c8e8831 --- /dev/null +++ b/Monal/.swiftgen/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/plist/inline-swift5.stencil @@ -0,0 +1,82 @@ +// swiftlint:disable all +// Generated using SwiftGen — https://github.com/SwiftGen/SwiftGen + +{% if files %} +{% set accessModifier %}{% if param.publicAccess %}public{% else %}internal{% endif %}{% endset %} +import Foundation + +// swiftlint:disable superfluous_disable_command +// swiftlint:disable file_length + +// MARK: - Plist Files +{% macro fileBlock file %} + {% call documentBlock file file.document %} +{% endmacro %} +{% macro documentBlock file document %} + {% set rootType %}{% call typeBlock document.metadata %}{% endset %} + {% if document.metadata.type == "Array" %} + {{accessModifier}} static let items: {{rootType}} = {% call valueBlock document.data document.metadata %} + {% elif document.metadata.type == "Dictionary" %} + {% for key,value in document.metadata.properties %} + {{accessModifier}} {% call propertyBlock key value document.data %} + {% endfor %} + {% else %} + {{accessModifier}} static let value: {{rootType}} = {% call valueBlock document.data document.metadata %} + {% endif %} +{% endmacro %} +{% macro typeBlock metadata %}{% filter removeNewlines:"leading" %} + {% if metadata.type == "Array" %} + [{% call typeBlock metadata.element %}] + {% elif metadata.type == "Dictionary" %} + [String: Any] + {% else %} + {{metadata.type}} + {% endif %} +{% endfilter %}{% endmacro %} +{% macro propertyBlock key metadata data %}{% filter removeNewlines:"leading" %} + {% set propertyName %}{{key|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}}{% endset %} + {% set propertyType %}{% call typeBlock metadata %}{% endset %} + static let {{propertyName}}: {{propertyType}} = {% call valueBlock data[key] metadata %} +{% endfilter %}{% endmacro %} +{% macro valueBlock value metadata %}{% filter removeNewlines:"leading" %} + {% if metadata.type == "String" %} + "{{ value }}" + {% elif metadata.type == "Date" %} + Date(timeIntervalSinceReferenceDate: {{ value.timeIntervalSinceReferenceDate }}) + {% elif metadata.type == "Optional" %} + nil + {% elif metadata.type == "Array" and value %} + [{% for value in value %} + {% call valueBlock value metadata.element.items[forloop.counter0]|default:metadata.element %} + {{ ", " if not forloop.last }} + {% endfor %}] + {% elif metadata.type == "Dictionary" %} + [{% for key,value in value %} + "{{key}}": {% call valueBlock value metadata.properties[key] %} + {{ ", " if not forloop.last }} + {% empty %} + : + {% endfor %}] + {% elif metadata.type == "Bool" %} + {% if value %}true{% else %}false{% endif %} + {% else %} + {{ value }} + {% endif %} +{% endfilter %}{% endmacro %} + +// swiftlint:disable identifier_name line_length number_separator type_body_length +{{accessModifier}} enum {{param.enumName|default:"PlistFiles"}} { + {% if files.count > 1 or param.forceFileNameEnum %} + {% for file in files %} + {{accessModifier}} enum {{file.name|swiftIdentifier:"pretty"|escapeReservedKeywords}} { + {% filter indent:2 %}{% call fileBlock file %}{% endfilter %} + } + {% endfor %} + {% else %} + {% call fileBlock files.first %} + {% endif %} +} +// swiftlint:enable identifier_name line_length number_separator type_body_length +{% else %} +// No files found +{% endif %} diff --git a/Monal/.swiftgen/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/plist/runtime-swift4.stencil b/Monal/.swiftgen/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/plist/runtime-swift4.stencil new file mode 100644 index 0000000..a498a8f --- /dev/null +++ b/Monal/.swiftgen/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/plist/runtime-swift4.stencil @@ -0,0 +1,117 @@ +// swiftlint:disable all +// Generated using SwiftGen — https://github.com/SwiftGen/SwiftGen + +{% if files %} +{% set accessModifier %}{% if param.publicAccess %}public{% else %}internal{% endif %}{% endset %} +import Foundation + +// swiftlint:disable superfluous_disable_command +// swiftlint:disable file_length + +// MARK: - Plist Files +{% macro fileBlock file %} + {% call documentBlock file file.document %} +{% endmacro %} +{% macro documentBlock file document %} + {% set rootType %}{% call typeBlock document.metadata %}{% endset %} + {% if document.metadata.type == "Array" %} + {{accessModifier}} static let items: {{rootType}} = arrayFromPlist(at: "{% call transformPath file.path %}") + {% elif document.metadata.type == "Dictionary" %} + private static let _document = PlistDocument(path: "{% call transformPath file.path %}") + + {% for key,value in document.metadata.properties %} + {{accessModifier}} {% call propertyBlock key value %} + {% endfor %} + {% else %} + // Unsupported root type `{{rootType}}` + {% endif %} +{% endmacro %} +{% macro typeBlock metadata %}{% filter removeNewlines:"leading" %} + {% if metadata.type == "Array" %} + [{% call typeBlock metadata.element %}] + {% elif metadata.type == "Dictionary" %} + [String: Any] + {% else %} + {{metadata.type}} + {% endif %} +{% endfilter %}{% endmacro %} +{% macro propertyBlock key metadata %}{% filter removeNewlines:"leading" %} + {% set propertyName %}{{key|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}}{% endset %} + {% set propertyType %}{% call typeBlock metadata %}{% endset %} + static let {{propertyName}}: {{propertyType}} = _document["{{key}}"] +{% endfilter %}{% endmacro %} +{% macro transformPath path %}{% filter removeNewlines %} + {% if param.preservePath %} + {{path}} + {% else %} + {{path|basename}} + {% endif %} +{% endfilter %}{% endmacro %} + +// swiftlint:disable identifier_name line_length type_body_length +{{accessModifier}} enum {{param.enumName|default:"PlistFiles"}} { + {% if files.count > 1 or param.forceFileNameEnum %} + {% for file in files %} + {{accessModifier}} enum {{file.name|swiftIdentifier:"pretty"|escapeReservedKeywords}} { + {% filter indent:2 %}{% call fileBlock file %}{% endfilter %} + } + {% endfor %} + {% else %} + {% call fileBlock files.first %} + {% endif %} +} +// swiftlint:enable identifier_name line_length type_body_length + +// MARK: - Implementation Details + +private func arrayFromPlist(at path: String) -> [T] { + {% if param.lookupFunction %} + guard let url = {{param.lookupFunction}}(path), + {% else %} + guard let url = {{param.bundle|default:"BundleToken.bundle"}}.url(forResource: path, withExtension: nil), + {% endif %} + let data = NSArray(contentsOf: url) as? [T] else { + fatalError("Unable to load PLIST at path: \(path)") + } + return data +} + +private struct PlistDocument { + let data: [String: Any] + + init(path: String) { + {% if param.lookupFunction %} + guard let url = {{param.lookupFunction}}(path), + {% else %} + guard let url = {{param.bundle|default:"BundleToken.bundle"}}.url(forResource: path, withExtension: nil), + {% endif %} + let data = NSDictionary(contentsOf: url) as? [String: Any] else { + fatalError("Unable to load PLIST at path: \(path)") + } + self.data = data + } + + subscript(key: String) -> T { + guard let result = data[key] as? T else { + fatalError("Property '\(key)' is not of type \(T.self)") + } + return result + } +} +{% if not param.bundle and not param.lookupFunction %} + +// swiftlint:disable convenience_type +private final class BundleToken { + static let bundle: Bundle = { + #if SWIFT_PACKAGE + return Bundle.module + #else + return Bundle(for: BundleToken.self) + #endif + }() +} +// swiftlint:enable convenience_type +{% endif %} +{% else %} +// No files found +{% endif %} diff --git a/Monal/.swiftgen/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/plist/runtime-swift5.stencil b/Monal/.swiftgen/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/plist/runtime-swift5.stencil new file mode 100644 index 0000000..a498a8f --- /dev/null +++ b/Monal/.swiftgen/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/plist/runtime-swift5.stencil @@ -0,0 +1,117 @@ +// swiftlint:disable all +// Generated using SwiftGen — https://github.com/SwiftGen/SwiftGen + +{% if files %} +{% set accessModifier %}{% if param.publicAccess %}public{% else %}internal{% endif %}{% endset %} +import Foundation + +// swiftlint:disable superfluous_disable_command +// swiftlint:disable file_length + +// MARK: - Plist Files +{% macro fileBlock file %} + {% call documentBlock file file.document %} +{% endmacro %} +{% macro documentBlock file document %} + {% set rootType %}{% call typeBlock document.metadata %}{% endset %} + {% if document.metadata.type == "Array" %} + {{accessModifier}} static let items: {{rootType}} = arrayFromPlist(at: "{% call transformPath file.path %}") + {% elif document.metadata.type == "Dictionary" %} + private static let _document = PlistDocument(path: "{% call transformPath file.path %}") + + {% for key,value in document.metadata.properties %} + {{accessModifier}} {% call propertyBlock key value %} + {% endfor %} + {% else %} + // Unsupported root type `{{rootType}}` + {% endif %} +{% endmacro %} +{% macro typeBlock metadata %}{% filter removeNewlines:"leading" %} + {% if metadata.type == "Array" %} + [{% call typeBlock metadata.element %}] + {% elif metadata.type == "Dictionary" %} + [String: Any] + {% else %} + {{metadata.type}} + {% endif %} +{% endfilter %}{% endmacro %} +{% macro propertyBlock key metadata %}{% filter removeNewlines:"leading" %} + {% set propertyName %}{{key|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}}{% endset %} + {% set propertyType %}{% call typeBlock metadata %}{% endset %} + static let {{propertyName}}: {{propertyType}} = _document["{{key}}"] +{% endfilter %}{% endmacro %} +{% macro transformPath path %}{% filter removeNewlines %} + {% if param.preservePath %} + {{path}} + {% else %} + {{path|basename}} + {% endif %} +{% endfilter %}{% endmacro %} + +// swiftlint:disable identifier_name line_length type_body_length +{{accessModifier}} enum {{param.enumName|default:"PlistFiles"}} { + {% if files.count > 1 or param.forceFileNameEnum %} + {% for file in files %} + {{accessModifier}} enum {{file.name|swiftIdentifier:"pretty"|escapeReservedKeywords}} { + {% filter indent:2 %}{% call fileBlock file %}{% endfilter %} + } + {% endfor %} + {% else %} + {% call fileBlock files.first %} + {% endif %} +} +// swiftlint:enable identifier_name line_length type_body_length + +// MARK: - Implementation Details + +private func arrayFromPlist(at path: String) -> [T] { + {% if param.lookupFunction %} + guard let url = {{param.lookupFunction}}(path), + {% else %} + guard let url = {{param.bundle|default:"BundleToken.bundle"}}.url(forResource: path, withExtension: nil), + {% endif %} + let data = NSArray(contentsOf: url) as? [T] else { + fatalError("Unable to load PLIST at path: \(path)") + } + return data +} + +private struct PlistDocument { + let data: [String: Any] + + init(path: String) { + {% if param.lookupFunction %} + guard let url = {{param.lookupFunction}}(path), + {% else %} + guard let url = {{param.bundle|default:"BundleToken.bundle"}}.url(forResource: path, withExtension: nil), + {% endif %} + let data = NSDictionary(contentsOf: url) as? [String: Any] else { + fatalError("Unable to load PLIST at path: \(path)") + } + self.data = data + } + + subscript(key: String) -> T { + guard let result = data[key] as? T else { + fatalError("Property '\(key)' is not of type \(T.self)") + } + return result + } +} +{% if not param.bundle and not param.lookupFunction %} + +// swiftlint:disable convenience_type +private final class BundleToken { + static let bundle: Bundle = { + #if SWIFT_PACKAGE + return Bundle.module + #else + return Bundle(for: BundleToken.self) + #endif + }() +} +// swiftlint:enable convenience_type +{% endif %} +{% else %} +// No files found +{% endif %} diff --git a/Monal/.swiftgen/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/strings/flat-swift4.stencil b/Monal/.swiftgen/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/strings/flat-swift4.stencil new file mode 100644 index 0000000..5bb4a12 --- /dev/null +++ b/Monal/.swiftgen/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/strings/flat-swift4.stencil @@ -0,0 +1,99 @@ +// swiftlint:disable all +// Generated using SwiftGen — https://github.com/SwiftGen/SwiftGen + +{% if tables.count > 0 %} +{% set accessModifier %}{% if param.publicAccess %}public{% else %}internal{% endif %}{% endset %} +import Foundation + +// swiftlint:disable superfluous_disable_command file_length implicit_return + +// MARK: - Strings + +{% macro parametersBlock types %}{% filter removeNewlines:"leading" %} + {% for type in types %} + {% if type == "String" %} + _ p{{forloop.counter}}: Any + {% else %} + _ p{{forloop.counter}}: {{type}} + {% endif %} + {{ ", " if not forloop.last }} + {% endfor %} +{% endfilter %}{% endmacro %} +{% macro argumentsBlock types %}{% filter removeNewlines:"leading" %} + {% for type in types %} + {% if type == "String" %} + String(describing: p{{forloop.counter}}) + {% elif type == "UnsafeRawPointer" %} + Int(bitPattern: p{{forloop.counter}}) + {% else %} + p{{forloop.counter}} + {% endif %} + {{ ", " if not forloop.last }} + {% endfor %} +{% endfilter %}{% endmacro %} +{% macro recursiveBlock table item %} + {% for string in item.strings %} + {% if not param.noComments %} + {% for line in string.translation|split:"\n" %} + /// {{line}} + {% endfor %} + {% endif %} + {% if string.types %} + {{accessModifier}} static func {{string.key|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}}({% call parametersBlock string.types %}) -> String { + return {{enumName}}.tr("{{table}}", "{{string.key}}", {% call argumentsBlock string.types %}) + } + {% elif param.lookupFunction %} + {# custom localization function is mostly used for in-app lang selection, so we want the loc to be recomputed at each call for those (hence the computed var) #} + {{accessModifier}} static var {{string.key|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}}: String { return {{enumName}}.tr("{{table}}", "{{string.key}}") } + {% else %} + {{accessModifier}} static let {{string.key|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}} = {{enumName}}.tr("{{table}}", "{{string.key}}") + {% endif %} + {% endfor %} + {% for child in item.children %} + {% call recursiveBlock table child %} + {% endfor %} +{% endmacro %} +// swiftlint:disable function_parameter_count identifier_name line_length type_body_length +{% set enumName %}{{param.enumName|default:"L10n"}}{% endset %} +{{accessModifier}} enum {{enumName}} { + {% if tables.count > 1 or param.forceFileNameEnum %} + {% for table in tables %} + {{accessModifier}} enum {{table.name|swiftIdentifier:"pretty"|escapeReservedKeywords}} { + {% filter indent:2 %}{% call recursiveBlock table.name table.levels %}{% endfilter %} + } + {% endfor %} + {% else %} + {% call recursiveBlock tables.first.name tables.first.levels %} + {% endif %} +} +// swiftlint:enable function_parameter_count identifier_name line_length type_body_length + +// MARK: - Implementation Details + +extension {{enumName}} { + private static func tr(_ table: String, _ key: String, _ args: CVarArg...) -> String { + {% if param.lookupFunction %} + let format = {{ param.lookupFunction }}(key, table) + {% else %} + let format = {{param.bundle|default:"BundleToken.bundle"}}.localizedString(forKey: key, value: nil, table: table) + {% endif %} + return String(format: format, locale: Locale.current, arguments: args) + } +} +{% if not param.bundle and not param.lookupFunction %} + +// swiftlint:disable convenience_type +private final class BundleToken { + static let bundle: Bundle = { + #if SWIFT_PACKAGE + return Bundle.module + #else + return Bundle(for: BundleToken.self) + #endif + }() +} +// swiftlint:enable convenience_type +{% endif %} +{% else %} +// No string found +{% endif %} diff --git a/Monal/.swiftgen/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/strings/flat-swift5.stencil b/Monal/.swiftgen/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/strings/flat-swift5.stencil new file mode 100644 index 0000000..5bb4a12 --- /dev/null +++ b/Monal/.swiftgen/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/strings/flat-swift5.stencil @@ -0,0 +1,99 @@ +// swiftlint:disable all +// Generated using SwiftGen — https://github.com/SwiftGen/SwiftGen + +{% if tables.count > 0 %} +{% set accessModifier %}{% if param.publicAccess %}public{% else %}internal{% endif %}{% endset %} +import Foundation + +// swiftlint:disable superfluous_disable_command file_length implicit_return + +// MARK: - Strings + +{% macro parametersBlock types %}{% filter removeNewlines:"leading" %} + {% for type in types %} + {% if type == "String" %} + _ p{{forloop.counter}}: Any + {% else %} + _ p{{forloop.counter}}: {{type}} + {% endif %} + {{ ", " if not forloop.last }} + {% endfor %} +{% endfilter %}{% endmacro %} +{% macro argumentsBlock types %}{% filter removeNewlines:"leading" %} + {% for type in types %} + {% if type == "String" %} + String(describing: p{{forloop.counter}}) + {% elif type == "UnsafeRawPointer" %} + Int(bitPattern: p{{forloop.counter}}) + {% else %} + p{{forloop.counter}} + {% endif %} + {{ ", " if not forloop.last }} + {% endfor %} +{% endfilter %}{% endmacro %} +{% macro recursiveBlock table item %} + {% for string in item.strings %} + {% if not param.noComments %} + {% for line in string.translation|split:"\n" %} + /// {{line}} + {% endfor %} + {% endif %} + {% if string.types %} + {{accessModifier}} static func {{string.key|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}}({% call parametersBlock string.types %}) -> String { + return {{enumName}}.tr("{{table}}", "{{string.key}}", {% call argumentsBlock string.types %}) + } + {% elif param.lookupFunction %} + {# custom localization function is mostly used for in-app lang selection, so we want the loc to be recomputed at each call for those (hence the computed var) #} + {{accessModifier}} static var {{string.key|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}}: String { return {{enumName}}.tr("{{table}}", "{{string.key}}") } + {% else %} + {{accessModifier}} static let {{string.key|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}} = {{enumName}}.tr("{{table}}", "{{string.key}}") + {% endif %} + {% endfor %} + {% for child in item.children %} + {% call recursiveBlock table child %} + {% endfor %} +{% endmacro %} +// swiftlint:disable function_parameter_count identifier_name line_length type_body_length +{% set enumName %}{{param.enumName|default:"L10n"}}{% endset %} +{{accessModifier}} enum {{enumName}} { + {% if tables.count > 1 or param.forceFileNameEnum %} + {% for table in tables %} + {{accessModifier}} enum {{table.name|swiftIdentifier:"pretty"|escapeReservedKeywords}} { + {% filter indent:2 %}{% call recursiveBlock table.name table.levels %}{% endfilter %} + } + {% endfor %} + {% else %} + {% call recursiveBlock tables.first.name tables.first.levels %} + {% endif %} +} +// swiftlint:enable function_parameter_count identifier_name line_length type_body_length + +// MARK: - Implementation Details + +extension {{enumName}} { + private static func tr(_ table: String, _ key: String, _ args: CVarArg...) -> String { + {% if param.lookupFunction %} + let format = {{ param.lookupFunction }}(key, table) + {% else %} + let format = {{param.bundle|default:"BundleToken.bundle"}}.localizedString(forKey: key, value: nil, table: table) + {% endif %} + return String(format: format, locale: Locale.current, arguments: args) + } +} +{% if not param.bundle and not param.lookupFunction %} + +// swiftlint:disable convenience_type +private final class BundleToken { + static let bundle: Bundle = { + #if SWIFT_PACKAGE + return Bundle.module + #else + return Bundle(for: BundleToken.self) + #endif + }() +} +// swiftlint:enable convenience_type +{% endif %} +{% else %} +// No string found +{% endif %} diff --git a/Monal/.swiftgen/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/strings/objc-h.stencil b/Monal/.swiftgen/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/strings/objc-h.stencil new file mode 100644 index 0000000..7c50291 --- /dev/null +++ b/Monal/.swiftgen/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/strings/objc-h.stencil @@ -0,0 +1,68 @@ +// Generated using SwiftGen — https://github.com/SwiftGen/SwiftGen + +{% if tables.count > 0 %} +#import + +NS_ASSUME_NONNULL_BEGIN + +{% macro parametersBlock types %}{% filter removeNewlines:"leading" %} + {% for type in types %} + ({% call paramTranslate type %})p{{ forloop.counter }}{{ " :" if not forloop.last }} + {% endfor %} +{% endfilter %}{% endmacro %} +{% macro argumentsBlock types %}{% filter removeNewlines:"leading" %} + {% for type in types %} + p{{forloop.counter}}{{ ", " if not forloop.last }} + {% endfor %} +{% endfilter %}{% endmacro %} +{% macro paramTranslate swiftType %} + {% if swiftType == "Any" %} + id + {% elif swiftType == "CChar" %} + char + {% elif swiftType == "Float" %} + float + {% elif swiftType == "Int" %} + NSInteger + {% elif swiftType == "String" %} + id + {% elif swiftType == "UnsafePointer" %} + char* + {% elif swiftType == "UnsafeRawPointer" %} + void* + {% else %} + objc-h.stencil is missing '{{swiftType}}' + {% endif %} +{% endmacro %} +{% macro emitOneMethod table item %} +{% for string in item.strings %} +{% if not param.noComments %} +{% for line in string.translation|split:"\n" %} +/// {{line}} +{% endfor %} +{% endif %} +{% if string.types %} + {% if string.types.count == 1 %} ++ (NSString*){{string.key|swiftIdentifier:"pretty"|lowerFirstWord}}WithValue:{% call parametersBlock string.types %}; + {% else %} ++ (NSString*){{string.key|swiftIdentifier:"pretty"|lowerFirstWord}}WithValues:{% call parametersBlock string.types %}; + {% endif %} +{% else %} ++ (NSString*){{string.key|swiftIdentifier:"pretty"|lowerFirstWord}}; +{% endif %} +{% endfor %} +{% for child in item.children %} +{% call emitOneMethod table child %} +{% endfor %} +{% endmacro %} +{% for table in tables %} +@interface {{ table.name }} : NSObject + {% call emitOneMethod table.name table.levels %} +@end + +{% endfor %} + +NS_ASSUME_NONNULL_END +{% else %} +// No strings found +{% endif %} diff --git a/Monal/.swiftgen/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/strings/objc-m.stencil b/Monal/.swiftgen/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/strings/objc-m.stencil new file mode 100644 index 0000000..1f154b5 --- /dev/null +++ b/Monal/.swiftgen/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/strings/objc-m.stencil @@ -0,0 +1,90 @@ +// Generated using SwiftGen — https://github.com/SwiftGen/SwiftGen + +{% if tables.count > 0 %} +#import "{{ param.headerName|default:"Localizable.h" }}" +{% if not param.bundle %} + +@interface BundleToken : NSObject +@end + +@implementation BundleToken +@end +{% endif %} + +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wformat-security" + +static NSString* tr(NSString *tableName, NSString *key, ...) { + NSBundle *bundle = {{param.bundle|default:"[NSBundle bundleForClass:BundleToken.class]"}}; + NSString *format = [bundle localizedStringForKey:key value:nil table:tableName]; + NSLocale *locale = [NSLocale currentLocale]; + + va_list args; + va_start(args, key); + NSString *result = [[NSString alloc] initWithFormat:format locale:locale arguments:args]; + va_end(args); + + return result; +}; +#pragma clang diagnostic pop + +{% macro parametersBlock types %}{% filter removeNewlines:"leading" %} + {% for type in types %} + ({% call paramTranslate type %})p{{ forloop.counter }}{{ " :" if not forloop.last }} + {% endfor %} +{% endfilter %}{% endmacro %} +{% macro argumentsBlock types %}{% filter removeNewlines:"leading" %} + {% for type in types %} + p{{forloop.counter}}{{ ", " if not forloop.last }} + {% endfor %} +{% endfilter %}{% endmacro %} +{% macro paramTranslate swiftType %} + {% if swiftType == "Any" %} + id + {% elif swiftType == "CChar" %} + char + {% elif swiftType == "Float" %} + float + {% elif swiftType == "Int" %} + NSInteger + {% elif swiftType == "String" %} + id + {% elif swiftType == "UnsafePointer" %} + char* + {% elif swiftType == "UnsafeRawPointer" %} + void* + {% else %} + objc-m.stencil is missing '{{swiftType}}' + {% endif %} +{% endmacro %} +{% macro tableContents table item %} + {% for string in item.strings %} + {% if string.types %} + {% if string.types.count == 1 %} ++ (NSString*){{string.key|swiftIdentifier:"pretty"|lowerFirstWord}}WithValue:{% call parametersBlock string.types %} + {% else %} ++ (NSString*){{string.key|swiftIdentifier:"pretty"|lowerFirstWord}}WithValues:{% call parametersBlock string.types %} + {% endif %} +{ + return tr(@"{{table}}", @"{{string.key}}", {% call argumentsBlock string.types %}); +} +{% else %} ++ (NSString*){{string.key|swiftIdentifier:"pretty"|lowerFirstWord}} { + return tr(@"{{table}}", @"{{string.key}}"); +} + {% endif %} + {% endfor %} + {% for child in item.children %} + {% call tableContents table child %} + {% endfor %} +{% endmacro %} +{% for table in tables %} + {% set tableName %}{{table.name|default:"Localized"}}{% endset %} +@implementation {{ tableName }} : NSObject + {% call tableContents table.name table.levels %} +@end + +{% endfor %} +{% else %} +// No strings found +{% endif %} diff --git a/Monal/.swiftgen/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/strings/structured-swift4.stencil b/Monal/.swiftgen/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/strings/structured-swift4.stencil new file mode 100644 index 0000000..f809bc2 --- /dev/null +++ b/Monal/.swiftgen/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/strings/structured-swift4.stencil @@ -0,0 +1,104 @@ +// swiftlint:disable all +// Generated using SwiftGen — https://github.com/SwiftGen/SwiftGen + +{% if tables.count > 0 %} +{% set accessModifier %}{% if param.publicAccess %}public{% else %}internal{% endif %}{% endset %} +import Foundation + +// swiftlint:disable superfluous_disable_command file_length implicit_return + +// MARK: - Strings + +{% macro parametersBlock types %}{% filter removeNewlines:"leading" %} + {% for type in types %} + {% if type == "String" %} + _ p{{forloop.counter}}: Any + {% else %} + _ p{{forloop.counter}}: {{type}} + {% endif %} + {{ ", " if not forloop.last }} + {% endfor %} +{% endfilter %}{% endmacro %} +{% macro argumentsBlock types %}{% filter removeNewlines:"leading" %} + {% for type in types %} + {% if type == "String" %} + String(describing: p{{forloop.counter}}) + {% elif type == "UnsafeRawPointer" %} + Int(bitPattern: p{{forloop.counter}}) + {% else %} + p{{forloop.counter}} + {% endif %} + {{ ", " if not forloop.last }} + {% endfor %} +{% endfilter %}{% endmacro %} +{% macro recursiveBlock table item %} + {% for string in item.strings %} + {% if not param.noComments %} + {% for line in string.translation|split:"\n" %} + /// {{line}} + {% endfor %} + {% endif %} + {% if string.types %} + {{accessModifier}} static func {{string.name|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}}({% call parametersBlock string.types %}) -> String { + return {{enumName}}.tr("{{table}}", "{{string.key}}", {% call argumentsBlock string.types %}) + } + {% elif param.lookupFunction %} + {# custom localization function is mostly used for in-app lang selection, so we want the loc to be recomputed at each call for those (hence the computed var) #} + {{accessModifier}} static var {{string.name|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}}: String { return {{enumName}}.tr("{{table}}", "{{string.key}}") } + {% else %} + {{accessModifier}} static let {{string.name|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}} = {{enumName}}.tr("{{table}}", "{{string.key}}") + {% endif %} + {% endfor %} + {% for child in item.children %} + + {{accessModifier}} enum {{child.name|swiftIdentifier:"pretty"|escapeReservedKeywords}} { + {% filter indent:2 %}{% call recursiveBlock table child %}{% endfilter %} + } + {% endfor %} +{% endmacro %} +// swiftlint:disable explicit_type_interface function_parameter_count identifier_name line_length +// swiftlint:disable nesting type_body_length type_name vertical_whitespace_opening_braces +{% set enumName %}{{param.enumName|default:"L10n"}}{% endset %} +{{accessModifier}} enum {{enumName}} { + {% if tables.count > 1 or param.forceFileNameEnum %} + {% for table in tables %} + {{accessModifier}} enum {{table.name|swiftIdentifier:"pretty"|escapeReservedKeywords}} { + {% filter indent:2 %}{% call recursiveBlock table.name table.levels %}{% endfilter %} + } + {% endfor %} + {% else %} + {% call recursiveBlock tables.first.name tables.first.levels %} + {% endif %} +} +// swiftlint:enable explicit_type_interface function_parameter_count identifier_name line_length +// swiftlint:enable nesting type_body_length type_name vertical_whitespace_opening_braces + +// MARK: - Implementation Details + +extension {{enumName}} { + private static func tr(_ table: String, _ key: String, _ args: CVarArg...) -> String { + {% if param.lookupFunction %} + let format = {{ param.lookupFunction }}(key, table) + {% else %} + let format = {{param.bundle|default:"BundleToken.bundle"}}.localizedString(forKey: key, value: nil, table: table) + {% endif %} + return String(format: format, locale: Locale.current, arguments: args) + } +} +{% if not param.bundle and not param.lookupFunction %} + +// swiftlint:disable convenience_type +private final class BundleToken { + static let bundle: Bundle = { + #if SWIFT_PACKAGE + return Bundle.module + #else + return Bundle(for: BundleToken.self) + #endif + }() +} +// swiftlint:enable convenience_type +{% endif %} +{% else %} +// No string found +{% endif %} diff --git a/Monal/.swiftgen/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/strings/structured-swift5.stencil b/Monal/.swiftgen/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/strings/structured-swift5.stencil new file mode 100644 index 0000000..f809bc2 --- /dev/null +++ b/Monal/.swiftgen/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/strings/structured-swift5.stencil @@ -0,0 +1,104 @@ +// swiftlint:disable all +// Generated using SwiftGen — https://github.com/SwiftGen/SwiftGen + +{% if tables.count > 0 %} +{% set accessModifier %}{% if param.publicAccess %}public{% else %}internal{% endif %}{% endset %} +import Foundation + +// swiftlint:disable superfluous_disable_command file_length implicit_return + +// MARK: - Strings + +{% macro parametersBlock types %}{% filter removeNewlines:"leading" %} + {% for type in types %} + {% if type == "String" %} + _ p{{forloop.counter}}: Any + {% else %} + _ p{{forloop.counter}}: {{type}} + {% endif %} + {{ ", " if not forloop.last }} + {% endfor %} +{% endfilter %}{% endmacro %} +{% macro argumentsBlock types %}{% filter removeNewlines:"leading" %} + {% for type in types %} + {% if type == "String" %} + String(describing: p{{forloop.counter}}) + {% elif type == "UnsafeRawPointer" %} + Int(bitPattern: p{{forloop.counter}}) + {% else %} + p{{forloop.counter}} + {% endif %} + {{ ", " if not forloop.last }} + {% endfor %} +{% endfilter %}{% endmacro %} +{% macro recursiveBlock table item %} + {% for string in item.strings %} + {% if not param.noComments %} + {% for line in string.translation|split:"\n" %} + /// {{line}} + {% endfor %} + {% endif %} + {% if string.types %} + {{accessModifier}} static func {{string.name|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}}({% call parametersBlock string.types %}) -> String { + return {{enumName}}.tr("{{table}}", "{{string.key}}", {% call argumentsBlock string.types %}) + } + {% elif param.lookupFunction %} + {# custom localization function is mostly used for in-app lang selection, so we want the loc to be recomputed at each call for those (hence the computed var) #} + {{accessModifier}} static var {{string.name|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}}: String { return {{enumName}}.tr("{{table}}", "{{string.key}}") } + {% else %} + {{accessModifier}} static let {{string.name|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}} = {{enumName}}.tr("{{table}}", "{{string.key}}") + {% endif %} + {% endfor %} + {% for child in item.children %} + + {{accessModifier}} enum {{child.name|swiftIdentifier:"pretty"|escapeReservedKeywords}} { + {% filter indent:2 %}{% call recursiveBlock table child %}{% endfilter %} + } + {% endfor %} +{% endmacro %} +// swiftlint:disable explicit_type_interface function_parameter_count identifier_name line_length +// swiftlint:disable nesting type_body_length type_name vertical_whitespace_opening_braces +{% set enumName %}{{param.enumName|default:"L10n"}}{% endset %} +{{accessModifier}} enum {{enumName}} { + {% if tables.count > 1 or param.forceFileNameEnum %} + {% for table in tables %} + {{accessModifier}} enum {{table.name|swiftIdentifier:"pretty"|escapeReservedKeywords}} { + {% filter indent:2 %}{% call recursiveBlock table.name table.levels %}{% endfilter %} + } + {% endfor %} + {% else %} + {% call recursiveBlock tables.first.name tables.first.levels %} + {% endif %} +} +// swiftlint:enable explicit_type_interface function_parameter_count identifier_name line_length +// swiftlint:enable nesting type_body_length type_name vertical_whitespace_opening_braces + +// MARK: - Implementation Details + +extension {{enumName}} { + private static func tr(_ table: String, _ key: String, _ args: CVarArg...) -> String { + {% if param.lookupFunction %} + let format = {{ param.lookupFunction }}(key, table) + {% else %} + let format = {{param.bundle|default:"BundleToken.bundle"}}.localizedString(forKey: key, value: nil, table: table) + {% endif %} + return String(format: format, locale: Locale.current, arguments: args) + } +} +{% if not param.bundle and not param.lookupFunction %} + +// swiftlint:disable convenience_type +private final class BundleToken { + static let bundle: Bundle = { + #if SWIFT_PACKAGE + return Bundle.module + #else + return Bundle(for: BundleToken.self) + #endif + }() +} +// swiftlint:enable convenience_type +{% endif %} +{% else %} +// No string found +{% endif %} diff --git a/Monal/.swiftgen/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/xcassets/swift4.stencil b/Monal/.swiftgen/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/xcassets/swift4.stencil new file mode 100644 index 0000000..c856593 --- /dev/null +++ b/Monal/.swiftgen/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/xcassets/swift4.stencil @@ -0,0 +1,329 @@ +// swiftlint:disable all +// Generated using SwiftGen — https://github.com/SwiftGen/SwiftGen + +{% if catalogs %} +{% set enumName %}{{param.enumName|default:"Asset"}}{% endset %} +{% set arResourceGroupType %}{{param.arResourceGroupTypeName|default:"ARResourceGroupAsset"}}{% endset %} +{% set colorType %}{{param.colorTypeName|default:"ColorAsset"}}{% endset %} +{% set dataType %}{{param.dataTypeName|default:"DataAsset"}}{% endset %} +{% set imageType %}{{param.imageTypeName|default:"ImageAsset"}}{% endset %} +{% set symbolType %}{{param.symbolTypeName|default:"SymbolAsset"}}{% endset %} +{% set forceNamespaces %}{{param.forceProvidesNamespaces|default:"false"}}{% endset %} +{% set accessModifier %}{% if param.publicAccess %}public{% else %}internal{% endif %}{% endset %} +#if os(macOS) + import AppKit +#elseif os(iOS) +{% if resourceCount.arresourcegroup > 0 %} + import ARKit +{% endif %} + import UIKit +#elseif os(tvOS) || os(watchOS) + import UIKit +#endif + +// Deprecated typealiases +{% if resourceCount.color > 0 %} +@available(*, deprecated, renamed: "{{colorType}}.Color", message: "This typealias will be removed in SwiftGen 7.0") +{{accessModifier}} typealias {{param.colorAliasName|default:"AssetColorTypeAlias"}} = {{colorType}}.Color +{% endif %} +{% if resourceCount.image > 0 %} +@available(*, deprecated, renamed: "{{imageType}}.Image", message: "This typealias will be removed in SwiftGen 7.0") +{{accessModifier}} typealias {{param.imageAliasName|default:"AssetImageTypeAlias"}} = {{imageType}}.Image +{% endif %} + +// swiftlint:disable superfluous_disable_command file_length implicit_return + +// MARK: - Asset Catalogs + +{% macro enumBlock assets %} + {% call casesBlock assets %} + {% if param.allValues %} + + // swiftlint:disable trailing_comma + {% if resourceCount.arresourcegroup > 0 %} + {{accessModifier}} static let allResourceGroups: [{{arResourceGroupType}}] = [ + {% filter indent:2 %}{% call allValuesBlock assets "arresourcegroup" "" %}{% endfilter %} + ] + {% endif %} + {% if resourceCount.color > 0 %} + {{accessModifier}} static let allColors: [{{colorType}}] = [ + {% filter indent:2 %}{% call allValuesBlock assets "color" "" %}{% endfilter %} + ] + {% endif %} + {% if resourceCount.data > 0 %} + {{accessModifier}} static let allDataAssets: [{{dataType}}] = [ + {% filter indent:2 %}{% call allValuesBlock assets "data" "" %}{% endfilter %} + ] + {% endif %} + {% if resourceCount.image > 0 %} + {{accessModifier}} static let allImages: [{{imageType}}] = [ + {% filter indent:2 %}{% call allValuesBlock assets "image" "" %}{% endfilter %} + ] + {% endif %} + {% if resourceCount.symbol > 0 %} + {{accessModifier}} static let allSymbols: [{{symbolType}}] = [ + {% filter indent:2 %}{% call allValuesBlock assets "symbol" "" %}{% endfilter %} + ] + {% endif %} + // swiftlint:enable trailing_comma + {% endif %} +{% endmacro %} +{% macro casesBlock assets %} + {% for asset in assets %} + {% if asset.type == "arresourcegroup" %} + {{accessModifier}} static let {{asset.name|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}} = {{arResourceGroupType}}(name: "{{asset.value}}") + {% elif asset.type == "color" %} + {{accessModifier}} static let {{asset.name|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}} = {{colorType}}(name: "{{asset.value}}") + {% elif asset.type == "data" %} + {{accessModifier}} static let {{asset.name|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}} = {{dataType}}(name: "{{asset.value}}") + {% elif asset.type == "image" %} + {{accessModifier}} static let {{asset.name|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}} = {{imageType}}(name: "{{asset.value}}") + {% elif asset.type == "symbol" %} + {{accessModifier}} static let {{asset.name|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}} = {{symbolType}}(name: "{{asset.value}}") + {% elif asset.items and ( forceNamespaces == "true" or asset.isNamespaced == "true" ) %} + {{accessModifier}} enum {{asset.name|swiftIdentifier:"pretty"|escapeReservedKeywords}} { + {% filter indent:2 %}{% call casesBlock asset.items %}{% endfilter %} + } + {% elif asset.items %} + {% call casesBlock asset.items %} + {% endif %} + {% endfor %} +{% endmacro %} +{% macro allValuesBlock assets filter prefix %} + {% for asset in assets %} + {% if asset.type == filter %} + {{prefix}}{{asset.name|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}}, + {% elif asset.items and ( forceNamespaces == "true" or asset.isNamespaced == "true" ) %} + {% set prefix2 %}{{prefix}}{{asset.name|swiftIdentifier:"pretty"|escapeReservedKeywords}}.{% endset %} + {% call allValuesBlock asset.items filter prefix2 %} + {% elif asset.items %} + {% call allValuesBlock asset.items filter prefix %} + {% endif %} + {% endfor %} +{% endmacro %} +// swiftlint:disable identifier_name line_length nesting type_body_length type_name +{{accessModifier}} enum {{enumName}} { + {% if catalogs.count > 1 or param.forceFileNameEnum %} + {% for catalog in catalogs %} + {{accessModifier}} enum {{catalog.name|swiftIdentifier:"pretty"|escapeReservedKeywords}} { + {% filter indent:2 %}{% call enumBlock catalog.assets %}{% endfilter %} + } + {% endfor %} + {% else %} + {% call enumBlock catalogs.first.assets %} + {% endif %} +} +// swiftlint:enable identifier_name line_length nesting type_body_length type_name + +// MARK: - Implementation Details +{% if resourceCount.arresourcegroup > 0 %} + +{{accessModifier}} struct {{arResourceGroupType}} { + {{accessModifier}} fileprivate(set) var name: String + + #if os(iOS) + @available(iOS 11.3, *) + {{accessModifier}} var referenceImages: Set { + return ARReferenceImage.referenceImages(in: self) + } + + @available(iOS 12.0, *) + {{accessModifier}} var referenceObjects: Set { + return ARReferenceObject.referenceObjects(in: self) + } + #endif +} + +#if os(iOS) +@available(iOS 11.3, *) +{{accessModifier}} extension ARReferenceImage { + static func referenceImages(in asset: {{arResourceGroupType}}) -> Set { + let bundle = {{param.bundle|default:"BundleToken.bundle"}} + return referenceImages(inGroupNamed: asset.name, bundle: bundle) ?? Set() + } +} + +@available(iOS 12.0, *) +{{accessModifier}} extension ARReferenceObject { + static func referenceObjects(in asset: {{arResourceGroupType}}) -> Set { + let bundle = {{param.bundle|default:"BundleToken.bundle"}} + return referenceObjects(inGroupNamed: asset.name, bundle: bundle) ?? Set() + } +} +#endif +{% endif %} +{% if resourceCount.color > 0 %} + +{{accessModifier}} final class {{colorType}} { + {{accessModifier}} fileprivate(set) var name: String + + #if os(macOS) + {{accessModifier}} typealias Color = NSColor + #elseif os(iOS) || os(tvOS) || os(watchOS) + {{accessModifier}} typealias Color = UIColor + #endif + + @available(iOS 11.0, tvOS 11.0, watchOS 4.0, macOS 10.13, *) + {{accessModifier}} private(set) lazy var color: Color = Color(asset: self) + + #if os(iOS) || os(tvOS) + @available(iOS 11.0, tvOS 11.0, *) + {{accessModifier}} func color(compatibleWith traitCollection: UITraitCollection) -> Color { + let bundle = {{param.bundle|default:"BundleToken.bundle"}} + guard let color = Color(named: name, in: bundle, compatibleWith: traitCollection) else { + fatalError("Unable to load color asset named \(name).") + } + return color + } + #endif + + fileprivate init(name: String) { + self.name = name + } +} + +{{accessModifier}} extension {{colorType}}.Color { + @available(iOS 11.0, tvOS 11.0, watchOS 4.0, macOS 10.13, *) + convenience init!(asset: {{colorType}}) { + let bundle = {{param.bundle|default:"BundleToken.bundle"}} + #if os(iOS) || os(tvOS) + self.init(named: asset.name, in: bundle, compatibleWith: nil) + #elseif os(macOS) + self.init(named: NSColor.Name(asset.name), bundle: bundle) + #elseif os(watchOS) + self.init(named: asset.name) + #endif + } +} +{% endif %} +{% if resourceCount.data > 0 %} + +{{accessModifier}} struct {{dataType}} { + {{accessModifier}} fileprivate(set) var name: String + + @available(iOS 9.0, tvOS 9.0, watchOS 6.0, macOS 10.11, *) + {{accessModifier}} var data: NSDataAsset { + return NSDataAsset(asset: self) + } +} + +@available(iOS 9.0, tvOS 9.0, watchOS 6.0, macOS 10.11, *) +{{accessModifier}} extension NSDataAsset { + convenience init!(asset: {{dataType}}) { + let bundle = {{param.bundle|default:"BundleToken.bundle"}} + #if os(iOS) || os(tvOS) || os(watchOS) + self.init(name: asset.name, bundle: bundle) + #elseif os(macOS) + self.init(name: NSDataAsset.Name(asset.name), bundle: bundle) + #endif + } +} +{% endif %} +{% if resourceCount.image > 0 %} + +{{accessModifier}} struct {{imageType}} { + {{accessModifier}} fileprivate(set) var name: String + + #if os(macOS) + {{accessModifier}} typealias Image = NSImage + #elseif os(iOS) || os(tvOS) || os(watchOS) + {{accessModifier}} typealias Image = UIImage + #endif + + @available(iOS 8.0, tvOS 9.0, watchOS 2.0, macOS 10.7, *) + {{accessModifier}} var image: Image { + let bundle = {{param.bundle|default:"BundleToken.bundle"}} + #if os(iOS) || os(tvOS) + let image = Image(named: name, in: bundle, compatibleWith: nil) + #elseif os(macOS) + let name = NSImage.Name(self.name) + let image = (bundle == .main) ? NSImage(named: name) : bundle.image(forResource: name) + #elseif os(watchOS) + let image = Image(named: name) + #endif + guard let result = image else { + fatalError("Unable to load image asset named \(name).") + } + return result + } + + #if os(iOS) || os(tvOS) + @available(iOS 8.0, tvOS 9.0, *) + {{accessModifier}} func image(compatibleWith traitCollection: UITraitCollection) -> Image { + let bundle = {{param.bundle|default:"BundleToken.bundle"}} + guard let result = Image(named: name, in: bundle, compatibleWith: traitCollection) else { + fatalError("Unable to load image asset named \(name).") + } + return result + } + #endif +} + +{{accessModifier}} extension {{imageType}}.Image { + @available(iOS 8.0, tvOS 9.0, watchOS 2.0, *) + @available(macOS, deprecated, + message: "This initializer is unsafe on macOS, please use the {{imageType}}.image property") + convenience init!(asset: {{imageType}}) { + #if os(iOS) || os(tvOS) + let bundle = {{param.bundle|default:"BundleToken.bundle"}} + self.init(named: asset.name, in: bundle, compatibleWith: nil) + #elseif os(macOS) + self.init(named: NSImage.Name(asset.name)) + #elseif os(watchOS) + self.init(named: asset.name) + #endif + } +} +{% endif %} +{% if resourceCount.symbol > 0 %} + +{{accessModifier}} struct {{symbolType}} { + {{accessModifier}} fileprivate(set) var name: String + + #if os(iOS) || os(tvOS) || os(watchOS) + @available(iOS 13.0, tvOS 13.0, watchOS 6.0, *) + {{accessModifier}} typealias Configuration = UIImage.SymbolConfiguration + {{accessModifier}} typealias Image = UIImage + + @available(iOS 12.0, tvOS 12.0, watchOS 5.0, *) + {{accessModifier}} var image: Image { + let bundle = {{param.bundle|default:"BundleToken.bundle"}} + #if os(iOS) || os(tvOS) + let image = Image(named: name, in: bundle, compatibleWith: nil) + #elseif os(watchOS) + let image = Image(named: name) + #endif + guard let result = image else { + fatalError("Unable to load symbol asset named \(name).") + } + return result + } + + @available(iOS 13.0, tvOS 13.0, watchOS 6.0, *) + {{accessModifier}} func image(with configuration: Configuration) -> Image { + let bundle = {{param.bundle|default:"BundleToken.bundle"}} + guard let result = Image(named: name, in: bundle, with: configuration) else { + fatalError("Unable to load symbol asset named \(name).") + } + return result + } + #endif +} +{% endif %} +{% if not param.bundle %} + +// swiftlint:disable convenience_type +private final class BundleToken { + static let bundle: Bundle = { + #if SWIFT_PACKAGE + return Bundle.module + #else + return Bundle(for: BundleToken.self) + #endif + }() +} +// swiftlint:enable convenience_type +{% endif %} +{% else %} +// No assets found +{% endif %} diff --git a/Monal/.swiftgen/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/xcassets/swift5.stencil b/Monal/.swiftgen/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/xcassets/swift5.stencil new file mode 100644 index 0000000..42df7be --- /dev/null +++ b/Monal/.swiftgen/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/xcassets/swift5.stencil @@ -0,0 +1,337 @@ +// swiftlint:disable all +// Generated using SwiftGen — https://github.com/SwiftGen/SwiftGen + +{% if catalogs %} +{% set enumName %}{{param.enumName|default:"Asset"}}{% endset %} +{% set arResourceGroupType %}{{param.arResourceGroupTypeName|default:"ARResourceGroupAsset"}}{% endset %} +{% set colorType %}{{param.colorTypeName|default:"ColorAsset"}}{% endset %} +{% set dataType %}{{param.dataTypeName|default:"DataAsset"}}{% endset %} +{% set imageType %}{{param.imageTypeName|default:"ImageAsset"}}{% endset %} +{% set symbolType %}{{param.symbolTypeName|default:"SymbolAsset"}}{% endset %} +{% set forceNamespaces %}{{param.forceProvidesNamespaces|default:"false"}}{% endset %} +{% set accessModifier %}{% if param.publicAccess %}public{% else %}internal{% endif %}{% endset %} +#if os(macOS) + import AppKit +#elseif os(iOS) +{% if resourceCount.arresourcegroup > 0 %} + import ARKit +{% endif %} + import UIKit +#elseif os(tvOS) || os(watchOS) + import UIKit +#endif + +// Deprecated typealiases +{% if resourceCount.color > 0 %} +@available(*, deprecated, renamed: "{{colorType}}.Color", message: "This typealias will be removed in SwiftGen 7.0") +{{accessModifier}} typealias {{param.colorAliasName|default:"AssetColorTypeAlias"}} = {{colorType}}.Color +{% endif %} +{% if resourceCount.image > 0 %} +@available(*, deprecated, renamed: "{{imageType}}.Image", message: "This typealias will be removed in SwiftGen 7.0") +{{accessModifier}} typealias {{param.imageAliasName|default:"AssetImageTypeAlias"}} = {{imageType}}.Image +{% endif %} + +// swiftlint:disable superfluous_disable_command file_length implicit_return + +// MARK: - Asset Catalogs + +{% macro enumBlock assets %} + {% call casesBlock assets %} + {% if param.allValues %} + + // swiftlint:disable trailing_comma + {% if resourceCount.arresourcegroup > 0 %} + {{accessModifier}} static let allResourceGroups: [{{arResourceGroupType}}] = [ + {% filter indent:2 %}{% call allValuesBlock assets "arresourcegroup" "" %}{% endfilter %} + ] + {% endif %} + {% if resourceCount.color > 0 %} + {{accessModifier}} static let allColors: [{{colorType}}] = [ + {% filter indent:2 %}{% call allValuesBlock assets "color" "" %}{% endfilter %} + ] + {% endif %} + {% if resourceCount.data > 0 %} + {{accessModifier}} static let allDataAssets: [{{dataType}}] = [ + {% filter indent:2 %}{% call allValuesBlock assets "data" "" %}{% endfilter %} + ] + {% endif %} + {% if resourceCount.image > 0 %} + {{accessModifier}} static let allImages: [{{imageType}}] = [ + {% filter indent:2 %}{% call allValuesBlock assets "image" "" %}{% endfilter %} + ] + {% endif %} + {% if resourceCount.symbol > 0 %} + {{accessModifier}} static let allSymbols: [{{symbolType}}] = [ + {% filter indent:2 %}{% call allValuesBlock assets "symbol" "" %}{% endfilter %} + ] + {% endif %} + // swiftlint:enable trailing_comma + {% endif %} +{% endmacro %} +{% macro casesBlock assets %} + {% for asset in assets %} + {% if asset.type == "arresourcegroup" %} + {{accessModifier}} static let {{asset.name|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}} = {{arResourceGroupType}}(name: "{{asset.value}}") + {% elif asset.type == "color" %} + {{accessModifier}} static let {{asset.name|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}} = {{colorType}}(name: "{{asset.value}}") + {% elif asset.type == "data" %} + {{accessModifier}} static let {{asset.name|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}} = {{dataType}}(name: "{{asset.value}}") + {% elif asset.type == "image" %} + {{accessModifier}} static let {{asset.name|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}} = {{imageType}}(name: "{{asset.value}}") + {% elif asset.type == "symbol" %} + {{accessModifier}} static let {{asset.name|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}} = {{symbolType}}(name: "{{asset.value}}") + {% elif asset.items and ( forceNamespaces == "true" or asset.isNamespaced == "true" ) %} + {{accessModifier}} enum {{asset.name|swiftIdentifier:"pretty"|escapeReservedKeywords}} { + {% filter indent:2 %}{% call casesBlock asset.items %}{% endfilter %} + } + {% elif asset.items %} + {% call casesBlock asset.items %} + {% endif %} + {% endfor %} +{% endmacro %} +{% macro allValuesBlock assets filter prefix %} + {% for asset in assets %} + {% if asset.type == filter %} + {{prefix}}{{asset.name|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}}, + {% elif asset.items and ( forceNamespaces == "true" or asset.isNamespaced == "true" ) %} + {% set prefix2 %}{{prefix}}{{asset.name|swiftIdentifier:"pretty"|escapeReservedKeywords}}.{% endset %} + {% call allValuesBlock asset.items filter prefix2 %} + {% elif asset.items %} + {% call allValuesBlock asset.items filter prefix %} + {% endif %} + {% endfor %} +{% endmacro %} +// swiftlint:disable identifier_name line_length nesting type_body_length type_name +{{accessModifier}} enum {{enumName}} { + {% if catalogs.count > 1 or param.forceFileNameEnum %} + {% for catalog in catalogs %} + {{accessModifier}} enum {{catalog.name|swiftIdentifier:"pretty"|escapeReservedKeywords}} { + {% filter indent:2 %}{% call enumBlock catalog.assets %}{% endfilter %} + } + {% endfor %} + {% else %} + {% call enumBlock catalogs.first.assets %} + {% endif %} +} +// swiftlint:enable identifier_name line_length nesting type_body_length type_name + +// MARK: - Implementation Details +{% if resourceCount.arresourcegroup > 0 %} + +{{accessModifier}} struct {{arResourceGroupType}} { + {{accessModifier}} fileprivate(set) var name: String + + #if os(iOS) + @available(iOS 11.3, *) + {{accessModifier}} var referenceImages: Set { + return ARReferenceImage.referenceImages(in: self) + } + + @available(iOS 12.0, *) + {{accessModifier}} var referenceObjects: Set { + return ARReferenceObject.referenceObjects(in: self) + } + #endif +} + +#if os(iOS) +@available(iOS 11.3, *) +{{accessModifier}} extension ARReferenceImage { + static func referenceImages(in asset: {{arResourceGroupType}}) -> Set { + let bundle = {{param.bundle|default:"BundleToken.bundle"}} + return referenceImages(inGroupNamed: asset.name, bundle: bundle) ?? Set() + } +} + +@available(iOS 12.0, *) +{{accessModifier}} extension ARReferenceObject { + static func referenceObjects(in asset: {{arResourceGroupType}}) -> Set { + let bundle = {{param.bundle|default:"BundleToken.bundle"}} + return referenceObjects(inGroupNamed: asset.name, bundle: bundle) ?? Set() + } +} +#endif +{% endif %} +{% if resourceCount.color > 0 %} + +{{accessModifier}} final class {{colorType}} { + {{accessModifier}} fileprivate(set) var name: String + + #if os(macOS) + {{accessModifier}} typealias Color = NSColor + #elseif os(iOS) || os(tvOS) || os(watchOS) + {{accessModifier}} typealias Color = UIColor + #endif + + @available(iOS 11.0, tvOS 11.0, watchOS 4.0, macOS 10.13, *) + {{accessModifier}} private(set) lazy var color: Color = { + guard let color = Color(asset: self) else { + fatalError("Unable to load color asset named \(name).") + } + return color + }() + + #if os(iOS) || os(tvOS) + @available(iOS 11.0, tvOS 11.0, *) + {{accessModifier}} func color(compatibleWith traitCollection: UITraitCollection) -> Color { + let bundle = {{param.bundle|default:"BundleToken.bundle"}} + guard let color = Color(named: name, in: bundle, compatibleWith: traitCollection) else { + fatalError("Unable to load color asset named \(name).") + } + return color + } + #endif + + fileprivate init(name: String) { + self.name = name + } +} + +{{accessModifier}} extension {{colorType}}.Color { + @available(iOS 11.0, tvOS 11.0, watchOS 4.0, macOS 10.13, *) + convenience init?(asset: {{colorType}}) { + let bundle = {{param.bundle|default:"BundleToken.bundle"}} + #if os(iOS) || os(tvOS) + self.init(named: asset.name, in: bundle, compatibleWith: nil) + #elseif os(macOS) + self.init(named: NSColor.Name(asset.name), bundle: bundle) + #elseif os(watchOS) + self.init(named: asset.name) + #endif + } +} +{% endif %} +{% if resourceCount.data > 0 %} + +{{accessModifier}} struct {{dataType}} { + {{accessModifier}} fileprivate(set) var name: String + + @available(iOS 9.0, tvOS 9.0, watchOS 6.0, macOS 10.11, *) + {{accessModifier}} var data: NSDataAsset { + guard let data = NSDataAsset(asset: self) else { + fatalError("Unable to load data asset named \(name).") + } + return data + } +} + +@available(iOS 9.0, tvOS 9.0, watchOS 6.0, macOS 10.11, *) +{{accessModifier}} extension NSDataAsset { + convenience init?(asset: {{dataType}}) { + let bundle = {{param.bundle|default:"BundleToken.bundle"}} + #if os(iOS) || os(tvOS) || os(watchOS) + self.init(name: asset.name, bundle: bundle) + #elseif os(macOS) + self.init(name: NSDataAsset.Name(asset.name), bundle: bundle) + #endif + } +} +{% endif %} +{% if resourceCount.image > 0 %} + +{{accessModifier}} struct {{imageType}} { + {{accessModifier}} fileprivate(set) var name: String + + #if os(macOS) + {{accessModifier}} typealias Image = NSImage + #elseif os(iOS) || os(tvOS) || os(watchOS) + {{accessModifier}} typealias Image = UIImage + #endif + + @available(iOS 8.0, tvOS 9.0, watchOS 2.0, macOS 10.7, *) + {{accessModifier}} var image: Image { + let bundle = {{param.bundle|default:"BundleToken.bundle"}} + #if os(iOS) || os(tvOS) + let image = Image(named: name, in: bundle, compatibleWith: nil) + #elseif os(macOS) + let name = NSImage.Name(self.name) + let image = (bundle == .main) ? NSImage(named: name) : bundle.image(forResource: name) + #elseif os(watchOS) + let image = Image(named: name) + #endif + guard let result = image else { + fatalError("Unable to load image asset named \(name).") + } + return result + } + + #if os(iOS) || os(tvOS) + @available(iOS 8.0, tvOS 9.0, *) + {{accessModifier}} func image(compatibleWith traitCollection: UITraitCollection) -> Image { + let bundle = {{param.bundle|default:"BundleToken.bundle"}} + guard let result = Image(named: name, in: bundle, compatibleWith: traitCollection) else { + fatalError("Unable to load image asset named \(name).") + } + return result + } + #endif +} + +{{accessModifier}} extension {{imageType}}.Image { + @available(iOS 8.0, tvOS 9.0, watchOS 2.0, *) + @available(macOS, deprecated, + message: "This initializer is unsafe on macOS, please use the {{imageType}}.image property") + convenience init?(asset: {{imageType}}) { + #if os(iOS) || os(tvOS) + let bundle = {{param.bundle|default:"BundleToken.bundle"}} + self.init(named: asset.name, in: bundle, compatibleWith: nil) + #elseif os(macOS) + self.init(named: NSImage.Name(asset.name)) + #elseif os(watchOS) + self.init(named: asset.name) + #endif + } +} +{% endif %} +{% if resourceCount.symbol > 0 %} + +{{accessModifier}} struct {{symbolType}} { + {{accessModifier}} fileprivate(set) var name: String + + #if os(iOS) || os(tvOS) || os(watchOS) + @available(iOS 13.0, tvOS 13.0, watchOS 6.0, *) + {{accessModifier}} typealias Configuration = UIImage.SymbolConfiguration + {{accessModifier}} typealias Image = UIImage + + @available(iOS 12.0, tvOS 12.0, watchOS 5.0, *) + {{accessModifier}} var image: Image { + let bundle = {{param.bundle|default:"BundleToken.bundle"}} + #if os(iOS) || os(tvOS) + let image = Image(named: name, in: bundle, compatibleWith: nil) + #elseif os(watchOS) + let image = Image(named: name) + #endif + guard let result = image else { + fatalError("Unable to load symbol asset named \(name).") + } + return result + } + + @available(iOS 13.0, tvOS 13.0, watchOS 6.0, *) + {{accessModifier}} func image(with configuration: Configuration) -> Image { + let bundle = {{param.bundle|default:"BundleToken.bundle"}} + guard let result = Image(named: name, in: bundle, with: configuration) else { + fatalError("Unable to load symbol asset named \(name).") + } + return result + } + #endif +} +{% endif %} +{% if not param.bundle %} + +// swiftlint:disable convenience_type +private final class BundleToken { + static let bundle: Bundle = { + #if SWIFT_PACKAGE + return Bundle.module + #else + return Bundle(for: BundleToken.self) + #endif + }() +} +// swiftlint:enable convenience_type +{% endif %} +{% else %} +// No assets found +{% endif %} diff --git a/Monal/.swiftgen/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/yaml/inline-swift4.stencil b/Monal/.swiftgen/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/yaml/inline-swift4.stencil new file mode 100644 index 0000000..9cc2aa3 --- /dev/null +++ b/Monal/.swiftgen/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/yaml/inline-swift4.stencil @@ -0,0 +1,92 @@ +// swiftlint:disable all +// Generated using SwiftGen — https://github.com/SwiftGen/SwiftGen + +{% if files %} +{% set accessModifier %}{% if param.publicAccess %}public{% else %}internal{% endif %}{% endset %} +{% set documentPrefix %}{{param.documentName|default:"Document"}}{% endset %} +import Foundation + +// swiftlint:disable superfluous_disable_command +// swiftlint:disable file_length + +// MARK: - YAML Files +{% macro fileBlock file %} + {% if file.documents.count > 1 %} + {% for document in file.documents %} + {% set documentName %}{{documentPrefix}}{{forloop.counter}}{% endset %} + {{accessModifier}} enum {{documentName|swiftIdentifier:"pretty"|escapeReservedKeywords}} { + {% filter indent:2 %}{% call documentBlock file document %}{% endfilter %} + } + {% endfor %} + {% else %} + {% call documentBlock file file.documents.first %} + {% endif %} +{% endmacro %} +{% macro documentBlock file document %} + {% set rootType %}{% call typeBlock document.metadata %}{% endset %} + {% if document.metadata.type == "Array" %} + {{accessModifier}} static let items: {{rootType}} = {% call valueBlock document.data document.metadata %} + {% elif document.metadata.type == "Dictionary" %} + {% for key,value in document.metadata.properties %} + {{accessModifier}} {% call propertyBlock key value document.data %} + {% endfor %} + {% else %} + {{accessModifier}} static let value: {{rootType}} = {% call valueBlock document.data document.metadata %} + {% endif %} +{% endmacro %} +{% macro typeBlock metadata %}{% filter removeNewlines:"leading" %} + {% if metadata.type == "Array" %} + [{% call typeBlock metadata.element %}] + {% elif metadata.type == "Dictionary" %} + [String: Any] + {% elif metadata.type == "Optional" %} + Any? + {% else %} + {{metadata.type}} + {% endif %} +{% endfilter %}{% endmacro %} +{% macro propertyBlock key metadata data %}{% filter removeNewlines:"leading" %} + {% set propertyName %}{{key|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}}{% endset %} + {% set propertyType %}{% call typeBlock metadata %}{% endset %} + static let {{propertyName}}: {{propertyType}} = {% call valueBlock data[key] metadata %} +{% endfilter %}{% endmacro %} +{% macro valueBlock value metadata %}{% filter removeNewlines:"leading" %} + {% if metadata.type == "String" %} + "{{ value }}" + {% elif metadata.type == "Optional" %} + nil + {% elif metadata.type == "Array" and value %} + [{% for value in value %} + {% call valueBlock value metadata.element.items[forloop.counter0]|default:metadata.element %} + {{ ", " if not forloop.last }} + {% endfor %}] + {% elif metadata.type == "Dictionary" %} + [{% for key,value in value %} + "{{key}}": {% call valueBlock value metadata.properties[key] %} + {{ ", " if not forloop.last }} + {% empty %} + : + {% endfor %}] + {% elif metadata.type == "Bool" %} + {% if value %}true{% else %}false{% endif %} + {% else %} + {{ value }} + {% endif %} +{% endfilter %}{% endmacro %} + +// swiftlint:disable identifier_name line_length number_separator type_body_length +{{accessModifier}} enum {{param.enumName|default:"YAMLFiles"}} { + {% if files.count > 1 or param.forceFileNameEnum %} + {% for file in files %} + {{accessModifier}} enum {{file.name|swiftIdentifier:"pretty"|escapeReservedKeywords}} { + {% filter indent:2 %}{% call fileBlock file %}{% endfilter %} + } + {% endfor %} + {% else %} + {% call fileBlock files.first %} + {% endif %} +} +// swiftlint:enable identifier_name line_length number_separator type_body_length +{% else %} +// No files found +{% endif %} diff --git a/Monal/.swiftgen/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/yaml/inline-swift5.stencil b/Monal/.swiftgen/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/yaml/inline-swift5.stencil new file mode 100644 index 0000000..9cc2aa3 --- /dev/null +++ b/Monal/.swiftgen/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/yaml/inline-swift5.stencil @@ -0,0 +1,92 @@ +// swiftlint:disable all +// Generated using SwiftGen — https://github.com/SwiftGen/SwiftGen + +{% if files %} +{% set accessModifier %}{% if param.publicAccess %}public{% else %}internal{% endif %}{% endset %} +{% set documentPrefix %}{{param.documentName|default:"Document"}}{% endset %} +import Foundation + +// swiftlint:disable superfluous_disable_command +// swiftlint:disable file_length + +// MARK: - YAML Files +{% macro fileBlock file %} + {% if file.documents.count > 1 %} + {% for document in file.documents %} + {% set documentName %}{{documentPrefix}}{{forloop.counter}}{% endset %} + {{accessModifier}} enum {{documentName|swiftIdentifier:"pretty"|escapeReservedKeywords}} { + {% filter indent:2 %}{% call documentBlock file document %}{% endfilter %} + } + {% endfor %} + {% else %} + {% call documentBlock file file.documents.first %} + {% endif %} +{% endmacro %} +{% macro documentBlock file document %} + {% set rootType %}{% call typeBlock document.metadata %}{% endset %} + {% if document.metadata.type == "Array" %} + {{accessModifier}} static let items: {{rootType}} = {% call valueBlock document.data document.metadata %} + {% elif document.metadata.type == "Dictionary" %} + {% for key,value in document.metadata.properties %} + {{accessModifier}} {% call propertyBlock key value document.data %} + {% endfor %} + {% else %} + {{accessModifier}} static let value: {{rootType}} = {% call valueBlock document.data document.metadata %} + {% endif %} +{% endmacro %} +{% macro typeBlock metadata %}{% filter removeNewlines:"leading" %} + {% if metadata.type == "Array" %} + [{% call typeBlock metadata.element %}] + {% elif metadata.type == "Dictionary" %} + [String: Any] + {% elif metadata.type == "Optional" %} + Any? + {% else %} + {{metadata.type}} + {% endif %} +{% endfilter %}{% endmacro %} +{% macro propertyBlock key metadata data %}{% filter removeNewlines:"leading" %} + {% set propertyName %}{{key|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}}{% endset %} + {% set propertyType %}{% call typeBlock metadata %}{% endset %} + static let {{propertyName}}: {{propertyType}} = {% call valueBlock data[key] metadata %} +{% endfilter %}{% endmacro %} +{% macro valueBlock value metadata %}{% filter removeNewlines:"leading" %} + {% if metadata.type == "String" %} + "{{ value }}" + {% elif metadata.type == "Optional" %} + nil + {% elif metadata.type == "Array" and value %} + [{% for value in value %} + {% call valueBlock value metadata.element.items[forloop.counter0]|default:metadata.element %} + {{ ", " if not forloop.last }} + {% endfor %}] + {% elif metadata.type == "Dictionary" %} + [{% for key,value in value %} + "{{key}}": {% call valueBlock value metadata.properties[key] %} + {{ ", " if not forloop.last }} + {% empty %} + : + {% endfor %}] + {% elif metadata.type == "Bool" %} + {% if value %}true{% else %}false{% endif %} + {% else %} + {{ value }} + {% endif %} +{% endfilter %}{% endmacro %} + +// swiftlint:disable identifier_name line_length number_separator type_body_length +{{accessModifier}} enum {{param.enumName|default:"YAMLFiles"}} { + {% if files.count > 1 or param.forceFileNameEnum %} + {% for file in files %} + {{accessModifier}} enum {{file.name|swiftIdentifier:"pretty"|escapeReservedKeywords}} { + {% filter indent:2 %}{% call fileBlock file %}{% endfilter %} + } + {% endfor %} + {% else %} + {% call fileBlock files.first %} + {% endif %} +} +// swiftlint:enable identifier_name line_length number_separator type_body_length +{% else %} +// No files found +{% endif %} diff --git a/Monal/.swiftgen/bin/swiftgen b/Monal/.swiftgen/bin/swiftgen new file mode 100755 index 0000000..1bc2b87 Binary files /dev/null and b/Monal/.swiftgen/bin/swiftgen differ diff --git a/Monal/.swiftgen/templates/fonts.stencil b/Monal/.swiftgen/templates/fonts.stencil new file mode 100644 index 0000000..c6148bf --- /dev/null +++ b/Monal/.swiftgen/templates/fonts.stencil @@ -0,0 +1,29 @@ +// swiftlint:disable all +// Generated using SwiftGen — https://github.com/SwiftGen/SwiftGen + +{% if families %} +import SwiftUI +{% for family in families %} +{% set identifierName %}{{family.name|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}}{% endset %} +{% set styleTypeName %}{{family.name|swiftIdentifier:"pretty"|escapeReservedKeywords}}Style{% endset %} + +extension Font { + public static func {{identifierName}}(_ style: {{styleTypeName}}, fixedSize: CGFloat) -> Font { + return Font.custom(style.rawValue, fixedSize: fixedSize) + } + + public static func {{identifierName}}(_ style: {{styleTypeName}}, size: CGFloat, relativeTo textStyle: TextStyle = .body) -> Font { + return Font.custom(style.rawValue, size: size, relativeTo: textStyle) + } + + public enum {{styleTypeName}}: String { + {% for font in family.fonts %} + case {{font.style|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}} = "{{font.name}}" + {% endfor %} + } +} +{% endfor %} +{% else %} +// No fonts found +{% endif %} +// swiftlint:enable all diff --git a/Monal/.swiftgen/templates/strings.stencil b/Monal/.swiftgen/templates/strings.stencil new file mode 100644 index 0000000..daeeea4 --- /dev/null +++ b/Monal/.swiftgen/templates/strings.stencil @@ -0,0 +1,85 @@ +// swiftlint:disable all +// Generated using SwiftGen — https://github.com/SwiftGen/SwiftGen + +{% if tables.count > 0 %} +{% set accessModifier %}{% if param.publicAccess %}public{% else %}internal{% endif %}{% endset %} +import Foundation + +// swiftlint:disable superfluous_disable_command file_length implicit_return + +// MARK: - Strings + +{% macro parametersBlock types %}{% filter removeNewlines:"leading" %} + {% for type in types %} + {% if type == "String" %} + _ p{{forloop.counter}}: Any + {% else %} + _ p{{forloop.counter}}: {{type}} + {% endif %} + {{ ", " if not forloop.last }} + {% endfor %} +{% endfilter %}{% endmacro %} +{% macro argumentsBlock types %}{% filter removeNewlines:"leading" %} + {% for type in types %} + {% if type == "String" %} + String(describing: p{{forloop.counter}}) + {% elif type == "UnsafeRawPointer" %} + Int(bitPattern: p{{forloop.counter}}) + {% else %} + p{{forloop.counter}} + {% endif %} + {{ ", " if not forloop.last }} + {% endfor %} +{% endfilter %}{% endmacro %} +{% macro recursiveBlock table item %} + {% for string in item.strings %} + {% if not param.noComments %} + {% for line in string.translation|split:"\n" %} + /// {{line}} + {% endfor %} + {% endif %} + {% if string.types %} + {{accessModifier}} static func {{string.name|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}}({% call parametersBlock string.types %}) -> String { + {{enumName}}.tr("{{table}}", "{{string.key}}", {% call argumentsBlock string.types %}) + } + {% else %} + {{accessModifier}} static var {{string.name|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}}: String { {{enumName}}.tr("{{table}}", "{{string.key}}") } + {% endif %} + {% endfor %} + {% for child in item.children %} + + {{accessModifier}} enum {{child.name|swiftIdentifier:"pretty"|escapeReservedKeywords}} { + {% filter indent:2 %}{% call recursiveBlock table child %}{% endfilter %} + } + {% endfor %} +{% endmacro %} +// swiftlint:disable explicit_type_interface function_parameter_count identifier_name line_length +// swiftlint:disable nesting type_body_length type_name vertical_whitespace_opening_braces +{% set enumName %}{{param.enumName|default:"L10n"}}{% endset %} +{{accessModifier}} enum {{enumName}} { + {% if tables.count > 1 or param.forceFileNameEnum %} + {% for table in tables %} + {{accessModifier}} enum {{table.name|swiftIdentifier:"pretty"|escapeReservedKeywords}} { + {% filter indent:2 %}{% call recursiveBlock table.name table.levels %}{% endfilter %} + } + {% endfor %} + {% else %} + {% call recursiveBlock tables.first.name tables.first.levels %} + {% endif %} +} +// swiftlint:enable explicit_type_interface function_parameter_count identifier_name line_length +// swiftlint:enable nesting type_body_length type_name vertical_whitespace_opening_braces + +// MARK: - Implementation Details +import Localize_Swift +extension {{enumName}} { + static func tr(_ table: String, _ key: String, _ args: CVarArg...) -> String { + let selectedLanguage = Localize.currentLanguage() + guard let path = Bundle.main.path(forResource: selectedLanguage, ofType: "lproj"), + let bundle = Bundle(path: path) else { return "Setup language error" } + return NSLocalizedString(key, tableName: table, bundle: bundle, comment: "") + } +} + +{% endif %} +// swiftlint: enable all diff --git a/Monal/.swiftgen/templates/xcassets.stencil b/Monal/.swiftgen/templates/xcassets.stencil new file mode 100644 index 0000000..b6283e7 --- /dev/null +++ b/Monal/.swiftgen/templates/xcassets.stencil @@ -0,0 +1,48 @@ +// swiftlint:disable all +// Generated using SwiftGen — https://github.com/SwiftGen/SwiftGen + +{% if catalogs %} +import SwiftUI +{% macro casesBlock assets %} + {% for asset in assets %} + {% if asset.items and asset.isNamespaced == "true" %} + public enum {{asset.name|swiftIdentifier:"pretty"|escapeReservedKeywords}} { + {% filter indent:2 %}{% call casesBlock asset.items %}{% endfilter %} + } + {% elif asset.items %} + {% call casesBlock asset.items %} + {% elif asset.type == "color" %} + public static let {{asset.name|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}} = Color("{{asset.value}}") + {% elif asset.type == "image" %} + public static let {{asset.name|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}} = Image("{{asset.value}}") + {% endif %} + {% endfor %} +{% endmacro %} +{% for catalog in catalogs %} +{% if catalog.name == "Colors" %} + +extension Color { + {% for catalog in catalogs %} + {% if catalog.name == "Colors" %} + {% call casesBlock catalog.assets %} + {% endif %} + {% endfor %} +} +{% endif %} +{% endfor %} +{% for catalog in catalogs %} +{% if catalog.name == "Images" %} + +extension Image { + {% for catalog in catalogs %} + {% if catalog.name == "Images" %} + {% call casesBlock catalog.assets %} + {% endif %} + {% endfor %} +} +{% endif %} +{% endfor %} +{% else %} +// No assets found +{% endif %} +// swiftlint: enable all diff --git a/Monal/.swiftgen/templates/xcassets_strings.stencil b/Monal/.swiftgen/templates/xcassets_strings.stencil new file mode 100644 index 0000000..a5540bc --- /dev/null +++ b/Monal/.swiftgen/templates/xcassets_strings.stencil @@ -0,0 +1,36 @@ +// swiftlint:disable all +// Generated using SwiftGen — https://github.com/SwiftGen/SwiftGen + +{% if catalogs %} +import Foundation + +typealias AssetStrings = String +{% macro casesBlock assets %} + {% for asset in assets %} + {% if asset.items and asset.isNamespaced == "true" %} + public enum {{asset.name|swiftIdentifier:"pretty"|escapeReservedKeywords}} { + {% filter indent:2 %}{% call casesBlock asset.items %}{% endfilter %} + } + {% elif asset.items %} + {% call casesBlock asset.items %} + {% elif asset.type == "image" %} + public static let {{asset.name|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}} = String("{{asset.value}}") + {% endif %} + {% endfor %} +{% endmacro %} +{% for catalog in catalogs %} +{% if catalog.name == "Images" %} + +extension String { + {% for catalog in catalogs %} + {% if catalog.name == "Images" %} + {% call casesBlock catalog.assets %} + {% endif %} + {% endfor %} +} +{% endif %} +{% endfor %} +{% else %} +// No assets found +{% endif %} +// swiftlint: enable all diff --git a/Monal/Monal.xcodeproj/project.pbxproj b/Monal/Monal.xcodeproj/project.pbxproj index 246319f..c84a404 100644 --- a/Monal/Monal.xcodeproj/project.pbxproj +++ b/Monal/Monal.xcodeproj/project.pbxproj @@ -1414,6 +1414,7 @@ isa = PBXGroup; children = ( 7E995F202CEAC5D2005B30EE /* AnotherIMApp.swift */, + EA534340732BF66B533E4C0B /* Generated */, 7ED6F01A2CECC43D0035B3B7 /* Resources */, 7E8D7AE42CECD037009AD3DF /* Views */, 7E8D7AE52CECD05C009AD3DF /* XMPP */, @@ -1605,6 +1606,13 @@ name = Frameworks; sourceTree = ""; }; + EA534340732BF66B533E4C0B /* Generated */ = { + isa = PBXGroup; + children = ( + ); + path = Generated; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ @@ -1746,6 +1754,7 @@ isa = PBXNativeTarget; buildConfigurationList = 7E995F172CEAC4BA005B30EE /* Build configuration list for PBXNativeTarget "another.im" */; buildPhases = ( + 7E8D7AE72CECD2CC009AD3DF /* swiftgen */, 7E8D7AE62CECD182009AD3DF /* swiftlint */, A9E041FD8051B08903221D89 /* [CP] Check Pods Manifest.lock */, 7E995F022CEAC4B8005B30EE /* Sources */, @@ -2055,6 +2064,24 @@ shellPath = /bin/sh; shellScript = "# Type a script or drag a script file from your workspace to insert its path.\nswiftlint\n"; }; + 7E8D7AE72CECD2CC009AD3DF /* swiftgen */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = swiftgen; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "# Type a script or drag a script file from your workspace to insert its path.\n./.swiftgen/bin/swiftgen\n"; + }; 8FC0217E357D67979CAFB523 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; diff --git a/Monal/another.im/Generated/.gitignore b/Monal/another.im/Generated/.gitignore new file mode 100644 index 0000000..c96a04f --- /dev/null +++ b/Monal/another.im/Generated/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore \ No newline at end of file diff --git a/Monal/swiftgen.yml b/Monal/swiftgen.yml new file mode 100644 index 0000000..df364d5 --- /dev/null +++ b/Monal/swiftgen.yml @@ -0,0 +1,27 @@ +--- +output_dir: another.im/Generated +input_dir: another.im/Resources + +xcassets: + - inputs: Assets/Images.xcassets + outputs: + - templatePath: .swiftgen/templates/xcassets.stencil + params: + forceProvidesNamespaces: true + enumName: Image + output: Images+Generated.swift + - inputs: Assets/Colors.xcassets + outputs: + - templatePath: .swiftgen/templates/xcassets.stencil + params: + forceProvidesNamespaces: true + enumName: Color + output: Colors+Generated.swift + +strings: + inputs: Strings/Localizable.strings + outputs: + # - templatePath: .templates/strings.stencil + - templateName: structured-swift5 + + output: Strings+Generated.swift