-
1
-
2
-
3
-
4
-
5
-
6
-
7
-
8
-
9
-
10
-
11
-
12
-
13
-
14
-
15
-
16
-
17
-
18
-
19
-
20
-
21
-
22
-
23
-
24
-
25
-
26
-
27
-
28
-
29
-
30
-
31
-
32
-
33
-
34
-
35
-
36
-
37
-
38
-
39
-
40
-
41
-
42
-
43
-
44
-
45
-
46
import { roundTo } from "../../../math";
import { type Preferences } from "../../../preferences";
import { CSSStyle, CSSStyleValue, CSSStyleValueTypes } from "./CSSStyle";
export function serializeValue(
value: CSSStyleValue,
preferences: Readonly<Preferences>,
): string {
switch (value.type) {
case CSSStyleValueTypes.Color:
return serializeValue(value.value, preferences);
case CSSStyleValueTypes.Comment:
return `/* ${value.text} */`;
case CSSStyleValueTypes.FunctionCall:
return (
value.functionName + "(" + serializeValue(value.args, preferences) + ")"
);
case CSSStyleValueTypes.Keyword:
return value.ident;
case CSSStyleValueTypes.List:
return [value.head, ...value.tail]
.map((v) => serializeValue(v, preferences))
.join(value.separator);
case CSSStyleValueTypes.Literal:
return value.text;
case CSSStyleValueTypes.Number:
return (
roundTo(value.value, value.precision ?? preferences.decimalPlaces) +
(value.unit || "")
);
case CSSStyleValueTypes.String:
return `"${value.value.replace(/"/g, `\\"`)}"`;
case CSSStyleValueTypes.Unknown:
return value.text;
}
}
export function serializeStyle(
style: CSSStyle,
preferences: Readonly<Preferences>,
): string {
return (
style.propertyName + ": " + serializeValue(style.value, preferences) + ";"
);
}