Quellcode durchsuchen

LibWeb: Move CSS unicode-ranges parsing code into a common helper

Andrew Kaster vor 1 Jahr
Ursprung
Commit
de98c122d1

+ 19 - 16
Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp

@@ -2137,6 +2137,22 @@ Optional<Gfx::UnicodeRange> Parser::parse_unicode_range(StringView text)
     return make_valid_unicode_range(start_value, end_value);
 }
 
+Vector<Gfx::UnicodeRange> Parser::parse_unicode_ranges(TokenStream<ComponentValue>& tokens)
+{
+    Vector<Gfx::UnicodeRange> unicode_ranges;
+    auto range_token_lists = parse_a_comma_separated_list_of_component_values(tokens);
+    for (auto& range_tokens : range_token_lists) {
+        TokenStream range_token_stream { range_tokens };
+        auto maybe_unicode_range = parse_unicode_range(range_token_stream);
+        if (!maybe_unicode_range.has_value()) {
+            dbgln_if(CSS_PARSER_DEBUG, "CSSParser: unicode-range format invalid; discarding.");
+            return {};
+        }
+        unicode_ranges.append(maybe_unicode_range.release_value());
+    }
+    return unicode_ranges;
+}
+
 RefPtr<StyleValue> Parser::parse_dimension_value(TokenStream<ComponentValue>& tokens)
 {
     auto dimension = parse_dimension(tokens.peek_token());
@@ -4526,22 +4542,9 @@ CSSRule* Parser::parse_font_face_rule(TokenStream<ComponentValue>& tokens)
             continue;
         }
         if (declaration.name().equals_ignoring_ascii_case("unicode-range"sv)) {
-            Vector<Gfx::UnicodeRange> unicode_ranges;
-            bool unicode_range_invalid = false;
-            TokenStream all_tokens { declaration.values() };
-            auto range_token_lists = parse_a_comma_separated_list_of_component_values(all_tokens);
-            for (auto& range_tokens : range_token_lists) {
-                TokenStream range_token_stream { range_tokens };
-                auto maybe_unicode_range = parse_unicode_range(range_token_stream);
-                if (!maybe_unicode_range.has_value()) {
-                    dbgln_if(CSS_PARSER_DEBUG, "CSSParser: @font-face unicode-range format invalid; discarding.");
-                    unicode_range_invalid = true;
-                    break;
-                }
-                unicode_ranges.append(maybe_unicode_range.release_value());
-            }
-
-            if (unicode_range_invalid || unicode_ranges.is_empty())
+            TokenStream token_stream { declaration.values() };
+            auto unicode_ranges = parse_unicode_ranges(token_stream);
+            if (unicode_ranges.is_empty())
                 continue;
 
             unicode_range = move(unicode_ranges);

+ 1 - 0
Userland/Libraries/LibWeb/CSS/Parser/Parser.h

@@ -190,6 +190,7 @@ private:
     Optional<Ratio> parse_ratio(TokenStream<ComponentValue>&);
     Optional<Gfx::UnicodeRange> parse_unicode_range(TokenStream<ComponentValue>&);
     Optional<Gfx::UnicodeRange> parse_unicode_range(StringView);
+    Vector<Gfx::UnicodeRange> parse_unicode_ranges(TokenStream<ComponentValue>&);
     Optional<GridSize> parse_grid_size(ComponentValue const&);
     Optional<GridMinMax> parse_min_max(Vector<ComponentValue> const&);
     Optional<GridRepeat> parse_repeat(Vector<ComponentValue> const&);