diff --git a/Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp b/Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp index 5497bda008..478c9b78bc 100644 --- a/Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp +++ b/Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp @@ -5242,4 +5242,26 @@ RefPtr parse_dimension_value(StringView string) return parse_current_dimension_value(value, input, position); } +// https://html.spec.whatwg.org/multipage/common-microsyntaxes.html#rules-for-parsing-non-zero-dimension-values +RefPtr parse_nonzero_dimension_value(StringView string) +{ + // 1. Let input be the string being parsed. + // 2. Let value be the result of parsing input using the rules for parsing dimension values. + auto value = parse_dimension_value(string); + + // 3. If value is an error, return an error. + if (!value) + return nullptr; + + // 4. If value is zero, return an error. + if (value->is_length() && value->as_length().length().raw_value() == 0) + return nullptr; + if (value->is_percentage() && value->as_percentage().percentage().value() == 0) + return nullptr; + + // 5. If value is a percentage, return value as a percentage. + // 6. Return value as a length. + return value; +} + } diff --git a/Userland/Libraries/LibWeb/CSS/Parser/Parser.h b/Userland/Libraries/LibWeb/CSS/Parser/Parser.h index e04c44c430..dd729d08f5 100644 --- a/Userland/Libraries/LibWeb/CSS/Parser/Parser.h +++ b/Userland/Libraries/LibWeb/CSS/Parser/Parser.h @@ -360,5 +360,6 @@ RefPtr parse_css_supports(CSS::ParsingContext const&, StringView) RefPtr parse_html_length(DOM::Document const&, StringView); RefPtr parse_dimension_value(StringView); +RefPtr parse_nonzero_dimension_value(StringView); }