diff options
author | Tobias Christiansen <tobi@tobyase.de> | 2021-06-03 21:59:41 +0200 |
---|---|---|
committer | Ali Mohammad Pur <Ali.mpfard@gmail.com> | 2021-06-06 01:46:06 +0430 |
commit | af4d80af4d85dd469b852bad9b8b1daca2a0d9c5 (patch) | |
tree | 6cbd789a53efb14b7f928bd50febcc62f73f0b54 | |
parent | ae3e6510d66b137d402d7d0d0adc5bb05f30e155 (diff) | |
download | serenity-af4d80af4d85dd469b852bad9b8b1daca2a0d9c5.zip |
LibWeb: Add parsing for NumericStyleValue
This StyleValue can hold an arbitrary float value.
-rw-r--r-- | Userland/Libraries/LibWeb/CSS/Parser/DeprecatedCSSParser.cpp | 6 | ||||
-rw-r--r-- | Userland/Libraries/LibWeb/CSS/StyleValue.h | 22 |
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) |