Meta/CodeGenerators+LibWeb: Add support for 'easing-function' CSS values

This commit makes it possible to let properties accept easing functions
as values, which will be used in a later commit to implement
animation-timing-function.
This commit is contained in:
Ali Mohammad Pur 2023-07-06 16:54:15 +03:30 committed by Andreas Kling
parent dd073b2711
commit efa55673cd
Notes: sideshowbarker 2024-07-17 01:23:08 +09:00
3 changed files with 13 additions and 1 deletions

View file

@ -20,7 +20,10 @@ ErrorOr<void> generate_bounds_checking_function(JsonObject& properties, SourceGe
static bool type_name_is_enum(StringView type_name)
{
return !AK::first_is_one_of(type_name, "angle"sv, "color"sv, "custom-ident"sv, "frequency"sv, "image"sv, "integer"sv, "length"sv, "number"sv, "paint"sv, "percentage"sv, "ratio"sv, "rect"sv, "resolution"sv, "string"sv, "time"sv, "url"sv);
return !AK::first_is_one_of(type_name,
"angle"sv, "color"sv, "custom-ident"sv, "easing-function"sv, "frequency"sv, "image"sv,
"integer"sv, "length"sv, "number"sv, "paint"sv, "percentage"sv, "ratio"sv, "rect"sv,
"resolution"sv, "string"sv, "time"sv, "url"sv);
}
ErrorOr<int> serenity_main(Main::Arguments arguments)
@ -158,6 +161,7 @@ enum class ValueType {
Angle,
Color,
CustomIdent,
EasingFunction,
FilterValueList,
Frequency,
Image,
@ -614,6 +618,8 @@ bool property_accepts_type(PropertyID property_id, ValueType value_type)
TRY(property_generator.try_appendln(" case ValueType::Color:"));
} else if (type_name == "custom-ident") {
TRY(property_generator.try_appendln(" case ValueType::CustomIdent:"));
} else if (type_name == "easing-function") {
TRY(property_generator.try_appendln(" case ValueType::EasingFunction:"));
} else if (type_name == "frequency") {
TRY(property_generator.try_appendln(" case ValueType::Frequency:"));
} else if (type_name == "image") {

View file

@ -33,6 +33,7 @@ Optional<CSSNumericType::BaseType> CSSNumericType::base_type_from_value_type(Val
case ValueType::Color:
case ValueType::CustomIdent:
case ValueType::EasingFunction:
case ValueType::FilterValueList:
case ValueType::Image:
case ValueType::Integer:

View file

@ -8329,6 +8329,11 @@ ErrorOr<Parser::PropertyAndValue> Parser::parse_css_value_for_properties(Readonl
auto& peek_token = tokens.peek_token();
if (auto property = any_property_accepts_type(property_ids, ValueType::EasingFunction); property.has_value()) {
if (auto maybe_easing_function = TRY(parse_easing_value(tokens)))
return PropertyAndValue { *property, maybe_easing_function };
}
if (peek_token.is(Token::Type::Ident)) {
// NOTE: We do not try to parse "CSS-wide keywords" here. https://www.w3.org/TR/css-values-4/#common-keywords
// These are only valid on their own, and so should be parsed directly in `parse_css_value()`.