Changeset 282144 in webkit
- Timestamp:
- Sep 8, 2021 8:34:37 AM (11 months ago)
- Location:
- trunk
- Files:
-
- 2 added
- 11 edited
-
LayoutTests/ChangeLog (modified) (1 diff)
-
LayoutTests/imported/w3c/ChangeLog (modified) (1 diff)
-
LayoutTests/imported/w3c/web-platform-tests/css/css-transforms/parsing/scale-parsing-valid-expected.txt (modified) (1 diff)
-
LayoutTests/imported/w3c/web-platform-tests/css/css-transforms/parsing/transform-valid-expected.txt (modified) (1 diff)
-
LayoutTests/transforms/2d/scale-percent-expected.html (added)
-
LayoutTests/transforms/2d/scale-percent.html (added)
-
Source/WebCore/ChangeLog (modified) (1 diff)
-
Source/WebCore/css/CSSPrimitiveValue.cpp (modified) (1 diff)
-
Source/WebCore/css/CSSPrimitiveValue.h (modified) (1 diff)
-
Source/WebCore/css/TransformFunctions.cpp (modified) (3 diffs)
-
Source/WebCore/css/parser/CSSPropertyParser.cpp (modified) (5 diffs)
-
Source/WebCore/css/parser/CSSPropertyParserHelpers.cpp (modified) (15 diffs)
-
Source/WebCore/css/parser/CSSPropertyParserHelpers.h (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r282143 r282144 1 2021-09-08 Simon Fraser <simon.fraser@apple.com> 2 3 Support percentages in the scale() transform functions, and the scale property 4 https://bugs.webkit.org/show_bug.cgi?id=202501 5 6 Reviewed by Sam Weinig. 7 8 Ref test for scales with %. 9 10 * transforms/2d/scale-percent-expected.html: Added. 11 * transforms/2d/scale-percent.html: Added. 12 1 13 2021-09-08 Simon Fraser <simon.fraser@apple.com> 2 14 -
trunk/LayoutTests/imported/w3c/ChangeLog
r282138 r282144 1 2021-09-08 Simon Fraser <simon.fraser@apple.com> 2 3 Support percentages in the scale() transform functions, and the scale property 4 https://bugs.webkit.org/show_bug.cgi?id=202501 5 6 Reviewed by Sam Weinig. 7 8 * web-platform-tests/css/css-transforms/parsing/scale-parsing-valid-expected.txt: 9 * web-platform-tests/css/css-transforms/parsing/transform-valid-expected.txt: 10 1 11 2021-09-08 Martin Robinson <mrobinson@webkit.org> 2 12 -
trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-transforms/parsing/scale-parsing-valid-expected.txt
r282089 r282144 2 2 PASS e.style['scale'] = "none" should set the property value 3 3 PASS e.style['scale'] = "1" should set the property value 4 FAIL e.style['scale'] = "1%" should set the property value assert_not_equals: property should be set got disallowed value "" 4 PASS e.style['scale'] = "1%" should set the property value 5 5 PASS e.style['scale'] = "100" should set the property value 6 FAIL e.style['scale'] = "100%" should set the property value assert_not_equals: property should be set got disallowed value "" 6 PASS e.style['scale'] = "100%" should set the property value 7 7 PASS e.style['scale'] = "100 100" should set the property value 8 FAIL e.style['scale'] = "100% 100%" should set the property value assert_not_equals: property should be set got disallowed value "" 8 PASS e.style['scale'] = "100% 100%" should set the property value 9 9 PASS e.style['scale'] = "100 100 1" should set the property value 10 FAIL e.style['scale'] = "100% 100% 1" should set the property value assert_not_equals: property should be set got disallowed value "" 10 PASS e.style['scale'] = "100% 100% 1" should set the property value 11 11 PASS e.style['scale'] = "-100" should set the property value 12 FAIL e.style['scale'] = "-100%" should set the property value assert_not_equals: property should be set got disallowed value "" 12 PASS e.style['scale'] = "-100%" should set the property value 13 13 PASS e.style['scale'] = "-100 -100" should set the property value 14 FAIL e.style['scale'] = "-100% -100%" should set the property value assert_not_equals: property should be set got disallowed value "" 14 PASS e.style['scale'] = "-100% -100%" should set the property value 15 15 PASS e.style['scale'] = "-100 -100 1" should set the property value 16 FAIL e.style['scale'] = "-100% -100% 1" should set the property value assert_not_equals: property should be set got disallowed value "" 16 PASS e.style['scale'] = "-100% -100% 1" should set the property value 17 17 PASS e.style['scale'] = "100 200" should set the property value 18 FAIL e.style['scale'] = "100% 200%" should set the property value assert_not_equals: property should be set got disallowed value "" 18 PASS e.style['scale'] = "100% 200%" should set the property value 19 19 PASS e.style['scale'] = "100 200 1" should set the property value 20 FAIL e.style['scale'] = "100% 200% 1" should set the property value assert_not_equals: property should be set got disallowed value "" 20 PASS e.style['scale'] = "100% 200% 1" should set the property value 21 21 PASS e.style['scale'] = "100 200 300" should set the property value 22 22 PASS e.style['scale'] = "100 100 2" should set the property value 23 FAIL e.style['scale'] = "100% 200% 300%" should set the property value assert_not_equals: property should be set got disallowed value "" 23 PASS e.style['scale'] = "100% 200% 300%" should set the property value 24 24 -
trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-transforms/parsing/transform-valid-expected.txt
r282089 r282144 12 12 PASS e.style['transform'] = "scale(-2)" should set the property value 13 13 PASS e.style['transform'] = "scale(-5, -6)" should set the property value 14 FAIL e.style['transform'] = "scale(250%)" should set the property value assert_not_equals: property should be set got disallowed value "" 15 FAIL e.style['transform'] = "scale(325%, 475%)" should set the property value assert_not_equals: property should be set got disallowed value "" 16 FAIL e.style['transform'] = "scale(1, 200%)" should set the property value assert_not_equals: property should be set got disallowed value "" 17 FAIL e.style['transform'] = "scale(-250%)" should set the property value assert_not_equals: property should be set got disallowed value "" 18 FAIL e.style['transform'] = "scale(-500%, -620%)" should set the property value assert_not_equals: property should be set got disallowed value "" 14 PASS e.style['transform'] = "scale(250%)" should set the property value 15 PASS e.style['transform'] = "scale(325%, 475%)" should set the property value 16 PASS e.style['transform'] = "scale(1, 200%)" should set the property value 17 PASS e.style['transform'] = "scale(-250%)" should set the property value 18 PASS e.style['transform'] = "scale(-500%, -620%)" should set the property value 19 19 PASS e.style['transform'] = "scaleX(7)" should set the property value 20 FAIL e.style['transform'] = "scaleX(720%)" should set the property value assert_not_equals: property should be set got disallowed value "" 20 PASS e.style['transform'] = "scaleX(720%)" should set the property value 21 21 PASS e.style['transform'] = "scaleY(-8)" should set the property value 22 FAIL e.style['transform'] = "scaleY(-85%)" should set the property value assert_not_equals: property should be set got disallowed value "" 22 PASS e.style['transform'] = "scaleY(-85%)" should set the property value 23 23 PASS e.style['transform'] = "scaleZ(4)" should set the property value 24 FAIL e.style['transform'] = "scaleZ(25%)" should set the property value assert_not_equals: property should be set got disallowed value "" 24 PASS e.style['transform'] = "scaleZ(25%)" should set the property value 25 25 PASS e.style['transform'] = "scale3d(0.5, 2.5, 3)" should set the property value 26 FAIL e.style['transform'] = "scale3d(50%, 250%, 300%)" should set the property value assert_not_equals: property should be set got disallowed value "" 26 PASS e.style['transform'] = "scale3d(50%, 250%, 300%)" should set the property value 27 27 PASS e.style['transform'] = "scale3d(-0.5, 2.5, -3)" should set the property value 28 FAIL e.style['transform'] = "scale3d(-50%, 250%, -300%)" should set the property value assert_not_equals: property should be set got disallowed value "" 29 FAIL e.style['transform'] = "scale3d(1, 200%, 3)" should set the property value assert_not_equals: property should be set got disallowed value "" 28 PASS e.style['transform'] = "scale3d(-50%, 250%, -300%)" should set the property value 29 PASS e.style['transform'] = "scale3d(1, 200%, 3)" should set the property value 30 30 PASS e.style['transform'] = "rotate(0)" should set the property value 31 31 PASS e.style['transform'] = "rotate(90deg)" should set the property value -
trunk/Source/WebCore/ChangeLog
r282143 r282144 1 2021-09-08 Simon Fraser <simon.fraser@apple.com> 2 3 Support percentages in the scale() transform functions, and the scale property 4 https://bugs.webkit.org/show_bug.cgi?id=202501 5 6 Reviewed by Sam Weinig. 7 8 Support percentage values in the scale*() functions in the transform property, and 9 on the scale property. These value are converted by numbers by dividing by 100 10 at parse time, as we do for alpha values in colors. We have to keep calc() intact, 11 so % calcs need to be divided by 100 at use time. 12 13 Test: transforms/2d/scale-percent.html 14 15 * css/CSSPrimitiveValue.cpp: 16 (WebCore::CSSPrimitiveValue::doubleValueDividingBy100IfPercentage const): 17 * css/CSSPrimitiveValue.h: 18 * css/TransformFunctions.cpp: 19 (WebCore::transformsForValue): 20 (WebCore::scaleForValue): 21 * css/parser/CSSPropertyParser.cpp: 22 (WebCore::consumeNumbersOrPercents): 23 (WebCore::consumeTransformValue): 24 (WebCore::consumeScale): 25 * css/parser/CSSPropertyParserHelpers.cpp: 26 (WebCore::CSSPropertyParserHelpers::consumeNumberRawOrPercentRaw): 27 (WebCore::CSSPropertyParserHelpers::consumeNumberRawOrPercentRawAllowingSymbolTableIdent): 28 (WebCore::CSSPropertyParserHelpers::consumeNumberOrPercent): 29 * css/parser/CSSPropertyParserHelpers.h: 30 1 31 2021-09-08 Simon Fraser <simon.fraser@apple.com> 2 32 -
trunk/Source/WebCore/css/CSSPrimitiveValue.cpp
r278648 r282144 829 829 { 830 830 return primitiveUnitType() != CSSUnitType::CSS_CALC ? m_value.num : m_value.calc->doubleValue(); 831 } 832 833 double CSSPrimitiveValue::doubleValueDividingBy100IfPercentage() const 834 { 835 switch (primitiveUnitType()) { 836 case CSSUnitType::CSS_CALC: 837 return m_value.calc->primitiveType() == CSSUnitType::CSS_PERCENTAGE ? m_value.calc->doubleValue() / 100.0 : m_value.calc->doubleValue(); 838 839 case CSSUnitType::CSS_PERCENTAGE: 840 return m_value.num / 100.0; 841 842 default: 843 return m_value.num; 844 } 831 845 } 832 846 -
trunk/Source/WebCore/css/CSSPrimitiveValue.h
r281785 r282144 150 150 // It's usually wrong to call this; it can trigger type conversion in calc without sufficient context to resolve relative length units. 151 151 double doubleValue() const; 152 153 double doubleValueDividingBy100IfPercentage() const; 152 154 153 155 // These return nullopt for calc, for which range checking is not done at parse time: <https://www.w3.org/TR/css3-values/#calc-range>. -
trunk/Source/WebCore/css/TransformFunctions.cpp
r276554 r282144 137 137 double sy = 1.0; 138 138 if (transformValue.name() == CSSValueScaleY) 139 sy = firstValue.doubleValue ();140 else { 141 sx = firstValue.doubleValue ();139 sy = firstValue.doubleValueDividingBy100IfPercentage(); 140 else { 141 sx = firstValue.doubleValueDividingBy100IfPercentage(); 142 142 if (transformValue.name() != CSSValueScaleX) { 143 143 if (transformValue.length() > 1) { 144 144 auto& secondValue = downcast<CSSPrimitiveValue>(*transformValue.itemWithoutBoundsCheck(1)); 145 sy = secondValue.doubleValue ();145 sy = secondValue.doubleValueDividingBy100IfPercentage(); 146 146 } else 147 147 sy = sx; … … 157 157 double sz = 1.0; 158 158 if (transformValue.name() == CSSValueScaleZ) 159 sz = firstValue.doubleValue ();159 sz = firstValue.doubleValueDividingBy100IfPercentage(); 160 160 else if (transformValue.name() == CSSValueScaleY) 161 sy = firstValue.doubleValue ();162 else { 163 sx = firstValue.doubleValue ();161 sy = firstValue.doubleValueDividingBy100IfPercentage(); 162 else { 163 sx = firstValue.doubleValueDividingBy100IfPercentage(); 164 164 if (transformValue.name() != CSSValueScaleX) { 165 165 if (transformValue.length() > 2) { 166 166 auto& thirdValue = downcast<CSSPrimitiveValue>(*transformValue.itemWithoutBoundsCheck(2)); 167 sz = thirdValue.doubleValue ();167 sz = thirdValue.doubleValueDividingBy100IfPercentage(); 168 168 } 169 169 if (transformValue.length() > 1) { 170 170 auto& secondValue = downcast<CSSPrimitiveValue>(*transformValue.itemWithoutBoundsCheck(1)); 171 sy = secondValue.doubleValue ();171 sy = secondValue.doubleValueDividingBy100IfPercentage(); 172 172 } else 173 173 sy = sx; … … 397 397 return nullptr; 398 398 if (!i) { 399 sx = downcast<CSSPrimitiveValue>(*valueItem).doubleValue ();399 sx = downcast<CSSPrimitiveValue>(*valueItem).doubleValueDividingBy100IfPercentage(); 400 400 sy = sx; 401 401 } else if (i == 1) 402 sy = downcast<CSSPrimitiveValue>(*valueItem).doubleValue ();402 sy = downcast<CSSPrimitiveValue>(*valueItem).doubleValueDividingBy100IfPercentage(); 403 403 else if (i == 2) { 404 404 type = TransformOperation::SCALE_3D; 405 sz = downcast<CSSPrimitiveValue>(*valueItem).doubleValue ();405 sz = downcast<CSSPrimitiveValue>(*valueItem).doubleValueDividingBy100IfPercentage(); 406 406 } 407 407 } -
trunk/Source/WebCore/css/parser/CSSPropertyParser.cpp
r282143 r282144 1794 1794 } 1795 1795 1796 static bool consumeNumbersOrPercents(CSSParserTokenRange& args, RefPtr<CSSFunctionValue>& transformValue, unsigned numberOfArguments) 1797 { 1798 auto parseNumberAndAppend = [&] { 1799 auto parsedValue = consumeNumberOrPercent(args, ValueRange::All); 1800 if (!parsedValue) 1801 return false; 1802 1803 transformValue->append(parsedValue.releaseNonNull()); 1804 --numberOfArguments; 1805 return true; 1806 }; 1807 1808 if (!parseNumberAndAppend()) 1809 return false; 1810 1811 while (numberOfArguments) { 1812 if (!consumeCommaIncludingWhitespace(args)) 1813 return false; 1814 1815 if (!parseNumberAndAppend()) 1816 return false; 1817 } 1818 1819 return true; 1820 } 1821 1796 1822 static bool consumePerspective(CSSParserTokenRange& args, CSSParserMode cssParserMode, RefPtr<CSSFunctionValue>& transformValue) 1797 1823 { … … 1841 1867 case CSSValueScaleZ: 1842 1868 case CSSValueScale: 1843 parsedValue = consumeNumber (args, ValueRange::All);1869 parsedValue = consumeNumberOrPercent(args, ValueRange::All); 1844 1870 if (!parsedValue) 1845 1871 return nullptr; 1846 1872 if (functionId == CSSValueScale && consumeCommaIncludingWhitespace(args)) { 1847 1873 transformValue->append(*parsedValue); 1848 parsedValue = consumeNumber (args, ValueRange::All);1874 parsedValue = consumeNumberOrPercent(args, ValueRange::All); 1849 1875 if (!parsedValue) 1850 1876 return nullptr; … … 1877 1903 break; 1878 1904 case CSSValueScale3d: 1879 if (!consumeNumbers (args, transformValue, 3))1905 if (!consumeNumbersOrPercents(args, transformValue, 3)) 1880 1906 return nullptr; 1881 1907 break; … … 1984 2010 RefPtr<CSSValueList> list = CSSValueList::createSpaceSeparated(); 1985 2011 1986 RefPtr<CSSValue> x = consumeNumber (range, ValueRange::All);2012 RefPtr<CSSValue> x = consumeNumberOrPercent(range, ValueRange::All); 1987 2013 if (!x) 1988 2014 return list; … … 1990 2016 range.consumeWhitespace(); 1991 2017 1992 RefPtr<CSSValue> y = consumeNumber (range, ValueRange::All);2018 RefPtr<CSSValue> y = consumeNumberOrPercent(range, ValueRange::All); 1993 2019 if (!y) 1994 2020 return list; 1995 2021 1996 2022 // If the x and y values are the same, the y value is not needed. 1997 if (downcast<CSSPrimitiveValue>(*x). floatValue() != downcast<CSSPrimitiveValue>(*y).floatValue())2023 if (downcast<CSSPrimitiveValue>(*x).doubleValue() != downcast<CSSPrimitiveValue>(*y).doubleValue()) 1998 2024 list->append(*y); 1999 2025 range.consumeWhitespace(); 2000 2026 2001 RefPtr<CSSValue> z = consumeNumber (range, ValueRange::All);2027 RefPtr<CSSValue> z = consumeNumberOrPercent(range, ValueRange::All); 2002 2028 if (!z) 2003 2029 return list; 2004 if (downcast<CSSPrimitiveValue>(*z). floatValue() != 1.0) {2030 if (downcast<CSSPrimitiveValue>(*z).doubleValue() != 1.0) { 2005 2031 // We only need to append the z value if it's set to something other than 1. 2006 2032 // In case y was not added yet, because it was equal to x, we must append it -
trunk/Source/WebCore/css/parser/CSSPropertyParserHelpers.cpp
r279498 r282144 257 257 } 258 258 259 // MARK: Integer (CSSPrimitiveValue - not maintain g calc)259 // MARK: Integer (CSSPrimitiveValue - not maintaining calc) 260 260 261 261 template<typename IntType> static RefPtr<CSSPrimitiveValue> consumeIntegerTypeCSSPrimitiveValueWithCalcWithKnownTokenTypeFunction(CSSParserTokenRange& range, double minimumValue, CSSValuePool& pool) … … 325 325 } 326 326 327 // MARK: Number (CSSPrimitiveValue - maintain g calc)327 // MARK: Number (CSSPrimitiveValue - maintaining calc) 328 328 329 329 static RefPtr<CSSPrimitiveValue> consumeNumberCSSPrimitiveValueWithCalcWithKnownTokenTypeFunction(CSSParserTokenRange& range, const CSSCalcSymbolTable& symbolTable, ValueRange valueRange, CSSValuePool& pool) … … 401 401 402 402 403 // MARK: Percent (CSSPrimitiveValue - maintain g calc)403 // MARK: Percent (CSSPrimitiveValue - maintaining calc) 404 404 405 405 static RefPtr<CSSPrimitiveValue> consumePercentCSSPrimitiveValueWithCalcWithKnownTokenTypeFunction(CSSParserTokenRange& range, const CSSCalcSymbolTable& symbolTable, ValueRange valueRange, CSSValuePool& pool) … … 498 498 } 499 499 500 // MARK: Length (CSSPrimitiveValue - maintain g calc)500 // MARK: Length (CSSPrimitiveValue - maintaining calc) 501 501 502 502 static RefPtr<CSSPrimitiveValue> consumeLengthCSSPrimitiveValueWithCalcWithKnownTokenTypeFunction(CSSParserTokenRange& range, const CSSCalcSymbolTable& symbolTable, ValueRange valueRange, CSSParserMode, UnitlessQuirk, CSSValuePool& pool) … … 563 563 } 564 564 565 // MARK: Angle (CSSPrimitiveValue - maintain g calc)565 // MARK: Angle (CSSPrimitiveValue - maintaining calc) 566 566 567 567 static RefPtr<CSSPrimitiveValue> consumeAngleCSSPrimitiveValueWithCalcWithKnownTokenTypeFunction(CSSParserTokenRange& range, const CSSCalcSymbolTable& symbolTable, ValueRange valueRange, CSSParserMode, UnitlessQuirk, UnitlessZeroQuirk, CSSValuePool& pool) … … 592 592 593 593 594 // MARK: Time (CSSPrimitiveValue - maintain g calc)594 // MARK: Time (CSSPrimitiveValue - maintaining calc) 595 595 596 596 static RefPtr<CSSPrimitiveValue> consumeTimeCSSPrimitiveValueWithCalcWithKnownTokenTypeFunction(CSSParserTokenRange& range, const CSSCalcSymbolTable& symbolTable, ValueRange valueRange, CSSParserMode, UnitlessQuirk, CSSValuePool& pool) … … 1122 1122 1123 1123 template<typename NumberTransformer, typename PercentTransformer> 1124 static auto consumeNumberRawOrPercentRaw(CSSParserTokenRange& range, ValueRange valueRange, NumberTransformer&& numberTran former, PercentTransformer&& percentTranformer) -> std::optional<decltype(numberTranformer(std::declval<double>()))>1124 static auto consumeNumberRawOrPercentRaw(CSSParserTokenRange& range, ValueRange valueRange, NumberTransformer&& numberTransformer, PercentTransformer&& percentTransformer) -> std::optional<decltype(numberTransformer(std::declval<double>()))> 1125 1125 { 1126 1126 const auto& token = range.peek(); … … 1129 1129 case FunctionToken: { 1130 1130 if (auto number = consumeNumberRawWithKnownTokenTypeFunction(range, { }, valueRange)) 1131 return numberTran former(*number);1131 return numberTransformer(*number); 1132 1132 if (auto percent = consumePercentRawWithKnownTokenTypeFunction(range, { }, valueRange)) 1133 return percentTran former(*percent);1133 return percentTransformer(*percent); 1134 1134 break; 1135 1135 } … … 1137 1137 case PercentageToken: 1138 1138 if (auto percent = consumePercentRawWithKnownTokenTypePercentage(range, { }, valueRange)) 1139 return percentTran former(*percent);1139 return percentTransformer(*percent); 1140 1140 break; 1141 1141 1142 1142 case NumberToken: 1143 1143 if (auto number = consumeNumberRawWithKnownTokenTypeNumber(range, { }, valueRange)) 1144 return numberTran former(*number);1144 return numberTransformer(*number); 1145 1145 break; 1146 1146 … … 1160 1160 1161 1161 template<typename NumberTransformer, typename PercentTransformer> 1162 static auto consumeNumberRawOrPercentRawAllowingSymbolTableIdent(CSSParserTokenRange& range, const CSSCalcSymbolTable& symbolTable, ValueRange valueRange, NumberTransformer&& numberTran former, PercentTransformer&& percentTranformer) -> std::optional<decltype(numberTranformer(std::declval<double>()))>1162 static auto consumeNumberRawOrPercentRawAllowingSymbolTableIdent(CSSParserTokenRange& range, const CSSCalcSymbolTable& symbolTable, ValueRange valueRange, NumberTransformer&& numberTransformer, PercentTransformer&& percentTransformer) -> std::optional<decltype(numberTransformer(std::declval<double>()))> 1163 1163 { 1164 1164 auto& token = range.peek(); … … 1167 1167 case FunctionToken: { 1168 1168 if (auto number = consumeNumberRawWithKnownTokenTypeFunction(range, symbolTable, valueRange)) 1169 return numberTran former(*number);1169 return numberTransformer(*number); 1170 1170 if (auto percent = consumePercentRawWithKnownTokenTypeFunction(range, symbolTable, valueRange)) 1171 return percentTran former(*percent);1171 return percentTransformer(*percent); 1172 1172 break; 1173 1173 } … … 1175 1175 case PercentageToken: 1176 1176 if (auto percent = consumePercentRawWithKnownTokenTypePercentage(range, symbolTable, valueRange)) 1177 return percentTran former(*percent);1177 return percentTransformer(*percent); 1178 1178 break; 1179 1179 1180 1180 case NumberToken: 1181 1181 if (auto number = consumeNumberRawWithKnownTokenTypeNumber(range, symbolTable, valueRange)) 1182 return numberTran former(*number);1182 return numberTransformer(*number); 1183 1183 break; 1184 1184 … … 1189 1189 if (auto validatedValue = validatedPercentRaw(variable->value, valueRange)) { 1190 1190 range.consumeIncludingWhitespace(); 1191 return percentTran former(*validatedValue);1191 return percentTransformer(*validatedValue); 1192 1192 } 1193 1193 break; … … 1196 1196 if (auto validatedValue = validatedNumberRaw(variable->value, valueRange)) { 1197 1197 range.consumeIncludingWhitespace(); 1198 return numberTran former(*validatedValue);1198 return numberTransformer(*validatedValue); 1199 1199 } 1200 1200 break; … … 1216 1216 { 1217 1217 return consumeNumberRawOrPercentRawAllowingSymbolTableIdent(range, symbolTable, valueRange, [](double number) { return number; }, [](double percent) { return percent / 100.0; }); 1218 } 1219 1220 RefPtr<CSSPrimitiveValue> consumeNumberOrPercent(CSSParserTokenRange& range, ValueRange valueRange) 1221 { 1222 auto& token = range.peek(); 1223 1224 switch (token.type()) { 1225 case FunctionToken: 1226 if (auto value = consumeNumberCSSPrimitiveValueWithCalcWithKnownTokenTypeFunction(range, { }, valueRange, CSSValuePool::singleton())) 1227 return value; 1228 return consumePercentCSSPrimitiveValueWithCalcWithKnownTokenTypeFunction(range, { }, valueRange, CSSValuePool::singleton()); 1229 1230 case NumberToken: 1231 case PercentageToken: { 1232 auto value = consumeNumberRawOrPercentDividedBy100Raw(range, valueRange); 1233 if (value) 1234 return CSSValuePool::singleton().createValue(*value, CSSUnitType::CSS_NUMBER); 1235 break; 1236 } 1237 default: 1238 break; 1239 } 1240 1241 return nullptr; 1218 1242 } 1219 1243 -
trunk/Source/WebCore/css/parser/CSSPropertyParserHelpers.h
r278253 r282144 81 81 std::optional<double> consumeNumberRaw(CSSParserTokenRange&, ValueRange = ValueRange::All); 82 82 RefPtr<CSSPrimitiveValue> consumeNumber(CSSParserTokenRange&, ValueRange); 83 RefPtr<CSSPrimitiveValue> consumeNumberOrPercent(CSSParserTokenRange&, ValueRange); 83 84 std::optional<double> consumeFontWeightNumberRaw(CSSParserTokenRange&); 84 85 RefPtr<CSSPrimitiveValue> consumeFontWeightNumber(CSSParserTokenRange&);
Note: See TracChangeset
for help on using the changeset viewer.