Skip to content

Commit 850dbfd

Browse files
committed
style
1 parent 3fdfba2 commit 850dbfd

File tree

11 files changed

+5292
-402
lines changed

11 files changed

+5292
-402
lines changed

Codegen/.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,3 +8,4 @@ DerivedData/
88
.netrc
99
.swiftpm
1010
node_modules
11+
data.json

Codegen/Sources/SRTCodegen/Def.swift

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,26 @@ struct Def: Codable {
44
var tagNames: [String]
55
var voidElements: [String]
66
var elementAttributes: [String: [String]]
7+
var cssProperties: [String]
78

89
mutating func fix() {
910
tagNames.removeAll { (tagName) in
1011
voidElements.contains(tagName)
1112
}
13+
14+
self.cssProperties = {
15+
var css: OrderedSet<String> = []
16+
17+
for x in cssProperties {
18+
if !x.hasPrefix("-") {
19+
css.remove("-" + x)
20+
}
21+
22+
css.append(x)
23+
}
24+
25+
return css.elements
26+
}()
1227
}
1328

1429
var allAttributes: [String] {

Codegen/Sources/SRTCodegen/Renderers/AttributeRenderer.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,8 @@ struct AttributeRenderer: Renderer {
2020
let symbol = attribute.kebabToCamel()
2121

2222
return """
23-
public func \(renderIdentifier(symbol))(_ x: String) -> Attributes {
24-
set("\(attribute)", to: x)
23+
public func \(renderIdentifier(symbol))(_ value: String) -> Attributes {
24+
set("\(attribute)", to: value)
2525
}
2626
2727
"""
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
import Foundation
2+
import CodegenKit
3+
4+
struct StyleRenderer: Renderer {
5+
var def: Def
6+
7+
func isTarget(file: URL) -> Bool {
8+
file.lastPathComponent == "Style.swift"
9+
}
10+
11+
func render(template: inout CodeTemplateModule.CodeTemplate, file: URL, on runner: CodegenKit.CodegenRunner) throws {
12+
let code = def.cssProperties.map { (attribute) in
13+
renderSetter(attribute: attribute)
14+
}.joined(separator: "\n")
15+
16+
template["setters"] = code
17+
}
18+
19+
private func renderSetter(attribute: String) -> String {
20+
let symbol = attribute.kebabToCamel()
21+
22+
return """
23+
public func \(renderIdentifier(symbol))(_ value: String) -> Style {
24+
set("\(attribute)", to: value)
25+
}
26+
27+
"""
28+
}
29+
}

Codegen/Sources/SRTCodegen/SRTCodegen.swift

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,8 @@ public struct SRTCodegen {
2222
renderers: [
2323
HTMLTagRenderer(def: def),
2424
HTMLVoidTagRenderer(def: def),
25-
AttributeRenderer(def: def)
25+
AttributeRenderer(def: def),
26+
StyleRenderer(def: def)
2627
]
2728
)
2829

Codegen/Sources/SRTCodegen/Utils.swift

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import Foundation
33
public let keywords = [
44
"as",
55
"class",
6+
"continue",
67
"default",
78
"defer",
89
"for",
@@ -21,6 +22,7 @@ func renderIdentifier(_ text: String) -> String {
2122
extension String {
2223
func kebabToCamel() -> String {
2324
let strs = self.components(separatedBy: "-")
25+
.filter { !$0.isEmpty }
2426

2527
var result = ""
2628
for (index, str) in strs.enumerated() {

Codegen/index.mjs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
import { htmlTagNames } from "html-tag-names";
22
import { htmlVoidElements } from "html-void-elements";
33
import { htmlElementAttributes } from "html-element-attributes";
4+
import * as kcpModule from "known-css-properties";
45

56
const json = {
67
"tagNames": htmlTagNames,
78
"voidElements": htmlVoidElements,
8-
"elementAttributes": htmlElementAttributes
9+
"elementAttributes": htmlElementAttributes,
10+
"cssProperties": kcpModule.all
911
};
1012

1113
const string = JSON.stringify(json, undefined, 2);

Codegen/package-lock.json

Lines changed: 7 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Codegen/package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
"dependencies": {
1212
"html-element-attributes": "^3.4.0",
1313
"html-tag-names": "^2.1.0",
14-
"html-void-elements": "^3.0.0"
14+
"html-void-elements": "^3.0.0",
15+
"known-css-properties": "^0.30.0"
1516
}
1617
}

0 commit comments

Comments
 (0)