diff --git a/Userland/Libraries/LibWeb/CSS/FontFace.cpp b/Userland/Libraries/LibWeb/CSS/FontFace.cpp index 0afe492dd46..5c8520c680c 100644 --- a/Userland/Libraries/LibWeb/CSS/FontFace.cpp +++ b/Userland/Libraries/LibWeb/CSS/FontFace.cpp @@ -401,6 +401,7 @@ void FontFace::load_font_source() {}, // FIXME: line_gap_override FontDisplay::Auto, // FIXME: font_display {}, // font-named-instance doesn't exist in FontFace + {}, // font-language-override doesn't exist in FontFace }; if (auto loader = style_computer.load_font_face(parsed_font_face, move(on_load), move(on_error)); loader.has_value()) loader->start_loading_next_url(); diff --git a/Userland/Libraries/LibWeb/CSS/ParsedFontFace.cpp b/Userland/Libraries/LibWeb/CSS/ParsedFontFace.cpp index 17e1f1e7df9..893695bf6ce 100644 --- a/Userland/Libraries/LibWeb/CSS/ParsedFontFace.cpp +++ b/Userland/Libraries/LibWeb/CSS/ParsedFontFace.cpp @@ -9,7 +9,7 @@ namespace Web::CSS { -ParsedFontFace::ParsedFontFace(FlyString font_family, Optional weight, Optional slope, Optional width, Vector sources, Vector unicode_ranges, Optional ascent_override, Optional descent_override, Optional line_gap_override, FontDisplay font_display, Optional font_named_instance) +ParsedFontFace::ParsedFontFace(FlyString font_family, Optional weight, Optional slope, Optional width, Vector sources, Vector unicode_ranges, Optional ascent_override, Optional descent_override, Optional line_gap_override, FontDisplay font_display, Optional font_named_instance, Optional font_language_override) : m_font_family(move(font_family)) , m_font_named_instance(move(font_named_instance)) , m_weight(weight) @@ -21,6 +21,7 @@ ParsedFontFace::ParsedFontFace(FlyString font_family, Optional weight, Opti , m_descent_override(move(descent_override)) , m_line_gap_override(move(line_gap_override)) , m_font_display(font_display) + , m_font_language_override(font_language_override) { } diff --git a/Userland/Libraries/LibWeb/CSS/ParsedFontFace.h b/Userland/Libraries/LibWeb/CSS/ParsedFontFace.h index 11c7140f26e..796f2985e77 100644 --- a/Userland/Libraries/LibWeb/CSS/ParsedFontFace.h +++ b/Userland/Libraries/LibWeb/CSS/ParsedFontFace.h @@ -23,13 +23,14 @@ public: Optional format; }; - ParsedFontFace(FlyString font_family, Optional weight, Optional slope, Optional width, Vector sources, Vector unicode_ranges, Optional ascent_override, Optional descent_override, Optional line_gap_override, FontDisplay font_display, Optional font_named_instance); + ParsedFontFace(FlyString font_family, Optional weight, Optional slope, Optional width, Vector sources, Vector unicode_ranges, Optional ascent_override, Optional descent_override, Optional line_gap_override, FontDisplay font_display, Optional font_named_instance, Optional font_language_override); ~ParsedFontFace() = default; Optional ascent_override() const { return m_ascent_override; } Optional descent_override() const { return m_descent_override; } FontDisplay font_display() const { return m_font_display; } FlyString font_family() const { return m_font_family; } + Optional font_language_override() const { return m_font_language_override; } Optional font_named_instance() const { return m_font_named_instance; } Optional slope() const { return m_slope; } Optional weight() const { return m_weight; } @@ -50,6 +51,7 @@ private: Optional m_descent_override; Optional m_line_gap_override; FontDisplay m_font_display; + Optional m_font_language_override; }; } diff --git a/Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp b/Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp index 199efbc3930..ea06233a3ad 100644 --- a/Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp +++ b/Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp @@ -5507,6 +5507,7 @@ JS::GCPtr Parser::parse_font_face_rule(TokenStream descent_override; Optional line_gap_override; FontDisplay font_display = FontDisplay::Auto; + Optional language_override; // "normal" is returned as nullptr auto parse_as_percentage_or_normal = [&](Vector const& values) -> ErrorOr> { @@ -5626,6 +5627,18 @@ JS::GCPtr Parser::parse_font_face_rule(TokenStreamis_string()) { + language_override = value->as_string().string_value(); + } else { + language_override.clear(); + } + } + continue; + } if (declaration.name().equals_ignoring_ascii_case("font-named-instance"sv)) { // auto | TokenStream token_stream { declaration.values() }; @@ -5707,7 +5720,7 @@ JS::GCPtr Parser::parse_font_face_rule(TokenStream Parser::parse_as_font_face_src() diff --git a/Userland/Libraries/LibWeb/Dump.cpp b/Userland/Libraries/LibWeb/Dump.cpp index b1d9c8f6c14..3fdcce7d62b 100644 --- a/Userland/Libraries/LibWeb/Dump.cpp +++ b/Userland/Libraries/LibWeb/Dump.cpp @@ -704,6 +704,11 @@ void dump_font_face_rule(StringBuilder& builder, CSS::CSSFontFaceRule const& rul indent(builder, indent_levels + 1); builder.appendff("named-instance: {}\n", font_face.font_named_instance().value()); } + + if (font_face.font_language_override().has_value()) { + indent(builder, indent_levels + 1); + builder.appendff("language-override: {}\n", font_face.font_language_override().value()); + } } void dump_import_rule(StringBuilder& builder, CSS::CSSImportRule const& rule, int indent_levels)