1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-24 14:57:35 +00:00

LibWeb: Extract CalculationNode::constant_type_from_string() function

This is needed by some upcoming generated code. Renamed "PI" member to
"Pi" while I was at it.
This commit is contained in:
Sam Atkins 2023-07-08 16:55:06 +01:00 committed by Andreas Kling
parent e4a2bd7a44
commit 136dc7a1c3
3 changed files with 27 additions and 25 deletions

View file

@ -8932,28 +8932,9 @@ ErrorOr<OwnPtr<CalculationNode>> Parser::parse_a_calculation(Vector<ComponentVal
} }
if (value.is(Token::Type::Ident)) { if (value.is(Token::Type::Ident)) {
if (value.token().ident().equals_ignoring_ascii_case("e"sv)) { auto maybe_constant = CalculationNode::constant_type_from_string(value.token().ident());
TRY(values.try_append({ TRY(ConstantCalculationNode::create(CalculationNode::ConstantType::E)) })); if (maybe_constant.has_value()) {
continue; TRY(values.try_append({ TRY(ConstantCalculationNode::create(maybe_constant.value())) }));
}
if (value.token().ident().equals_ignoring_ascii_case("pi"sv)) {
TRY(values.try_append({ TRY(ConstantCalculationNode::create(CalculationNode::ConstantType::PI)) }));
continue;
}
if (value.token().ident().equals_ignoring_ascii_case("infinity"sv)) {
TRY(values.try_append({ TRY(ConstantCalculationNode::create(CalculationNode::ConstantType::Infinity)) }));
continue;
}
if (value.token().ident().equals_ignoring_ascii_case("-infinity"sv)) {
TRY(values.try_append({ TRY(ConstantCalculationNode::create(CalculationNode::ConstantType::MinusInfinity)) }));
continue;
}
if (value.token().ident().equals_ignoring_ascii_case("NaN"sv)) {
TRY(values.try_append({ TRY(ConstantCalculationNode::create(CalculationNode::ConstantType::NaN)) }));
continue; continue;
} }
} }

View file

@ -87,6 +87,26 @@ static CalculatedStyleValue::CalculationResult to_resolved_type(CalculatedStyleV
VERIFY_NOT_REACHED(); VERIFY_NOT_REACHED();
} }
Optional<CalculationNode::ConstantType> CalculationNode::constant_type_from_string(StringView string)
{
if (string.equals_ignoring_ascii_case("e"sv))
return CalculationNode::ConstantType::E;
if (string.equals_ignoring_ascii_case("pi"sv))
return CalculationNode::ConstantType::Pi;
if (string.equals_ignoring_ascii_case("infinity"sv))
return CalculationNode::ConstantType::Infinity;
if (string.equals_ignoring_ascii_case("-infinity"sv))
return CalculationNode::ConstantType::MinusInfinity;
if (string.equals_ignoring_ascii_case("NaN"sv))
return CalculationNode::ConstantType::NaN;
return {};
}
CalculationNode::CalculationNode(Type type) CalculationNode::CalculationNode(Type type)
: m_type(type) : m_type(type)
{ {
@ -974,7 +994,7 @@ ErrorOr<String> ConstantCalculationNode::to_string() const
switch (m_constant) { switch (m_constant) {
case CalculationNode::ConstantType::E: case CalculationNode::ConstantType::E:
return "e"_short_string; return "e"_short_string;
case CalculationNode::ConstantType::PI: case CalculationNode::ConstantType::Pi:
return "pi"_short_string; return "pi"_short_string;
case CalculationNode::ConstantType::Infinity: case CalculationNode::ConstantType::Infinity:
return "infinity"_string; return "infinity"_string;
@ -1005,7 +1025,7 @@ CalculatedStyleValue::CalculationResult ConstantCalculationNode::resolve([[maybe
switch (m_constant) { switch (m_constant) {
case CalculationNode::ConstantType::E: case CalculationNode::ConstantType::E:
return { Number(Number::Type::Number, M_E) }; return { Number(Number::Type::Number, M_E) };
case CalculationNode::ConstantType::PI: case CalculationNode::ConstantType::Pi:
return { Number(Number::Type::Number, M_PI) }; return { Number(Number::Type::Number, M_PI) };
// FIXME: We need to keep track of Infinity and NaN across all nodes, since they require special handling. // FIXME: We need to keep track of Infinity and NaN across all nodes, since they require special handling.
case CalculationNode::ConstantType::Infinity: case CalculationNode::ConstantType::Infinity:

View file

@ -124,11 +124,12 @@ public:
// https://drafts.csswg.org/css-values-4/#calc-error-constants // https://drafts.csswg.org/css-values-4/#calc-error-constants
enum class ConstantType { enum class ConstantType {
E, E,
PI, Pi,
NaN, NaN,
Infinity, Infinity,
MinusInfinity, MinusInfinity,
}; };
static Optional<ConstantType> constant_type_from_string(StringView);
enum class Type { enum class Type {
Numeric, Numeric,