summaryrefslogtreecommitdiff
path: root/Userland/Libraries
diff options
context:
space:
mode:
authorTobias Christiansen <tobi@tobyase.de>2021-06-03 21:59:41 +0200
committerAli Mohammad Pur <Ali.mpfard@gmail.com>2021-06-06 01:46:06 +0430
commitaf4d80af4d85dd469b852bad9b8b1daca2a0d9c5 (patch)
tree6cbd789a53efb14b7f928bd50febcc62f73f0b54 /Userland/Libraries
parentae3e6510d66b137d402d7d0d0adc5bb05f30e155 (diff)
downloadserenity-af4d80af4d85dd469b852bad9b8b1daca2a0d9c5.zip
LibWeb: Add parsing for NumericStyleValue
This StyleValue can hold an arbitrary float value.
Diffstat (limited to 'Userland/Libraries')
-rw-r--r--Userland/Libraries/LibWeb/CSS/Parser/DeprecatedCSSParser.cpp6
-rw-r--r--Userland/Libraries/LibWeb/CSS/StyleValue.h22
2 files changed, 27 insertions, 1 deletions
diff --git a/Userland/Libraries/LibWeb/CSS/Parser/DeprecatedCSSParser.cpp b/Userland/Libraries/LibWeb/CSS/Parser/DeprecatedCSSParser.cpp
index 591de141a6..edca46cf77 100644
--- a/Userland/Libraries/LibWeb/CSS/Parser/DeprecatedCSSParser.cpp
+++ b/Userland/Libraries/LibWeb/CSS/Parser/DeprecatedCSSParser.cpp
@@ -240,8 +240,12 @@ RefPtr<CSS::StyleValue> parse_css_value(const CSS::ParsingContext& context, cons
}
auto length = parse_length(context, string, is_bad_length);
- if (is_bad_length)
+ if (is_bad_length) {
+ auto float_number = try_parse_float(string);
+ if (float_number.has_value())
+ return CSS::NumericStyleValue::create(float_number.value());
return nullptr;
+ }
if (!length.is_undefined())
return CSS::LengthStyleValue::create(length);
diff --git a/Userland/Libraries/LibWeb/CSS/StyleValue.h b/Userland/Libraries/LibWeb/CSS/StyleValue.h
index b307a24a96..00e5002459 100644
--- a/Userland/Libraries/LibWeb/CSS/StyleValue.h
+++ b/Userland/Libraries/LibWeb/CSS/StyleValue.h
@@ -207,6 +207,7 @@ public:
Image,
Position,
CustomProperty,
+ Numeric,
};
Type type() const { return m_type; }
@@ -220,6 +221,7 @@ public:
bool is_length() const { return type() == Type::Length; }
bool is_position() const { return type() == Type::Position; }
bool is_custom_property() const { return type() == Type::CustomProperty; }
+ bool is_numeric() const { return type() == Type::Numeric; }
virtual String to_string() const = 0;
virtual Length to_length() const { return Length::make_auto(); }
@@ -266,6 +268,26 @@ private:
String m_custom_property_name {};
};
+class NumericStyleValue : public StyleValue {
+public:
+ static NonnullRefPtr<NumericStyleValue> create(float value)
+ {
+ return adopt_ref(*new NumericStyleValue(value));
+ }
+
+ float value() const { return m_value; }
+ String to_string() const override { return String::formatted("{}", m_value); }
+
+private:
+ explicit NumericStyleValue(float value)
+ : StyleValue(Type::Numeric)
+ , m_value(value)
+ {
+ }
+
+ float m_value { 0 };
+};
+
class StringStyleValue : public StyleValue {
public:
static NonnullRefPtr<StringStyleValue> create(const String& string)