Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions CommandLine/CommandLine.swift
Original file line number Diff line number Diff line change
Expand Up @@ -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 <file.svg> [--format png | pdf | jpeg | swift | sfsymbol] [--size wxh] [--scale 1x | 2x | 3x]
Expand All @@ -83,17 +83,17 @@ 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

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.


Expand Down
7 changes: 4 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -95,17 +95,18 @@ 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

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
Expand Down
6 changes: 3 additions & 3 deletions SwiftDraw.podspec.json
Original file line number Diff line number Diff line change
@@ -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",
Expand All @@ -10,7 +10,7 @@
},
"source": {
"git": "https://github.com/swhitty/SwiftDraw.git",
"tag": "0.22.0"
"tag": "0.23.0"
},
"platforms": {
"ios": "13.0",
Expand Down Expand Up @@ -45,6 +45,6 @@
"OTHER_SWIFT_FLAGS": "-package-name SwiftDraw"
},
"dependencies": {
"SwiftDrawDOM": "~> 0.22.0"
"SwiftDrawDOM": "~> 0.23.0"
}
}
19 changes: 18 additions & 1 deletion SwiftDraw/Sources/CommandLine/CommandLine.Arguments.swift
Original file line number Diff line number Diff line change
Expand Up @@ -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?] {
Expand Down Expand Up @@ -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
}

Expand Down
11 changes: 7 additions & 4 deletions SwiftDraw/Sources/CommandLine/CommandLine.Configuration.swift
Original file line number Diff line number Diff line change
Expand Up @@ -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])
Expand Down Expand Up @@ -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()
}

Expand Down
6 changes: 3 additions & 3 deletions SwiftDraw/Sources/Renderer/Renderer.SFSymbol.swift
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down Expand Up @@ -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)")
}
}

Expand Down
55 changes: 31 additions & 24 deletions SwiftDraw/Tests/CommandLine/CommandLine.ArgumentsTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -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"]))
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -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"),
Expand Down
4 changes: 2 additions & 2 deletions SwiftDrawDOM.podspec.json
Original file line number Diff line number Diff line change
@@ -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",
Expand All @@ -10,7 +10,7 @@
},
"source": {
"git": "https://github.com/swhitty/SwiftDraw.git",
"tag": "0.22.0"
"tag": "0.23.0"
},
"platforms": {
"ios": "13.0",
Expand Down