338 lines
12 KiB
Plaintext
338 lines
12 KiB
Plaintext
// swiftlint:disable all
|
|
// Generated using SwiftGen — https://github.com/SwiftGen/SwiftGen
|
|
|
|
{% if catalogs %}
|
|
{% set className %}{{param.className|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
|
|
@objcMembers
|
|
{{accessModifier}} class {{className}}: NSObject {
|
|
{% if catalogs.count > 1 or param.forceFileNameEnum %}
|
|
{% for catalog in catalogs %}
|
|
@objcMembers
|
|
@objc({{className}}{{catalog.name|swiftIdentifier:"pretty"|escapeReservedKeywords}}) {{accessModifier}} class {{catalog.name|swiftIdentifier:"pretty"|escapeReservedKeywords}}: NSObject {
|
|
{% 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<ARReferenceImage> {
|
|
return ARReferenceImage.referenceImages(in: self)
|
|
}
|
|
|
|
@available(iOS 12.0, *)
|
|
{{accessModifier}} var referenceObjects: Set<ARReferenceObject> {
|
|
return ARReferenceObject.referenceObjects(in: self)
|
|
}
|
|
#endif
|
|
}
|
|
|
|
#if os(iOS)
|
|
@available(iOS 11.3, *)
|
|
{{accessModifier}} extension ARReferenceImage {
|
|
static func referenceImages(in asset: {{arResourceGroupType}}) -> Set<ARReferenceImage> {
|
|
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<ARReferenceObject> {
|
|
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 %}
|
|
|
|
@objcMembers
|
|
{{accessModifier}} class {{imageType}}: NSObject {
|
|
{{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
|
|
}
|
|
|
|
{{accessModifier}} init(name: String) {
|
|
self.name = name
|
|
}
|
|
|
|
#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 %}
|
|
|