diff options
-rw-r--r-- | Libraries/LibWeb/CSS/Parser/CSSParser.cpp | 16 | ||||
-rw-r--r-- | Libraries/LibWeb/CSS/Parser/CSSParser.h | 2 |
2 files changed, 15 insertions, 3 deletions
diff --git a/Libraries/LibWeb/CSS/Parser/CSSParser.cpp b/Libraries/LibWeb/CSS/Parser/CSSParser.cpp index e407c52e6f..5d4372da54 100644 --- a/Libraries/LibWeb/CSS/Parser/CSSParser.cpp +++ b/Libraries/LibWeb/CSS/Parser/CSSParser.cpp @@ -338,9 +338,21 @@ static CSS::Length parse_length(const CSS::ParsingContext& context, const String return CSS::Length(value.value(), type); } -RefPtr<CSS::StyleValue> parse_css_value(const CSS::ParsingContext& context, const StringView& string) +static bool takes_integer_value(CSS::PropertyID property_id) +{ + return property_id == CSS::PropertyID::ZIndex; +} + +RefPtr<CSS::StyleValue> parse_css_value(const CSS::ParsingContext& context, const StringView& string, CSS::PropertyID property_id) { bool is_bad_length = false; + + if (takes_integer_value(property_id)) { + auto integer = string.to_int(); + if (integer.has_value()) + return CSS::LengthStyleValue::create(CSS::Length::make_px(integer.value())); + } + auto length = parse_length(context, string, is_bad_length); if (is_bad_length) return nullptr; @@ -856,7 +868,7 @@ public: if (property_id == CSS::PropertyID::Invalid) { dbg() << "CSSParser: Unrecognized property '" << property_name << "'"; } - auto value = parse_css_value(m_context, property_value); + auto value = parse_css_value(m_context, property_value, property_id); if (!value) return {}; return CSS::StyleProperty { property_id, value.release_nonnull(), important }; diff --git a/Libraries/LibWeb/CSS/Parser/CSSParser.h b/Libraries/LibWeb/CSS/Parser/CSSParser.h index c71331558d..ca9a4688e2 100644 --- a/Libraries/LibWeb/CSS/Parser/CSSParser.h +++ b/Libraries/LibWeb/CSS/Parser/CSSParser.h @@ -47,7 +47,7 @@ namespace Web { RefPtr<CSS::StyleSheet> parse_css(const CSS::ParsingContext&, const StringView&); RefPtr<CSS::StyleDeclaration> parse_css_declaration(const CSS::ParsingContext&, const StringView&); -RefPtr<CSS::StyleValue> parse_css_value(const CSS::ParsingContext&, const StringView&); +RefPtr<CSS::StyleValue> parse_css_value(const CSS::ParsingContext&, const StringView&, CSS::PropertyID property_id = CSS::PropertyID::Invalid); Optional<CSS::Selector> parse_selector(const CSS::ParsingContext&, const StringView&); RefPtr<CSS::LengthStyleValue> parse_line_width(const CSS::ParsingContext&, const StringView&); |