mirror of
https://github.com/RGBCube/serenity
synced 2025-05-31 07:48:11 +00:00
LibWeb: Generate function for what properties resolve percentages to
This is required by "determine the type of a calculation". https://www.w3.org/TR/css-values-4/#determine-the-type-of-a-calculation
This commit is contained in:
parent
be7093ab0d
commit
38f954cba5
2 changed files with 106 additions and 25 deletions
|
@ -176,6 +176,7 @@ enum class ValueType {
|
|||
};
|
||||
bool property_accepts_type(PropertyID, ValueType);
|
||||
bool property_accepts_identifier(PropertyID, ValueID);
|
||||
Optional<ValueType> property_resolves_percentages_relative_to(PropertyID);
|
||||
|
||||
// These perform range-checking, but are also safe to call with properties that don't accept that type. (They'll just return false.)
|
||||
bool property_accepts_angle(PropertyID, Angle const&);
|
||||
|
@ -718,6 +719,31 @@ bool property_accepts_identifier(PropertyID property_id, ValueID identifier)
|
|||
}
|
||||
}
|
||||
|
||||
Optional<ValueType> property_resolves_percentages_relative_to(PropertyID property_id)
|
||||
{
|
||||
switch (property_id) {
|
||||
)~~~"));
|
||||
|
||||
TRY(properties.try_for_each_member([&](auto& name, auto& value) -> ErrorOr<void> {
|
||||
VERIFY(value.is_object());
|
||||
if (auto resolved_type = value.as_object().get_deprecated_string("percentages-resolve-to"sv); resolved_type.has_value()) {
|
||||
auto property_generator = TRY(generator.fork());
|
||||
TRY(property_generator.set("name:titlecase", TRY(title_casify(name))));
|
||||
TRY(property_generator.set("resolved_type:titlecase", TRY(title_casify(resolved_type.value()))));
|
||||
TRY(property_generator.try_append(R"~~~(
|
||||
case PropertyID::@name:titlecase@:
|
||||
return ValueType::@resolved_type:titlecase@;
|
||||
)~~~"));
|
||||
}
|
||||
return {};
|
||||
}));
|
||||
|
||||
TRY(generator.try_append(R"~~~(
|
||||
default:
|
||||
return {};
|
||||
}
|
||||
}
|
||||
|
||||
size_t property_maximum_value_count(PropertyID property_id)
|
||||
{
|
||||
switch (property_id) {
|
||||
|
|
|
@ -236,6 +236,7 @@
|
|||
"right",
|
||||
"top"
|
||||
],
|
||||
"percentages-resolve-to": "length",
|
||||
"quirks": [
|
||||
"unitless-length"
|
||||
],
|
||||
|
@ -256,7 +257,8 @@
|
|||
"center",
|
||||
"left",
|
||||
"right"
|
||||
]
|
||||
],
|
||||
"percentages-resolve-to": "length"
|
||||
},
|
||||
"background-position-y": {
|
||||
"inherited": false,
|
||||
|
@ -270,7 +272,8 @@
|
|||
"center",
|
||||
"bottom",
|
||||
"top"
|
||||
]
|
||||
],
|
||||
"percentages-resolve-to": "length"
|
||||
},
|
||||
"background-repeat": {
|
||||
"affects-layout": false,
|
||||
|
@ -298,7 +301,8 @@
|
|||
"auto",
|
||||
"cover",
|
||||
"contain"
|
||||
]
|
||||
],
|
||||
"percentages-resolve-to": "length"
|
||||
},
|
||||
"border": {
|
||||
"inherited": false,
|
||||
|
@ -364,7 +368,8 @@
|
|||
"valid-types": [
|
||||
"length [0,∞]",
|
||||
"percentage [0,∞]"
|
||||
]
|
||||
],
|
||||
"percentages-resolve-to": "length"
|
||||
},
|
||||
"border-bottom-right-radius": {
|
||||
"affects-layout": false,
|
||||
|
@ -374,7 +379,8 @@
|
|||
"valid-types": [
|
||||
"length [0,∞]",
|
||||
"percentage [0,∞]"
|
||||
]
|
||||
],
|
||||
"percentages-resolve-to": "length"
|
||||
},
|
||||
"border-bottom-style": {
|
||||
"initial": "none",
|
||||
|
@ -542,7 +548,8 @@
|
|||
"valid-types": [
|
||||
"length [0,∞]",
|
||||
"percentage [0,∞]"
|
||||
]
|
||||
],
|
||||
"percentages-resolve-to": "length"
|
||||
},
|
||||
"border-top-right-radius": {
|
||||
"affects-layout": false,
|
||||
|
@ -552,7 +559,8 @@
|
|||
"valid-types": [
|
||||
"length [0,∞]",
|
||||
"percentage [0,∞]"
|
||||
]
|
||||
],
|
||||
"percentages-resolve-to": "length"
|
||||
},
|
||||
"border-top-style": {
|
||||
"initial": "none",
|
||||
|
@ -607,6 +615,7 @@
|
|||
"valid-identifiers": [
|
||||
"auto"
|
||||
],
|
||||
"percentages-resolve-to": "length",
|
||||
"quirks": [
|
||||
"unitless-length"
|
||||
]
|
||||
|
@ -673,7 +682,8 @@
|
|||
],
|
||||
"valid-identifiers": [
|
||||
"auto"
|
||||
]
|
||||
],
|
||||
"percentages-resolve-to": "length"
|
||||
},
|
||||
"content": {
|
||||
"inherited": false,
|
||||
|
@ -749,7 +759,8 @@
|
|||
"valid-types": [
|
||||
"number [-∞,∞]",
|
||||
"percentage [-∞,∞]"
|
||||
]
|
||||
],
|
||||
"percentages-resolve-to": "number"
|
||||
},
|
||||
"fill-rule": {
|
||||
"affects-layout": false,
|
||||
|
@ -782,7 +793,8 @@
|
|||
"valid-identifiers": [
|
||||
"auto",
|
||||
"content"
|
||||
]
|
||||
],
|
||||
"percentages-resolve-to": "length"
|
||||
},
|
||||
"flex-direction": {
|
||||
"inherited": false,
|
||||
|
@ -860,6 +872,7 @@
|
|||
"xx-small",
|
||||
"xxx-large"
|
||||
],
|
||||
"percentages-resolve-to": "length",
|
||||
"quirks": [
|
||||
"unitless-length"
|
||||
]
|
||||
|
@ -922,6 +935,7 @@
|
|||
"valid-identifiers": [
|
||||
"auto"
|
||||
],
|
||||
"percentages-resolve-to": "length",
|
||||
"longhands": [
|
||||
"row-gap",
|
||||
"column-gap"
|
||||
|
@ -976,7 +990,8 @@
|
|||
],
|
||||
"valid-identifiers": [
|
||||
"auto"
|
||||
]
|
||||
],
|
||||
"percentages-resolve-to": "length"
|
||||
},
|
||||
"grid-column-start": {
|
||||
"inherited": false,
|
||||
|
@ -999,6 +1014,7 @@
|
|||
"valid-identifiers": [
|
||||
"auto"
|
||||
],
|
||||
"percentages-resolve-to": "length",
|
||||
"longhands": [
|
||||
"grid-row-gap",
|
||||
"grid-column-gap"
|
||||
|
@ -1037,7 +1053,8 @@
|
|||
],
|
||||
"valid-identifiers": [
|
||||
"auto"
|
||||
]
|
||||
],
|
||||
"percentages-resolve-to": "length"
|
||||
},
|
||||
"grid-row-start": {
|
||||
"inherited": false,
|
||||
|
@ -1060,6 +1077,7 @@
|
|||
"percentage",
|
||||
"string"
|
||||
],
|
||||
"percentages-resolve-to": "length",
|
||||
"longhands": [
|
||||
"grid-template"
|
||||
]
|
||||
|
@ -1075,6 +1093,7 @@
|
|||
"percentage",
|
||||
"string"
|
||||
],
|
||||
"percentages-resolve-to": "length",
|
||||
"longhands": [
|
||||
"grid-template-areas",
|
||||
"grid-template-rows",
|
||||
|
@ -1101,7 +1120,8 @@
|
|||
"length",
|
||||
"percentage",
|
||||
"string"
|
||||
]
|
||||
],
|
||||
"percentages-resolve-to": "length"
|
||||
},
|
||||
"grid-auto-rows": {
|
||||
"inherited": false,
|
||||
|
@ -1113,7 +1133,8 @@
|
|||
"length",
|
||||
"percentage",
|
||||
"string"
|
||||
]
|
||||
],
|
||||
"percentages-resolve-to": "length"
|
||||
},
|
||||
"grid-template-columns": {
|
||||
"inherited": false,
|
||||
|
@ -1126,7 +1147,8 @@
|
|||
"length",
|
||||
"percentage",
|
||||
"string"
|
||||
]
|
||||
],
|
||||
"percentages-resolve-to": "length"
|
||||
},
|
||||
"grid-template-rows": {
|
||||
"inherited": false,
|
||||
|
@ -1139,7 +1161,8 @@
|
|||
"length",
|
||||
"percentage",
|
||||
"string"
|
||||
]
|
||||
],
|
||||
"percentages-resolve-to": "length"
|
||||
},
|
||||
"height": {
|
||||
"inherited": false,
|
||||
|
@ -1151,6 +1174,7 @@
|
|||
"valid-identifiers": [
|
||||
"auto"
|
||||
],
|
||||
"percentages-resolve-to": "length",
|
||||
"quirks": [
|
||||
"unitless-length"
|
||||
]
|
||||
|
@ -1179,7 +1203,8 @@
|
|||
],
|
||||
"valid-identifiers": [
|
||||
"auto"
|
||||
]
|
||||
],
|
||||
"percentages-resolve-to": "length"
|
||||
},
|
||||
"justify-content": {
|
||||
"inherited": false,
|
||||
|
@ -1198,6 +1223,7 @@
|
|||
"valid-identifiers": [
|
||||
"auto"
|
||||
],
|
||||
"percentages-resolve-to": "length",
|
||||
"quirks": [
|
||||
"unitless-length"
|
||||
]
|
||||
|
@ -1209,6 +1235,7 @@
|
|||
"length [-∞,∞]",
|
||||
"percentage [-∞,∞]"
|
||||
],
|
||||
"percentages-resolve-to": "length",
|
||||
"valid-identifiers": [
|
||||
"normal"
|
||||
],
|
||||
|
@ -1226,7 +1253,8 @@
|
|||
],
|
||||
"valid-identifiers": [
|
||||
"normal"
|
||||
]
|
||||
],
|
||||
"percentages-resolve-to": "length"
|
||||
},
|
||||
"list-style": {
|
||||
"inherited": true,
|
||||
|
@ -1279,6 +1307,7 @@
|
|||
"valid-identifiers": [
|
||||
"auto"
|
||||
],
|
||||
"percentages-resolve-to": "length",
|
||||
"quirks": [
|
||||
"unitless-length"
|
||||
]
|
||||
|
@ -1315,6 +1344,7 @@
|
|||
"valid-identifiers": [
|
||||
"auto"
|
||||
],
|
||||
"percentages-resolve-to": "length",
|
||||
"quirks": [
|
||||
"unitless-length"
|
||||
]
|
||||
|
@ -1351,6 +1381,7 @@
|
|||
"valid-identifiers": [
|
||||
"auto"
|
||||
],
|
||||
"percentages-resolve-to": "length",
|
||||
"quirks": [
|
||||
"unitless-length"
|
||||
]
|
||||
|
@ -1365,6 +1396,7 @@
|
|||
"valid-identifiers": [
|
||||
"auto"
|
||||
],
|
||||
"percentages-resolve-to": "length",
|
||||
"quirks": [
|
||||
"unitless-length"
|
||||
]
|
||||
|
@ -1379,6 +1411,7 @@
|
|||
"valid-identifiers": [
|
||||
"auto"
|
||||
],
|
||||
"percentages-resolve-to": "length",
|
||||
"quirks": [
|
||||
"unitless-length"
|
||||
]
|
||||
|
@ -1393,6 +1426,7 @@
|
|||
"valid-identifiers": [
|
||||
"none"
|
||||
],
|
||||
"percentages-resolve-to": "length",
|
||||
"quirks": [
|
||||
"unitless-length"
|
||||
]
|
||||
|
@ -1417,6 +1451,7 @@
|
|||
"min-content",
|
||||
"none"
|
||||
],
|
||||
"percentages-resolve-to": "length",
|
||||
"quirks": [
|
||||
"unitless-length"
|
||||
]
|
||||
|
@ -1432,6 +1467,7 @@
|
|||
"auto",
|
||||
"none"
|
||||
],
|
||||
"percentages-resolve-to": "length",
|
||||
"quirks": [
|
||||
"unitless-length"
|
||||
]
|
||||
|
@ -1457,6 +1493,7 @@
|
|||
"min-content",
|
||||
"none"
|
||||
],
|
||||
"percentages-resolve-to": "length",
|
||||
"quirks": [
|
||||
"unitless-length"
|
||||
]
|
||||
|
@ -1469,7 +1506,8 @@
|
|||
"valid-types": [
|
||||
"number [-∞,∞]",
|
||||
"percentage [-∞,∞]"
|
||||
]
|
||||
],
|
||||
"percentages-resolve-to": "number"
|
||||
},
|
||||
"order": {
|
||||
"inherited": false,
|
||||
|
@ -1561,6 +1599,7 @@
|
|||
"length [0,∞]",
|
||||
"percentage [0,∞]"
|
||||
],
|
||||
"percentages-resolve-to": "length",
|
||||
"quirks": [
|
||||
"unitless-length"
|
||||
]
|
||||
|
@ -1594,6 +1633,7 @@
|
|||
"length [0,∞]",
|
||||
"percentage [0,∞]"
|
||||
],
|
||||
"percentages-resolve-to": "length",
|
||||
"quirks": [
|
||||
"unitless-length"
|
||||
]
|
||||
|
@ -1627,6 +1667,7 @@
|
|||
"length [0,∞]",
|
||||
"percentage [0,∞]"
|
||||
],
|
||||
"percentages-resolve-to": "length",
|
||||
"quirks": [
|
||||
"unitless-length"
|
||||
]
|
||||
|
@ -1638,6 +1679,7 @@
|
|||
"length [0,∞]",
|
||||
"percentage [0,∞]"
|
||||
],
|
||||
"percentages-resolve-to": "length",
|
||||
"quirks": [
|
||||
"unitless-length"
|
||||
]
|
||||
|
@ -1649,6 +1691,7 @@
|
|||
"length [0,∞]",
|
||||
"percentage [0,∞]"
|
||||
],
|
||||
"percentages-resolve-to": "length",
|
||||
"quirks": [
|
||||
"unitless-length"
|
||||
]
|
||||
|
@ -1686,6 +1729,7 @@
|
|||
"valid-identifiers": [
|
||||
"auto"
|
||||
],
|
||||
"percentages-resolve-to": "length",
|
||||
"quirks": [
|
||||
"unitless-length"
|
||||
]
|
||||
|
@ -1699,7 +1743,8 @@
|
|||
],
|
||||
"valid-identifiers": [
|
||||
"auto"
|
||||
]
|
||||
],
|
||||
"percentages-resolve-to": "length"
|
||||
},
|
||||
"stroke": {
|
||||
"affects-layout": false,
|
||||
|
@ -1716,7 +1761,8 @@
|
|||
"valid-types": [
|
||||
"number [-∞,∞]",
|
||||
"percentage [-∞,∞]"
|
||||
]
|
||||
],
|
||||
"percentages-resolve-to": "number"
|
||||
},
|
||||
"stop-color": {
|
||||
"affects-layout": false,
|
||||
|
@ -1733,7 +1779,8 @@
|
|||
"valid-types": [
|
||||
"number [-∞,∞]",
|
||||
"percentage [-∞,∞]"
|
||||
]
|
||||
],
|
||||
"percentages-resolve-to": "number"
|
||||
},
|
||||
"stroke-width": {
|
||||
"affects-layout": false,
|
||||
|
@ -1743,7 +1790,8 @@
|
|||
"length [0,∞]",
|
||||
"number [0,∞]",
|
||||
"percentage [0,∞]"
|
||||
]
|
||||
],
|
||||
"percentages-resolve-to": "length"
|
||||
},
|
||||
"text-align": {
|
||||
"inherited": true,
|
||||
|
@ -1799,7 +1847,8 @@
|
|||
"valid-identifiers": [
|
||||
"auto",
|
||||
"from-font"
|
||||
]
|
||||
],
|
||||
"percentages-resolve-to": "length"
|
||||
},
|
||||
"text-indent": {
|
||||
"inherited": true,
|
||||
|
@ -1808,6 +1857,7 @@
|
|||
"length [-∞,∞]",
|
||||
"percentage [-∞,∞]"
|
||||
],
|
||||
"percentages-resolve-to": "length",
|
||||
"quirks": [
|
||||
"unitless-length"
|
||||
]
|
||||
|
@ -1844,6 +1894,7 @@
|
|||
"valid-identifiers": [
|
||||
"auto"
|
||||
],
|
||||
"percentages-resolve-to": "length",
|
||||
"quirks": [
|
||||
"unitless-length"
|
||||
]
|
||||
|
@ -1868,7 +1919,8 @@
|
|||
"left",
|
||||
"right",
|
||||
"top"
|
||||
]
|
||||
],
|
||||
"percentages-resolve-to": "length"
|
||||
},
|
||||
"transition-delay": {
|
||||
"inherited": false,
|
||||
|
@ -1897,6 +1949,7 @@
|
|||
"percentage [-∞,∞]",
|
||||
"vertical-align"
|
||||
],
|
||||
"percentages-resolve-to": "length",
|
||||
"quirks": [
|
||||
"unitless-length"
|
||||
]
|
||||
|
@ -1921,6 +1974,7 @@
|
|||
"max-content",
|
||||
"min-content"
|
||||
],
|
||||
"percentages-resolve-to": "length",
|
||||
"quirks": [
|
||||
"unitless-length"
|
||||
]
|
||||
|
@ -1942,6 +1996,7 @@
|
|||
"valid-identifiers": [
|
||||
"normal"
|
||||
],
|
||||
"percentages-resolve-to": "length",
|
||||
"quirks": [
|
||||
"unitless-length"
|
||||
]
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue