From 69556b7b1b84a19d6342c0a138a323ec6732e7c7 Mon Sep 17 00:00:00 2001 From: erixreyes Date: Fri, 11 Jul 2025 10:34:37 +0800 Subject: [PATCH] Issue #2691: Improve token handling for selectors --- layout/style/nsCSSParser.cpp | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/layout/style/nsCSSParser.cpp b/layout/style/nsCSSParser.cpp index e8258aa55f..e65ac502a4 100644 --- a/layout/style/nsCSSParser.cpp +++ b/layout/style/nsCSSParser.cpp @@ -13,6 +13,7 @@ #include // for std::stable_sort #include // for std::numeric_limits +#include // for std::floor #include "nsCSSParser.h" #include "nsAlgorithm.h" @@ -4902,8 +4903,12 @@ CSSParserImpl::ParseSupportsSelector(bool& aConditionMet) selectorText.Append(mToken.mIdent); break; + case eCSSToken_ID: + selectorText.Append('#'); + selectorText.Append(mToken.mIdent); + break; + case eCSSToken_Hash: - if (needSpace) selectorText.Append(' '); selectorText.Append('#'); selectorText.Append(mToken.mIdent); break; @@ -4926,6 +4931,25 @@ CSSParserImpl::ParseSupportsSelector(bool& aConditionMet) parenDepth++; break; + case eCSSToken_Number: + if (needSpace) selectorText.Append(' '); + if (mToken.mNumber == floor(mToken.mNumber)) { + selectorText.AppendInt(int32_t(mToken.mNumber)); + } else { + selectorText.AppendFloat(mToken.mNumber); + } + break; + + case eCSSToken_Dimension: + if (needSpace) selectorText.Append(' '); + if (mToken.mNumber == floor(mToken.mNumber)) { + selectorText.AppendInt(int32_t(mToken.mNumber)); + } else { + selectorText.AppendFloat(mToken.mNumber); + } + selectorText.Append(mToken.mIdent); + break; + default: if (!mToken.mIdent.IsEmpty()) { if (needSpace) selectorText.Append(' ');