@@ -34,14 +34,56 @@ import Foundation
3434#if canImport(CoreGraphics)
3535import CoreGraphics
3636
37- @objc ( SVGImage)
38- public final class SVG : NSObject {
37+ public struct SVG {
3938 public let size : CGSize
4039
4140 //An Image is simply an array of CoreGraphics draw commands
4241 //see: Renderer.swift
4342 let commands : [ RendererCommand < CGTypes > ]
4443
44+ public init ? ( fileURL url: URL , options: SVG . Options = . default) {
45+ do {
46+ let svg = try DOM . SVG. parse ( fileURL: url)
47+ self . init ( dom: svg, options: options)
48+ } catch {
49+ XMLParser . logParsingError ( for: error, filename: url. lastPathComponent, parsing: nil )
50+ return nil
51+ }
52+ }
53+
54+ public init ? ( named name: String , in bundle: Bundle = Bundle . main, options: SVG . Options = . default) {
55+ guard let url = bundle. url ( forResource: name, withExtension: nil ) else {
56+ return nil
57+ }
58+
59+ self . init ( fileURL: url, options: options)
60+ }
61+
62+ public init ? ( data: Data , options: SVG . Options = . default) {
63+ guard let svg = try ? DOM . SVG. parse ( data: data) else {
64+ return nil
65+ }
66+
67+ self . init ( dom: svg, options: options)
68+ }
69+
70+ public struct Options : OptionSet {
71+ public let rawValue : Int
72+ public init ( rawValue: Int ) {
73+ self . rawValue = rawValue
74+ }
75+
76+ public static let hideUnsupportedFilters = Options ( rawValue: 1 << 0 )
77+
78+ public static let `default` : Options = [ ]
79+ }
80+ }
81+
82+ @available ( * , unavailable, renamed: " SVG " )
83+ public enum Image { }
84+
85+ extension SVG {
86+
4587 init ( dom: DOM . SVG , options: Options ) {
4688 self . size = CGSize ( width: dom. width, height: dom. height)
4789
@@ -60,25 +102,11 @@ public final class SVG: NSObject {
60102 generator. renderCommands ( for: layer)
61103 )
62104 }
63-
64- public struct Options : OptionSet {
65- public let rawValue : Int
66- public init ( rawValue: Int ) {
67- self . rawValue = rawValue
68- }
69-
70- public static let hideUnsupportedFilters = Options ( rawValue: 1 << 0 )
71-
72- public static let `default` : Options = [ ]
73- }
74105}
75106
76- @available ( * , unavailable, renamed: " SVG " )
77- public enum Image { }
78-
79107#else
80108
81- public final class SVG : NSObject {
109+ public struct SVG {
82110 public let size : CGSize
83111
84112 init ( dom: DOM . SVG , options: Options ) {
@@ -116,69 +144,3 @@ public extension SVG {
116144 }
117145}
118146#endif
119-
120- extension DOM . SVG {
121-
122- static func parse( fileURL url: URL , options: XMLParser . Options = . skipInvalidElements) throws -> DOM . SVG {
123- let element = try XML . SAXParser. parse ( contentsOf: url)
124- let parser = XMLParser ( options: options, filename: url. lastPathComponent)
125- return try parser. parseSVG ( element)
126- }
127-
128- static func parse( data: Data , options: XMLParser . Options = . skipInvalidElements) throws -> DOM . SVG {
129- let element = try XML . SAXParser. parse ( data: data)
130- let parser = XMLParser ( options: options)
131- return try parser. parseSVG ( element)
132- }
133- }
134-
135- public extension SVG {
136-
137- convenience init ? ( fileURL url: URL , options: SVG . Options = . default) {
138- do {
139- let svg = try DOM . SVG. parse ( fileURL: url)
140- self . init ( dom: svg, options: options)
141- } catch {
142- XMLParser . logParsingError ( for: error, filename: url. lastPathComponent, parsing: nil )
143- return nil
144- }
145- }
146-
147- convenience init ? ( named name: String , in bundle: Bundle = Bundle . main, options: SVG . Options = . default) {
148- guard let url = bundle. url ( forResource: name, withExtension: nil ) else {
149- return nil
150- }
151-
152- self . init ( fileURL: url, options: options)
153- }
154-
155- convenience init ? ( data: Data , options: SVG . Options = . default) {
156- guard let svg = try ? DOM . SVG. parse ( data: data) else {
157- return nil
158- }
159-
160- self . init ( dom: svg, options: options)
161- }
162-
163-
164- struct Insets : Equatable {
165- public var top : CGFloat
166- public var left : CGFloat
167- public var bottom : CGFloat
168- public var right : CGFloat
169-
170- public init (
171- top: CGFloat = 0 ,
172- left: CGFloat = 0 ,
173- bottom: CGFloat = 0 ,
174- right: CGFloat = 0
175- ) {
176- self . top = top
177- self . left = left
178- self . bottom = bottom
179- self . right = right
180- }
181-
182- public static let zero = Insets ( top: 0 , left: 0 , bottom: 0 , right: 0 )
183- }
184- }
0 commit comments