1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-31 07:18:11 +00:00

LibWeb: Use CSS::Number for Token numeric values

This commit is contained in:
Sam Atkins 2022-03-21 21:01:27 +00:00 committed by Andreas Kling
parent e8ab2dab11
commit fe372cd073
5 changed files with 53 additions and 85 deletions

View file

@ -1233,14 +1233,14 @@ Optional<MediaFeatureValue> Parser::parse_media_feature_value(MediaFeatureID med
// Boolean (<mq-boolean> in the spec: a 1 or 0)
if (media_feature_accepts_type(media_feature, MediaFeatureValueType::Boolean)) {
if (first.is(Token::Type::Number) && first.token().number_type() == Token::NumberType::Integer
if (first.is(Token::Type::Number) && first.token().number().is_integer()
&& (first.token().number_value() == 0 || first.token().number_value() == 1))
return MediaFeatureValue(first.token().number_value());
}
// Integer
if (media_feature_accepts_type(media_feature, MediaFeatureValueType::Integer)) {
if (first.is(Token::Type::Number) && first.token().number_type() == Token::NumberType::Integer)
if (first.is(Token::Type::Number) && first.token().number().is_integer())
return MediaFeatureValue(first.token().number_value());
}
@ -2392,7 +2392,7 @@ RefPtr<StyleValue> Parser::parse_numeric_value(StyleComponentValueRule const& co
{
if (component_value.is(Token::Type::Number)) {
auto number = component_value.token();
if (number.number_type() == Token::NumberType::Integer) {
if (number.number().is_integer()) {
return NumericStyleValue::create_integer(number.to_integer());
} else {
return NumericStyleValue::create_float(number.number_value());
@ -2462,9 +2462,9 @@ Optional<Color> Parser::parse_color(StyleComponentValueRule const& component_val
auto g_val = params[1];
auto b_val = params[2];
if (r_val.is(Token::NumberType::Integer)
&& g_val.is(Token::NumberType::Integer)
&& b_val.is(Token::NumberType::Integer)) {
if (r_val.is(Token::Type::Number) && r_val.number().is_integer()
&& g_val.is(Token::Type::Number) && g_val.number().is_integer()
&& b_val.is(Token::Type::Number) && b_val.number().is_integer()) {
auto r = r_val.to_integer();
auto g = g_val.to_integer();
@ -2490,9 +2490,9 @@ Optional<Color> Parser::parse_color(StyleComponentValueRule const& component_val
auto b_val = params[2];
auto a_val = params[3];
if (r_val.is(Token::NumberType::Integer)
&& g_val.is(Token::NumberType::Integer)
&& b_val.is(Token::NumberType::Integer)
if (r_val.is(Token::Type::Number) && r_val.number().is_integer()
&& g_val.is(Token::Type::Number) && g_val.number().is_integer()
&& b_val.is(Token::Type::Number) && b_val.number().is_integer()
&& a_val.is(Token::Type::Number)) {
auto r = r_val.to_integer();
@ -2571,7 +2571,7 @@ Optional<Color> Parser::parse_color(StyleComponentValueRule const& component_val
if (cv.is(Token::Type::Number) || cv.is(Token::Type::Dimension)) {
// 1. If cvs type flag is not "integer", return an error.
// This means that values that happen to use scientific notation, e.g., 5e5e5e, will fail to parse.
if (cv.token().number_type() != Token::NumberType::Integer)
if (!cv.token().number().is_integer())
return {};
// 2. If cvs value is less than zero, return an error.
@ -4372,7 +4372,7 @@ Optional<Selector::SimpleSelector::ANPlusBPattern> Parser::parse_a_n_plus_b_patt
auto is_n_dimension = [](StyleComponentValueRule const& value) -> bool {
if (!value.is(Token::Type::Dimension))
return false;
if (value.token().number_type() != Token::NumberType::Integer)
if (!value.token().number().is_integer())
return false;
if (!value.token().dimension_unit().equals_ignoring_case("n"sv))
return false;
@ -4381,7 +4381,7 @@ Optional<Selector::SimpleSelector::ANPlusBPattern> Parser::parse_a_n_plus_b_patt
auto is_ndash_dimension = [](StyleComponentValueRule const& value) -> bool {
if (!value.is(Token::Type::Dimension))
return false;
if (value.token().number_type() != Token::NumberType::Integer)
if (!value.token().number().is_integer())
return false;
if (!value.token().dimension_unit().equals_ignoring_case("n-"sv))
return false;
@ -4390,7 +4390,7 @@ Optional<Selector::SimpleSelector::ANPlusBPattern> Parser::parse_a_n_plus_b_patt
auto is_ndashdigit_dimension = [](StyleComponentValueRule const& value) -> bool {
if (!value.is(Token::Type::Dimension))
return false;
if (value.token().number_type() != Token::NumberType::Integer)
if (!value.token().number().is_integer())
return false;
auto dimension_unit = value.token().dimension_unit();
if (!dimension_unit.starts_with("n-"sv, CaseSensitivity::CaseInsensitive))
@ -4426,13 +4426,13 @@ Optional<Selector::SimpleSelector::ANPlusBPattern> Parser::parse_a_n_plus_b_patt
return true;
};
auto is_integer = [](StyleComponentValueRule const& value) -> bool {
return value.is(Token::Type::Number) && value.token().is(Token::NumberType::Integer);
return value.is(Token::Type::Number) && value.token().number().is_integer();
};
auto is_signed_integer = [is_integer](StyleComponentValueRule const& value) -> bool {
return is_integer(value) && value.token().is_integer_value_signed();
auto is_signed_integer = [](StyleComponentValueRule const& value) -> bool {
return value.is(Token::Type::Number) && value.token().number().is_integer_with_explicit_sign();
};
auto is_signless_integer = [is_integer](StyleComponentValueRule const& value) -> bool {
return is_integer(value) && !value.token().is_integer_value_signed();
auto is_signless_integer = [](StyleComponentValueRule const& value) -> bool {
return value.is(Token::Type::Number) && !value.token().number().is_integer_with_explicit_sign();
};
// https://www.w3.org/TR/css-syntax-3/#the-anb-type