Bläddra i källkod

LibWeb: Make parse_html_length() accept floating point numbers

This makes stuff like <img width="12.5"> work. This code is not great,
so I've left a FIXME about improving it.
Andreas Kling 3 år sedan
förälder
incheckning
1206dd2215
1 ändrade filer med 13 tillägg och 0 borttagningar
  1. 13 0
      Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp

+ 13 - 0
Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp

@@ -4976,9 +4976,22 @@ RefPtr<CSS::Supports> parse_css_supports(CSS::ParsingContext const& context, Str
 
 RefPtr<CSS::StyleValue> parse_html_length(DOM::Document const& document, StringView string)
 {
+    if (string.is_null())
+        return nullptr;
+
     auto integer = string.to_int();
     if (integer.has_value())
         return CSS::LengthStyleValue::create(CSS::Length::make_px(integer.value()));
+
+    {
+        // FIXME: This is both ad-hoc and inefficient (note the String allocation!)
+        String string_copy(string);
+        char const* endptr = nullptr;
+        auto double_value = strtod(string_copy.characters(), const_cast<char**>(&endptr));
+        if (endptr != string_copy.characters())
+            return CSS::LengthStyleValue::create(CSS::Length::make_px(double_value));
+    }
+
     return parse_css_value(CSS::ParsingContext(document), string);
 }