Skip to content

Commit 6a76cb8

Browse files
committed
Adding --hideUnsupportedFilters
1 parent 7dd1f5f commit 6a76cb8

13 files changed

+303
-185
lines changed

CommandLine/CommandLine.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,10 +71,10 @@ extension SwiftDraw.CommandLine {
7171
static func processImage(config: Configuration) -> Data? {
7272
switch config.format {
7373
case .swift:
74-
let code = CGTextRenderer.render(fileURL: config.input, size: config.size.renderSize)
74+
let code = CGTextRenderer.render(fileURL: config.input, size: config.size.renderSize, options: config.options)
7575
return code?.data(using: .utf8)
7676
case .jpeg, .pdf, .png:
77-
return SwiftDraw.Image(fileURL: config.input).flatMap { processImage($0, with: config) }
77+
return SwiftDraw.Image(fileURL: config.input, options: config.options).flatMap { processImage($0, with: config) }
7878
}
7979
}
8080

SwiftDraw/CGTextRenderer+Code.swift

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -35,12 +35,12 @@ public extension CGTextRenderer {
3535

3636
typealias Size = (width: Int, height: Int)
3737

38-
static func render(named name: String, in bundle: Bundle = Bundle.main, size: Size? = nil) -> String? {
38+
static func render(named name: String, in bundle: Bundle = Bundle.main, size: Size? = nil, options: Image.Options) -> String? {
3939
guard let url = bundle.url(forResource: name, withExtension: nil) else { return nil }
40-
return render(fileURL: url, size: size)
40+
return render(fileURL: url, size: size, options: options)
4141
}
4242

43-
static func render(fileURL: URL, size: Size? = nil) -> String? {
43+
static func render(fileURL: URL, size: Size? = nil, options: Image.Options) -> String? {
4444
guard let svg = try? DOM.SVG.parse(fileURL: fileURL) else {
4545
return nil
4646
}
@@ -54,13 +54,13 @@ public extension CGTextRenderer {
5454
.capitalized
5555
.replacingOccurrences(of: " ", with: "")
5656

57-
return cgCodeText(name: identifier, svg: svg, size: size)
57+
return cgCodeText(name: identifier, svg: svg, size: size, options: options)
5858
}
5959

60-
static func render(data: Data) throws -> String {
60+
static func render(data: Data, options: Image.Options) throws -> String {
6161
let svg = try DOM.SVG.parse(data: data)
6262
let size = makeSize(svg: svg, size: nil)
63-
return cgCodeText(name: "Image", svg: svg, size: size)
63+
return cgCodeText(name: "Image", svg: svg, size: size, options: options)
6464
}
6565

6666
static func renderPath(from svgPath: String) throws -> String {
@@ -76,11 +76,12 @@ public extension CGTextRenderer {
7676
return LayerTree.Size(LayerTree.Float(size.width), LayerTree.Float(size.height))
7777
}
7878

79-
private static func cgCodeText(name: String, svg: DOM.SVG, size: LayerTree.Size) -> String {
79+
private static func cgCodeText(name: String, svg: DOM.SVG, size: LayerTree.Size, options: Image.Options) -> String {
8080
let layer = LayerTree.Builder(svg: svg).makeLayer()
8181
let commandSize = LayerTree.Size(svg.width, svg.height)
8282
let generator = LayerTree.CommandGenerator(provider: CGTextProvider(),
83-
size: commandSize)
83+
size: commandSize,
84+
options: options)
8485

8586
let optimizer = LayerTree.CommandOptimizer<CGTextTypes>(options: [.skipRedundantState, .skipInitialSaveState])
8687
let commands = optimizer.optimizeCommands(

SwiftDraw/CommandLine.Arguments.swift

Lines changed: 47 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -33,53 +33,62 @@ import Foundation
3333

3434
extension CommandLine {
3535

36-
enum Modifier: String {
37-
case format
38-
case output
39-
case size
40-
case scale
36+
enum Modifier: String {
37+
case format
38+
case output
39+
case size
40+
case scale
41+
case hideUnsupportedFilters
4142

42-
static func parse(from string: String) -> Modifier? {
43-
guard string.hasPrefix("--") else {
44-
return nil
45-
}
46-
47-
return Modifier(rawValue: String(string.dropFirst(2)))
43+
var hasValue: Bool {
44+
self != .hideUnsupportedFilters
45+
}
4846
}
49-
}
5047

51-
static func parseModifiers(from args: [String]) throws -> [Modifier: String] {
52-
var args = args
53-
var modifiers = [Modifier: String]()
54-
while let pair = args.takePair() {
55-
if let modifier = Modifier.parse(from: pair.0), modifiers.keys.contains(modifier) == false {
56-
modifiers[modifier] = pair.1
57-
} else {
58-
throw Error.invalid
59-
}
60-
}
48+
static func parseModifiers(from args: [String]) throws -> [Modifier: String?] {
49+
var args = args
50+
var modifiers = [Modifier: String?]()
51+
while let pair = try args.takeModifier() {
52+
if modifiers.keys.contains(pair.0) == false {
53+
modifiers[pair.0] = pair.1
54+
} else {
55+
throw Error.invalid
56+
}
57+
}
6158

62-
guard args.isEmpty else {
63-
throw CommandLine.Error.invalid
64-
}
59+
guard args.isEmpty else {
60+
throw CommandLine.Error.invalid
61+
}
6562

66-
return modifiers
67-
}
63+
return modifiers
64+
}
6865

69-
public enum Error: Swift.Error {
70-
case invalid
71-
}
66+
public enum Error: Swift.Error {
67+
case invalid
68+
}
7269
}
7370

7471
private extension Array where Element == String {
7572

76-
mutating func takePair() -> (String, String)? {
77-
guard count > 1 else {
78-
return nil
79-
}
73+
mutating func takeModifier() throws -> (CommandLine.Modifier, String?)? {
74+
guard !isEmpty else {
75+
return nil
76+
}
8077

81-
let pair = (self[0], self[1])
82-
removeFirst(2)
83-
return pair
84-
}
78+
guard self[0].hasPrefix("--"),
79+
let modifier = CommandLine.Modifier(rawValue: String(self[0].dropFirst(2))) else {
80+
throw CommandLine.Error.invalid
81+
}
82+
83+
if modifier.hasValue {
84+
guard count > 1 else {
85+
throw CommandLine.Error.invalid
86+
}
87+
defer { removeFirst(2) }
88+
return (modifier, self[1])
89+
} else {
90+
removeFirst(1)
91+
return (modifier, nil)
92+
}
93+
}
8594
}

0 commit comments

Comments
 (0)