mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-06-11 18:20:43 +09: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:
parent
e4a2bd7a44
commit
136dc7a1c3
Notes:
sideshowbarker
2024-07-17 07:16:27 +09:00
Author: https://github.com/AtkinsSJ
Commit: 136dc7a1c3
Pull-request: https://github.com/SerenityOS/serenity/pull/19996
3 changed files with 27 additions and 25 deletions
|
@ -8932,28 +8932,9 @@ ErrorOr<OwnPtr<CalculationNode>> Parser::parse_a_calculation(Vector<ComponentVal
|
|||
}
|
||||
|
||||
if (value.is(Token::Type::Ident)) {
|
||||
if (value.token().ident().equals_ignoring_ascii_case("e"sv)) {
|
||||
TRY(values.try_append({ TRY(ConstantCalculationNode::create(CalculationNode::ConstantType::E)) }));
|
||||
continue;
|
||||
}
|
||||
|
||||
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)) }));
|
||||
auto maybe_constant = CalculationNode::constant_type_from_string(value.token().ident());
|
||||
if (maybe_constant.has_value()) {
|
||||
TRY(values.try_append({ TRY(ConstantCalculationNode::create(maybe_constant.value())) }));
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -87,6 +87,26 @@ static CalculatedStyleValue::CalculationResult to_resolved_type(CalculatedStyleV
|
|||
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)
|
||||
: m_type(type)
|
||||
{
|
||||
|
@ -974,7 +994,7 @@ ErrorOr<String> ConstantCalculationNode::to_string() const
|
|||
switch (m_constant) {
|
||||
case CalculationNode::ConstantType::E:
|
||||
return "e"_short_string;
|
||||
case CalculationNode::ConstantType::PI:
|
||||
case CalculationNode::ConstantType::Pi:
|
||||
return "pi"_short_string;
|
||||
case CalculationNode::ConstantType::Infinity:
|
||||
return "infinity"_string;
|
||||
|
@ -1005,7 +1025,7 @@ CalculatedStyleValue::CalculationResult ConstantCalculationNode::resolve([[maybe
|
|||
switch (m_constant) {
|
||||
case CalculationNode::ConstantType::E:
|
||||
return { Number(Number::Type::Number, M_E) };
|
||||
case CalculationNode::ConstantType::PI:
|
||||
case CalculationNode::ConstantType::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.
|
||||
case CalculationNode::ConstantType::Infinity:
|
||||
|
|
|
@ -124,11 +124,12 @@ public:
|
|||
// https://drafts.csswg.org/css-values-4/#calc-error-constants
|
||||
enum class ConstantType {
|
||||
E,
|
||||
PI,
|
||||
Pi,
|
||||
NaN,
|
||||
Infinity,
|
||||
MinusInfinity,
|
||||
};
|
||||
static Optional<ConstantType> constant_type_from_string(StringView);
|
||||
|
||||
enum class Type {
|
||||
Numeric,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue