Support range media query syntax

This commit is contained in:
Basilisk-Dev 2026-05-11 17:54:07 -04:00 committed by wuggy
commit 667a753448
4 changed files with 62 additions and 6 deletions

View file

@ -3845,9 +3845,7 @@ CSSParserImpl::ParseMediaQueryExpression(nsMediaQuery* aQuery)
break;
}
}
if (!feature->mName ||
(expr->mRange != nsMediaExpression::eEqual &&
feature->mRangeType != nsMediaFeature::eMinMaxAllowed)) {
if (!feature->mName) {
REPORT_UNEXPECTED_TOKEN(PEMQExpectedFeatureName);
SkipUntil(')');
return false;
@ -3865,13 +3863,52 @@ CSSParserImpl::ParseMediaQueryExpression(nsMediaQuery* aQuery)
return true;
}
if (!mToken.IsSymbol(':')) {
bool usesRangeSyntax = false;
if (mToken.IsSymbol('<') || mToken.IsSymbol('>') || mToken.IsSymbol('=')) {
if (expr->mRange != nsMediaExpression::eEqual) {
REPORT_UNEXPECTED_TOKEN(PEMQExpectedFeatureNameEnd);
UngetToken();
SkipUntil(')');
return false;
}
usesRangeSyntax = true;
char16_t rangeSymbol = mToken.mSymbol;
bool inclusive = rangeSymbol == '=';
if (rangeSymbol != '=') {
if (!GetToken(true)) {
REPORT_UNEXPECTED_EOF(PEMQExpressionEOF);
return false;
}
if (mToken.IsSymbol('=')) {
inclusive = true;
} else {
UngetToken();
}
}
if (rangeSymbol == '>') {
expr->mRange = inclusive ? nsMediaExpression::eMin
: nsMediaExpression::eMinExclusive;
} else if (rangeSymbol == '<') {
expr->mRange = inclusive ? nsMediaExpression::eMax
: nsMediaExpression::eMaxExclusive;
}
} else if (!mToken.IsSymbol(':')) {
REPORT_UNEXPECTED_TOKEN(PEMQExpectedFeatureNameEnd);
UngetToken();
SkipUntil(')');
return false;
}
if ((expr->mRange != nsMediaExpression::eEqual || usesRangeSyntax) &&
feature->mRangeType != nsMediaFeature::eMinMaxAllowed) {
REPORT_UNEXPECTED_TOKEN(PEMQExpectedFeatureName);
SkipUntil(')');
return false;
}
bool rv = false;
switch (feature->mValueType) {
case nsMediaFeature::eLength: