Skip to content

Commit bf39ae6

Browse files
committed
Custom filenames pattern
Closes #27
1 parent 7e09312 commit bf39ae6

File tree

15 files changed

+284
-50
lines changed

15 files changed

+284
-50
lines changed

CONFIG.md

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,19 +18,28 @@ figma:
1818

1919
# [optional] Common export parameters
2020
common:
21+
# [optional]
2122
colors:
22-
# RegExp pattern for color name validation before exporting
23+
# [optional] RegExp pattern for color name validation before exporting
2324
nameValidateRegexp: '^[a-zA-Z_]+$' # RegExp pattern for: background, background_primary, widget_primary_background
25+
# [optional] RegExp pattern for replacing. Supports only $n
26+
nameReplaceRegexp: 'color_$1'
27+
# [optional]
2428
icons:
25-
# Name of the Figma's frame where icons components are located
29+
# [optional] Name of the Figma's frame where icons components are located
2630
figmaFrameName: Colors
27-
# RegExp pattern for icon name validation before exporting
31+
# [optional] RegExp pattern for icon name validation before exporting
2832
nameValidateRegexp: '^(ic)_(\d\d)_([a-z0-9_]+)$' # RegExp pattern for: ic_24_icon_name, ic_24_icon
33+
# [optional] RegExp pattern for replacing. Supports only $n
34+
nameReplaceRegexp: 'icon_$2_$1'
35+
# [optional]
2936
images:
30-
# Name of the Figma's frame where image components are located
37+
# [optional]Name of the Figma's frame where image components are located
3138
figmaFrameName: Illustrations
32-
# RegExp pattern for image name validation before exporting
39+
# [optional] RegExp pattern for image name validation before exporting
3340
nameValidateRegexp: '^(img)_([a-z0-9_]+)$' # RegExp pattern for: img_image_name
41+
# [optional] RegExp pattern for replacing. Supports only $n
42+
nameReplaceRegexp: 'image_$2'
3443

3544
# [optional] iOS export parameters
3645
ios:

Examples/Example/figma-export.yaml

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,18 @@ figma:
55

66
# [optional] Common export parameters
77
common:
8+
# [optional]
89
colors:
9-
# RegExp pattern for color name validation before exporting
10+
# [optional] RegExp pattern for color name validation before exporting. Use to validate color name in Figma file
1011
nameValidateRegexp: '^[a-zA-Z_]+$' # RegExp pattern for: background, background_primary, widget_primary_background
12+
# [optional]
1113
icons:
12-
# RegExp pattern for icon name validation before exporting
14+
# [optional] RegExp pattern for icon name validation before exporting. Use to validate icon name in Figma file
1315
nameValidateRegexp: '^(ic)_(\d\d)_([a-z0-9_]+)$' # RegExp pattern for: ic_24_icon_name, ic_24_icon
16+
# [optional]
1417
images:
15-
# RegExp pattern for image name validation before exporting
16-
nameValidateRegexp: '^(img)_([a-z0-9_]+)$' # RegExp pattern for: img_image_name
18+
# [optional] RegExp pattern for image name validation before exporting. Use to validate image name in Figma file
19+
nameValidateRegexp: '^(img)_([a-z0-9_]+)$' # RegExp pattern for: img_zero_empty, img_widget_large
1720

1821
# [optional] iOS export parameters
1922
ios:
@@ -64,4 +67,3 @@ ios:
6467
generateLabels: true
6568
# Path to directory where to place UILabel for each text style (font) (Requred if generateLabels = true)
6669
labelsDirectory: "./UIComponents/Source/"
67-

Package.swift

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,12 @@ let package = Package(
5757
dependencies: ["FigmaExportCore"]
5858
),
5959

60+
// MARK: - Tests
61+
62+
.testTarget(
63+
name: "FigmaExportTests",
64+
dependencies: ["FigmaExport"]
65+
),
6066
.testTarget(
6167
name: "FigmaExportCoreTests",
6268
dependencies: ["FigmaExportCore"]

Sources/FigmaExport/Helpers/ErrorGroup.swift

Lines changed: 0 additions & 10 deletions
This file was deleted.

Sources/FigmaExport/Input/Params.swift

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
11
import Foundation
2+
import FigmaExportCore
3+
4+
extension NameStyle: Decodable {}
25

36
struct Params: Decodable {
47

@@ -10,28 +13,26 @@ struct Params: Decodable {
1013
struct Common: Decodable {
1114
struct Colors: Decodable {
1215
let nameValidateRegexp: String?
16+
let nameReplaceRegexp: String?
1317
}
1418

1519
struct Icons: Decodable {
1620
let nameValidateRegexp: String?
1721
let figmaFrameName: String?
22+
let nameReplaceRegexp: String?
1823
}
1924

2025
struct Images: Decodable {
2126
let nameValidateRegexp: String?
2227
let figmaFrameName: String?
28+
let nameReplaceRegexp: String?
2329
}
2430

2531
let colors: Colors?
2632
let icons: Icons?
2733
let images: Images?
2834
}
2935

30-
enum NameStyle: String, Decodable {
31-
case camelCase = "camelCase"
32-
case snakeCase = "snake_case"
33-
}
34-
3536
enum VectorFormat: String, Decodable {
3637
case pdf
3738
case svg

Sources/FigmaExport/Subcommands/ExportColors.swift

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ extension FigmaExportCommand {
4040
let processor = ColorsProcessor(
4141
platform: .ios,
4242
nameValidateRegexp: params.common?.colors?.nameValidateRegexp,
43+
nameReplaceRegexp: params.common?.colors?.nameReplaceRegexp,
4344
nameStyle: params.ios?.colors.nameStyle
4445
)
4546
let colorPairs = try processor.process(light: colors.light, dark: colors.dark).get()
@@ -55,6 +56,7 @@ extension FigmaExportCommand {
5556
let processor = ColorsProcessor(
5657
platform: .android,
5758
nameValidateRegexp: params.common?.colors?.nameValidateRegexp,
59+
nameReplaceRegexp: params.common?.colors?.nameReplaceRegexp,
5860
nameStyle: .snakeCase
5961
)
6062
let colorPairs = try processor.process(light: colors.light, dark: colors.dark).get()

Sources/FigmaExport/Subcommands/ExportIcons.swift

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ extension FigmaExportCommand {
5757
let processor = ImagesProcessor(
5858
platform: .ios,
5959
nameValidateRegexp: params.common?.icons?.nameValidateRegexp,
60+
nameReplaceRegexp: params.common?.icons?.nameReplaceRegexp,
6061
nameStyle: params.ios?.icons.nameStyle
6162
)
6263
let icons = try processor.process(assets: images).get()
@@ -112,6 +113,7 @@ extension FigmaExportCommand {
112113
let processor = ImagesProcessor(
113114
platform: .android,
114115
nameValidateRegexp: params.common?.icons?.nameValidateRegexp,
116+
nameReplaceRegexp: params.common?.icons?.nameReplaceRegexp,
115117
nameStyle: .snakeCase
116118
)
117119
let icons = try processor.process(light: images, dark: nil).get()

Sources/FigmaExport/Subcommands/ExportImages.swift

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ extension FigmaExportCommand {
5757
let processor = ImagesProcessor(
5858
platform: .ios,
5959
nameValidateRegexp: params.common?.images?.nameValidateRegexp,
60+
nameReplaceRegexp: params.common?.images?.nameReplaceRegexp,
6061
nameStyle: params.ios?.images.nameStyle
6162
)
6263
let images = try processor.process(light: imagesTuple.light, dark: imagesTuple.dark).get()
@@ -109,6 +110,7 @@ extension FigmaExportCommand {
109110
let processor = ImagesProcessor(
110111
platform: .android,
111112
nameValidateRegexp: params.common?.images?.nameValidateRegexp,
113+
nameReplaceRegexp: params.common?.images?.nameReplaceRegexp,
112114
nameStyle: .snakeCase
113115
)
114116
let images = try processor.process(light: imagesTuple.light, dark: imagesTuple.dark).get()
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import Foundation
2+
3+
public struct ErrorGroup: LocalizedError {
4+
5+
public var all: [Error] = []
6+
public var errorDescription: String? {
7+
all.compactMap {
8+
($0 as? LocalizedError)?.errorDescription ?? $0.localizedDescription
9+
}.joined(separator: "\n")
10+
}
11+
12+
public init(all: [Error] = []) {
13+
self.all = all
14+
}
15+
}

Sources/FigmaExport/Processor/StringCase.swift renamed to Sources/FigmaExportCore/Extensions/StringCase.swift

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import Foundation
22

3-
public extension String {
3+
extension String {
44
/// A Boolean value indicating whether this string is considered snake case.
55
///
66
/// For example, the following strings are all snake case:
@@ -71,7 +71,8 @@ public extension String {
7171
for character in Array<Character>(self) {
7272
if results.isEmpty && (character.isLetter || character.isNumber) {
7373
results.append(String(character))
74-
} else if (lastCharacter.isLetter || lastCharacter.isNumber) && character.isLowercase {
74+
} else if ((lastCharacter.isLetter || lastCharacter.isNumber) && character.isLowercase) ||
75+
(lastCharacter.isNumber && character.isNumber) {
7576
results[results.count - 1] = results[results.count - 1] + String(character)
7677
} else if (character.isLetter || character.isNumber) {
7778
results.append(String(character))

0 commit comments

Comments
 (0)