diff --git a/CommandLine/CommandLine.swift b/CommandLine/CommandLine.swift index cbc3793..0d720fd 100644 --- a/CommandLine/CommandLine.swift +++ b/CommandLine/CommandLine.swift @@ -68,7 +68,7 @@ extension SwiftDraw.CommandLine { static func printHelp() { print("") print(""" -swiftdraw, version 0.22.0 +swiftdraw, version 0.23.0 copyright (c) 2025 Simon Whitty usage: swiftdraw [--format png | pdf | jpeg | swift | sfsymbol] [--size wxh] [--scale 1x | 2x | 3x] @@ -83,7 +83,7 @@ Options: --precision maximum number of decimal places --output optional path of output file - --hideUnsupportedFilters hide elements with unsupported filters. + --hide-unsupported-filters hide elements with unsupported filters. Available keys for --format swift: --api api of generated code: appkit | uikit @@ -91,9 +91,9 @@ Available keys for --format swift: Available keys for --format sfsymbol: --insets alignment of regular variant: top,left,bottom,right | auto --ultralight svg file of ultralight variant - --ultralightInsets alignment of ultralight variant: top,left,bottom,right | auto + --ultralight-insets alignment of ultralight variant: top,left,bottom,right | auto --black svg file of black variant - --blackInsets alignment of black variant: top,left,bottom,right | auto + --black-insets alignment of black variant: top,left,bottom,right | auto --legacy use the original, less precise alignment logic from earlier swiftdraw versions. diff --git a/README.md b/README.md index e6d8b85..dd576a2 100644 --- a/README.md +++ b/README.md @@ -95,7 +95,7 @@ Options: --precision maximum number of decimal places --output optional path of output file - --hideUnsupportedFilters hide elements with unsupported filters. + --hide-unsupported-filters hide elements with unsupported filters. Available keys for --format swift: --api api of generated code: appkit | uikit @@ -103,9 +103,10 @@ Available keys for --format swift: Available keys for --format sfsymbol: --insets alignment of regular variant: top,left,bottom,right | auto --ultralight svg file of ultralight variant - --ultralightInsets alignment of ultralight variant: top,left,bottom,right | auto + --ultralight-insets alignment of ultralight variant: top,left,bottom,right | auto --black svg file of black variant - --blackInsets alignment of black variant: top,left,bottom,right | auto + --black-insets alignment of black variant: top,left,bottom,right | auto + --legacy use the original, less precise alignment logic from earlier swiftdraw versions. ``` ```bash diff --git a/SwiftDraw.podspec.json b/SwiftDraw.podspec.json index 6c9e187..4339a60 100644 --- a/SwiftDraw.podspec.json +++ b/SwiftDraw.podspec.json @@ -1,6 +1,6 @@ { "name": "SwiftDraw", - "version": "0.22.0", + "version": "0.23.0", "summary": "A Swift library that adds support for SVG files to UIImage and NSImage.", "homepage": "https://github.com/swhitty/SwiftDraw", "authors": "Simon Whitty", @@ -10,7 +10,7 @@ }, "source": { "git": "https://github.com/swhitty/SwiftDraw.git", - "tag": "0.22.0" + "tag": "0.23.0" }, "platforms": { "ios": "13.0", @@ -45,6 +45,6 @@ "OTHER_SWIFT_FLAGS": "-package-name SwiftDraw" }, "dependencies": { - "SwiftDrawDOM": "~> 0.22.0" + "SwiftDrawDOM": "~> 0.23.0" } } diff --git a/SwiftDraw/Sources/CommandLine/CommandLine.Arguments.swift b/SwiftDraw/Sources/CommandLine/CommandLine.Arguments.swift index 6b81756..18b953b 100644 --- a/SwiftDraw/Sources/CommandLine/CommandLine.Arguments.swift +++ b/SwiftDraw/Sources/CommandLine/CommandLine.Arguments.swift @@ -56,6 +56,23 @@ extension CommandLine { return true } } + + static func make(from text: String) -> Self? { + if let modifier = Modifier(rawValue: text) { + return modifier + } + + switch text { + case "ultralight-insets": + return .ultralightInsets + case "black-insets": + return .blackInsets + case "hide-unsupported-filters": + return .hideUnsupportedFilters + default: + return nil + } + } } static func parseModifiers(from args: [String]) throws -> [Modifier: String?] { @@ -91,7 +108,7 @@ private extension Array where Element == String { } guard self[0].hasPrefix("--"), - let modifier = CommandLine.Modifier(rawValue: String(self[0].dropFirst(2))) else { + let modifier = CommandLine.Modifier.make(from: String(self[0].dropFirst(2))) else { throw CommandLine.Error.invalid } diff --git a/SwiftDraw/Sources/CommandLine/CommandLine.Configuration.swift b/SwiftDraw/Sources/CommandLine/CommandLine.Configuration.swift index d68163a..d139850 100644 --- a/SwiftDraw/Sources/CommandLine/CommandLine.Configuration.swift +++ b/SwiftDraw/Sources/CommandLine/CommandLine.Configuration.swift @@ -110,7 +110,7 @@ extension CommandLine { let size = try parseSize(from: modifiers[.size]) let scale = try parseScale(from: modifiers[.scale]) let precision = try parsePrecision(from: modifiers[.precision]) - let insets = try parseInsets(from: modifiers[.insets]) + let insets = try parseInsets(from: modifiers[.insets]) ?? Insets() let api = try parseAPI(from: modifiers[.api]) let ultralight = try parseFileURL(file: modifiers[.ultralight], within: baseDirectory) let ultralightInsets = try parseInsets(from: modifiers[.ultralightInsets]) @@ -208,10 +208,13 @@ extension CommandLine { return api } - static func parseInsets(from value: String??) throws -> Insets { + static func parseInsets(from value: String??) throws -> Insets? { guard let value = value, - let value = value, - value != "auto" else { + let value = value else { + return nil + } + + guard value != "auto" else { return Insets() } diff --git a/SwiftDraw/Sources/Renderer/Renderer.SFSymbol.swift b/SwiftDraw/Sources/Renderer/Renderer.SFSymbol.swift index ad7664a..436a4e9 100644 --- a/SwiftDraw/Sources/Renderer/Renderer.SFSymbol.swift +++ b/SwiftDraw/Sources/Renderer/Renderer.SFSymbol.swift @@ -144,7 +144,7 @@ extension SFSymbolRenderer { } func makeBounds(svg: DOM.SVG, isRegularSVG: Bool = true, auto: LayerTree.Rect, for variant: Variant) throws -> LayerTree.Rect { - let insets = getInsets(for: isRegularSVG ? .regular : variant) + let insets = getInsets(for: variant) let width = LayerTree.Float(svg.width) let height = LayerTree.Float(svg.height) let top = insets.top ?? Double(auto.minY) @@ -337,9 +337,9 @@ extension SFSymbolRenderer { case .regular: print("Alignment: --insets \(top),\(left),\(bottom),\(right)") case .ultralight: - print("Alignment: --ultralightInsets \(top),\(left),\(bottom),\(right)") + print("Alignment: --ultralight-insets \(top),\(left),\(bottom),\(right)") case .black: - print("Alignment: --blackInsets \(top),\(left),\(bottom),\(right)") + print("Alignment: --black-insets \(top),\(left),\(bottom),\(right)") } } diff --git a/SwiftDraw/Tests/CommandLine/CommandLine.ArgumentsTests.swift b/SwiftDraw/Tests/CommandLine/CommandLine.ArgumentsTests.swift index bdd9301..756e66f 100644 --- a/SwiftDraw/Tests/CommandLine/CommandLine.ArgumentsTests.swift +++ b/SwiftDraw/Tests/CommandLine/CommandLine.ArgumentsTests.swift @@ -34,29 +34,36 @@ import XCTest final class CommandLineArgumentsTests: XCTestCase { - func testParseModifiers() throws { - let modifiers = try CommandLine.parseModifiers(from: ["--format", "some", "--output", "more", "--scale", "magnify", "--size", "huge"]) - XCTAssertEqual(modifiers, [.format: "some", .output: "more", .scale: "magnify", .size: "huge"]) - } - - func testParseModifiersThrowsForOddPairs() { - XCTAssertThrowsError(try CommandLine.parseModifiers(from: ["--format"])) - XCTAssertThrowsError(try CommandLine.parseModifiers(from: ["--format", "png", "--output"])) - } - - func testParseModifiersThrowsForDuplicateModifiers() { - XCTAssertThrowsError(try CommandLine.parseModifiers(from: ["--format", "png", "--format", "jpg"])) - XCTAssertThrowsError(try CommandLine.parseModifiers(from: ["--format", "png", "--output", "more", "--output", "evenmore"])) - } - - func testParseModifiersThrowsForUnknownModifiers() { - XCTAssertThrowsError(try CommandLine.parseModifiers(from: ["--unknown", "png"])) - XCTAssertThrowsError(try CommandLine.parseModifiers(from: ["--format", "png", "--unknown", "more"])) - } - - func testParseModifiersThrowsForMissingPrefix() { - XCTAssertThrowsError(try CommandLine.parseModifiers(from: ["format", "png"])) - XCTAssertThrowsError(try CommandLine.parseModifiers(from: ["--format", "png", "output", "more"])) - } + func testParseModifiers() throws { + var modifiers = try CommandLine.parseModifiers(from: ["--format", "some", "--output", "more", "--scale", "magnify", "--size", "huge"]) + XCTAssertEqual(modifiers, [.format: "some", .output: "more", .scale: "magnify", .size: "huge"]) + + modifiers = try CommandLine.parseModifiers(from: ["--ultralightInsets", "a", "--blackInsets", "b", "--hideUnsupportedFilters", "--legacy"]) + XCTAssertEqual(modifiers, [.ultralightInsets: "a", .blackInsets: "b", .hideUnsupportedFilters: nil, .legacy: nil]) + + modifiers = try CommandLine.parseModifiers(from: ["--ultralight-insets", "a", "--black-insets", "b", "--hide-unsupported-filters", "--legacy"]) + XCTAssertEqual(modifiers, [.ultralightInsets: "a", .blackInsets: "b", .hideUnsupportedFilters: nil, .legacy: nil]) + + } + + func testParseModifiersThrowsForOddPairs() { + XCTAssertThrowsError(try CommandLine.parseModifiers(from: ["--format"])) + XCTAssertThrowsError(try CommandLine.parseModifiers(from: ["--format", "png", "--output"])) + } + + func testParseModifiersThrowsForDuplicateModifiers() { + XCTAssertThrowsError(try CommandLine.parseModifiers(from: ["--format", "png", "--format", "jpg"])) + XCTAssertThrowsError(try CommandLine.parseModifiers(from: ["--format", "png", "--output", "more", "--output", "evenmore"])) + } + + func testParseModifiersThrowsForUnknownModifiers() { + XCTAssertThrowsError(try CommandLine.parseModifiers(from: ["--unknown", "png"])) + XCTAssertThrowsError(try CommandLine.parseModifiers(from: ["--format", "png", "--unknown", "more"])) + } + + func testParseModifiersThrowsForMissingPrefix() { + XCTAssertThrowsError(try CommandLine.parseModifiers(from: ["format", "png"])) + XCTAssertThrowsError(try CommandLine.parseModifiers(from: ["--format", "png", "output", "more"])) + } } diff --git a/SwiftDraw/Tests/CommandLine/CommandLine.ConfigurationTests.swift b/SwiftDraw/Tests/CommandLine/CommandLine.ConfigurationTests.swift index 9393122..b269844 100644 --- a/SwiftDraw/Tests/CommandLine/CommandLine.ConfigurationTests.swift +++ b/SwiftDraw/Tests/CommandLine/CommandLine.ConfigurationTests.swift @@ -90,9 +90,8 @@ final class CommandLineConfigurationTests: XCTestCase { } func testParseInsets() throws { - XCTAssertEqual( - try CommandLine.parseInsets(from: nil), - .init() + XCTAssertNil( + try CommandLine.parseInsets(from: nil) ) XCTAssertEqual( try CommandLine.parseInsets(from: "auto"), diff --git a/SwiftDrawDOM.podspec.json b/SwiftDrawDOM.podspec.json index 597a7a6..dc28b79 100644 --- a/SwiftDrawDOM.podspec.json +++ b/SwiftDrawDOM.podspec.json @@ -1,6 +1,6 @@ { "name": "SwiftDrawDOM", - "version": "0.22.0", + "version": "0.23.0", "summary": "A Swift library that adds support for SVG files to UIImage and NSImage.", "homepage": "https://github.com/swhitty/SwiftDraw", "authors": "Simon Whitty", @@ -10,7 +10,7 @@ }, "source": { "git": "https://github.com/swhitty/SwiftDraw.git", - "tag": "0.22.0" + "tag": "0.23.0" }, "platforms": { "ios": "13.0",