Sfoglia il codice sorgente

LibWeb: Persuade CSS Parser that idents like `currentcolor` are colors

Shorthand properties were only checking for `ColorStyleValue`s, which
excludes identifier colors. Now they accept them too, including the
various `-libweb-foo` colors. :^)
Sam Atkins 3 anni fa
parent
commit
854d6e5822
1 ha cambiato i file con 72 aggiunte e 3 eliminazioni
  1. 72 3
      Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp

+ 72 - 3
Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp

@@ -1369,6 +1369,75 @@ Optional<float> Parser::try_parse_float(StringView string)
     return is_negative ? -value : value;
 }
 
+static bool is_color(StyleValue& style_value)
+{
+    if (style_value.is_color())
+        return true;
+    switch (style_value.to_identifier()) {
+    case ValueID::Currentcolor:
+    case ValueID::LibwebLink:
+    case ValueID::LibwebPaletteActiveLink:
+    case ValueID::LibwebPaletteActiveWindowBorder1:
+    case ValueID::LibwebPaletteActiveWindowBorder2:
+    case ValueID::LibwebPaletteActiveWindowTitle:
+    case ValueID::LibwebPaletteBase:
+    case ValueID::LibwebPaletteBaseText:
+    case ValueID::LibwebPaletteButton:
+    case ValueID::LibwebPaletteButtonText:
+    case ValueID::LibwebPaletteDesktopBackground:
+    case ValueID::LibwebPaletteFocusOutline:
+    case ValueID::LibwebPaletteHighlightWindowBorder1:
+    case ValueID::LibwebPaletteHighlightWindowBorder2:
+    case ValueID::LibwebPaletteHighlightWindowTitle:
+    case ValueID::LibwebPaletteHoverHighlight:
+    case ValueID::LibwebPaletteInactiveSelection:
+    case ValueID::LibwebPaletteInactiveSelectionText:
+    case ValueID::LibwebPaletteInactiveWindowBorder1:
+    case ValueID::LibwebPaletteInactiveWindowBorder2:
+    case ValueID::LibwebPaletteInactiveWindowTitle:
+    case ValueID::LibwebPaletteLink:
+    case ValueID::LibwebPaletteMenuBase:
+    case ValueID::LibwebPaletteMenuBaseText:
+    case ValueID::LibwebPaletteMenuSelection:
+    case ValueID::LibwebPaletteMenuSelectionText:
+    case ValueID::LibwebPaletteMenuStripe:
+    case ValueID::LibwebPaletteMovingWindowBorder1:
+    case ValueID::LibwebPaletteMovingWindowBorder2:
+    case ValueID::LibwebPaletteMovingWindowTitle:
+    case ValueID::LibwebPaletteRubberBandBorder:
+    case ValueID::LibwebPaletteRubberBandFill:
+    case ValueID::LibwebPaletteRuler:
+    case ValueID::LibwebPaletteRulerActiveText:
+    case ValueID::LibwebPaletteRulerBorder:
+    case ValueID::LibwebPaletteRulerInactiveText:
+    case ValueID::LibwebPaletteSelection:
+    case ValueID::LibwebPaletteSelectionText:
+    case ValueID::LibwebPaletteSyntaxComment:
+    case ValueID::LibwebPaletteSyntaxControlKeyword:
+    case ValueID::LibwebPaletteSyntaxIdentifier:
+    case ValueID::LibwebPaletteSyntaxKeyword:
+    case ValueID::LibwebPaletteSyntaxNumber:
+    case ValueID::LibwebPaletteSyntaxOperator:
+    case ValueID::LibwebPaletteSyntaxPreprocessorStatement:
+    case ValueID::LibwebPaletteSyntaxPreprocessorValue:
+    case ValueID::LibwebPaletteSyntaxPunctuation:
+    case ValueID::LibwebPaletteSyntaxString:
+    case ValueID::LibwebPaletteSyntaxType:
+    case ValueID::LibwebPaletteTextCursor:
+    case ValueID::LibwebPaletteThreedHighlight:
+    case ValueID::LibwebPaletteThreedShadow1:
+    case ValueID::LibwebPaletteThreedShadow2:
+    case ValueID::LibwebPaletteVisitedLink:
+    case ValueID::LibwebPaletteWindow:
+    case ValueID::LibwebPaletteWindowText:
+        return true;
+    default:
+        break;
+    }
+
+    return false;
+}
+
 RefPtr<StyleValue> Parser::parse_builtin_value(ParsingContext const&, StyleComponentValueRule const& component_value)
 {
     if (component_value.is(Token::Type::Ident)) {
@@ -1779,7 +1848,7 @@ RefPtr<StyleValue> Parser::parse_background_value(ParsingContext const& context,
             return nullptr;
         }
 
-        if (value->is_color()) {
+        if (is_color(*value)) {
             if (background_color)
                 return nullptr;
             background_color = value.release_nonnull();
@@ -1945,7 +2014,7 @@ RefPtr<StyleValue> Parser::parse_border_value(ParsingContext const& context, Vec
             border_width = value.release_nonnull();
             continue;
         }
-        if (value->is_color()) {
+        if (is_color(*value)) {
             if (border_color)
                 return nullptr;
             border_color = value.release_nonnull();
@@ -2688,7 +2757,7 @@ RefPtr<StyleValue> Parser::parse_text_decoration_value(ParsingContext const& con
         if (!value)
             return nullptr;
 
-        if (value->is_color()) {
+        if (is_color(*value)) {
             if (decoration_color)
                 return nullptr;
             decoration_color = value.release_nonnull();