OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2003 Lars Knoll (knoll@kde.org) | 2 * Copyright (C) 2003 Lars Knoll (knoll@kde.org) |
3 * Copyright (C) 2005 Allan Sandfeld Jensen (kde@carewolf.com) | 3 * Copyright (C) 2005 Allan Sandfeld Jensen (kde@carewolf.com) |
4 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 Apple Inc.
All rights reserved. | 4 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 Apple Inc.
All rights reserved. |
5 * Copyright (C) 2007 Nicholas Shanks <webkit@nickshanks.com> | 5 * Copyright (C) 2007 Nicholas Shanks <webkit@nickshanks.com> |
6 * Copyright (C) 2008 Eric Seidel <eric@webkit.org> | 6 * Copyright (C) 2008 Eric Seidel <eric@webkit.org> |
7 * Copyright (C) 2009 Torch Mobile Inc. All rights reserved. (http://www.torchmo
bile.com/) | 7 * Copyright (C) 2009 Torch Mobile Inc. All rights reserved. (http://www.torchmo
bile.com/) |
8 * Copyright (C) 2012 Adobe Systems Incorporated. All rights reserved. | 8 * Copyright (C) 2012 Adobe Systems Incorporated. All rights reserved. |
9 * Copyright (C) 2012 Intel Corporation. All rights reserved. | 9 * Copyright (C) 2012 Intel Corporation. All rights reserved. |
10 * | 10 * |
(...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
166 b = (unitflags & FFrequency); | 166 b = (unitflags & FFrequency); |
167 break; | 167 break; |
168 case CalcOther: | 168 case CalcOther: |
169 break; | 169 break; |
170 } | 170 } |
171 if (!b || releaseCalc == ReleaseParsedCalcValue) | 171 if (!b || releaseCalc == ReleaseParsedCalcValue) |
172 m_parsedCalculation.release(); | 172 m_parsedCalculation.release(); |
173 return b; | 173 return b; |
174 } | 174 } |
175 | 175 |
176 inline bool CSSPropertyParser::shouldAcceptUnitLessValues(CSSParserValue* value,
Units unitflags, CSSParserMode cssParserMode) | |
177 { | |
178 // Quirks mode for certain properties and presentation attributes accept uni
t-less values for certain units. | |
179 return (unitflags & (FLength | FAngle)) | |
180 && (!value->fValue // 0 can always be unitless. | |
181 || isUnitLessLengthParsingEnabledForMode(cssParserMode) // HTML and
SVG attribute values can always be unitless. | |
182 || (cssParserMode == HTMLQuirksMode && (unitflags & FUnitlessQuirk))
); | |
183 } | |
184 | |
185 inline bool isCalculation(CSSParserValue* value) | 176 inline bool isCalculation(CSSParserValue* value) |
186 { | 177 { |
187 return value->m_unit == CSSParserValue::CalcFunction; | 178 return value->m_unit == CSSParserValue::CalcFunction; |
188 } | 179 } |
189 | 180 |
190 bool CSSPropertyParser::validUnit(CSSParserValue* value, Units unitflags, CSSPar
serMode cssParserMode, ReleaseParsedCalcValueCondition releaseCalc) | 181 bool CSSPropertyParser::validUnit(CSSParserValue* value, Units unitflags, CSSPar
serMode cssParserMode, ReleaseParsedCalcValueCondition releaseCalc) |
191 { | 182 { |
192 if (isCalculation(value)) | 183 if (isCalculation(value)) |
193 return validCalculationUnit(value, unitflags, releaseCalc); | 184 return validCalculationUnit(value, unitflags, releaseCalc); |
194 | 185 |
195 if (unitflags & FNonNeg && value->fValue < 0) | 186 if (unitflags & FNonNeg && value->fValue < 0) |
196 return false; | 187 return false; |
197 switch (value->unit()) { | 188 switch (value->unit()) { |
198 case CSSPrimitiveValue::UnitType::Number: | 189 case CSSPrimitiveValue::UnitType::Number: |
199 if (unitflags & FNumber) | 190 if (unitflags & FNumber) |
200 return true; | 191 return true; |
201 if (shouldAcceptUnitLessValues(value, unitflags, cssParserMode)) { | 192 if (shouldAcceptUnitLessValues(value->fValue, unitflags, cssParserMode))
{ |
202 value->setUnit((unitflags & FLength) ? CSSPrimitiveValue::UnitType::
Pixels : CSSPrimitiveValue::UnitType::Degrees); | 193 value->setUnit((unitflags & FLength) ? CSSPrimitiveValue::UnitType::
Pixels : CSSPrimitiveValue::UnitType::Degrees); |
203 return true; | 194 return true; |
204 } | 195 } |
205 if ((unitflags & FInteger) && value->isInt) | 196 if ((unitflags & FInteger) && value->isInt) |
206 return true; | 197 return true; |
207 if ((unitflags & FPositiveInteger) && value->isInt && value->fValue > 0) | 198 if ((unitflags & FPositiveInteger) && value->isInt && value->fValue > 0) |
208 return true; | 199 return true; |
209 return false; | 200 return false; |
210 case CSSPrimitiveValue::UnitType::Percentage: | 201 case CSSPrimitiveValue::UnitType::Percentage: |
211 return unitflags & FPercent; | 202 return unitflags & FPercent; |
(...skipping 478 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
690 case CSSPropertyWebkitBorderEndWidth: | 681 case CSSPropertyWebkitBorderEndWidth: |
691 case CSSPropertyWebkitBorderBeforeWidth: | 682 case CSSPropertyWebkitBorderBeforeWidth: |
692 case CSSPropertyWebkitBorderAfterWidth: | 683 case CSSPropertyWebkitBorderAfterWidth: |
693 case CSSPropertyWebkitColumnRuleWidth: | 684 case CSSPropertyWebkitColumnRuleWidth: |
694 if (id == CSSValueThin || id == CSSValueMedium || id == CSSValueThick) | 685 if (id == CSSValueThin || id == CSSValueMedium || id == CSSValueThick) |
695 validPrimitive = true; | 686 validPrimitive = true; |
696 else | 687 else |
697 validPrimitive = validUnit(value, FLength | FNonNeg | unitless); | 688 validPrimitive = validUnit(value, FLength | FNonNeg | unitless); |
698 break; | 689 break; |
699 | 690 |
700 case CSSPropertyLetterSpacing: // normal | <length> | inherit | |
701 case CSSPropertyWordSpacing: // normal | <length> | inherit | |
702 if (id == CSSValueNormal) | |
703 validPrimitive = true; | |
704 else | |
705 validPrimitive = validUnit(value, FLength | FUnitlessQuirk); | |
706 break; | |
707 | |
708 case CSSPropertyTextIndent: | 691 case CSSPropertyTextIndent: |
709 parsedValue = parseTextIndent(); | 692 parsedValue = parseTextIndent(); |
710 break; | 693 break; |
711 | 694 |
712 case CSSPropertyPaddingTop: //// <padding-width> | inherit | 695 case CSSPropertyPaddingTop: //// <padding-width> | inherit |
713 case CSSPropertyPaddingRight: // Which is defined as | 696 case CSSPropertyPaddingRight: // Which is defined as |
714 case CSSPropertyPaddingBottom: // <length> | <percentage> | 697 case CSSPropertyPaddingBottom: // <length> | <percentage> |
715 case CSSPropertyPaddingLeft: //// | 698 case CSSPropertyPaddingLeft: //// |
716 unitless = FUnitlessQuirk; | 699 unitless = FUnitlessQuirk; |
717 // fall through | 700 // fall through |
(...skipping 717 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1435 break; | 1418 break; |
1436 | 1419 |
1437 // These were not accepted by the new path above so we should return false. | 1420 // These were not accepted by the new path above so we should return false. |
1438 case CSSPropertyWebkitMarginCollapse: | 1421 case CSSPropertyWebkitMarginCollapse: |
1439 case CSSPropertyWillChange: | 1422 case CSSPropertyWillChange: |
1440 case CSSPropertyPage: | 1423 case CSSPropertyPage: |
1441 case CSSPropertyOverflow: | 1424 case CSSPropertyOverflow: |
1442 case CSSPropertyQuotes: | 1425 case CSSPropertyQuotes: |
1443 case CSSPropertyWebkitHighlight: | 1426 case CSSPropertyWebkitHighlight: |
1444 case CSSPropertyFontVariantLigatures: | 1427 case CSSPropertyFontVariantLigatures: |
| 1428 case CSSPropertyLetterSpacing: |
| 1429 case CSSPropertyWordSpacing: |
| 1430 |
1445 validPrimitive = false; | 1431 validPrimitive = false; |
1446 break; | 1432 break; |
1447 | 1433 |
1448 case CSSPropertyScrollSnapPointsX: | 1434 case CSSPropertyScrollSnapPointsX: |
1449 case CSSPropertyScrollSnapPointsY: | 1435 case CSSPropertyScrollSnapPointsY: |
1450 parsedValue = parseScrollSnapPoints(); | 1436 parsedValue = parseScrollSnapPoints(); |
1451 break; | 1437 break; |
1452 case CSSPropertyScrollSnapCoordinate: | 1438 case CSSPropertyScrollSnapCoordinate: |
1453 parsedValue = parseScrollSnapCoordinate(); | 1439 parsedValue = parseScrollSnapCoordinate(); |
1454 break; | 1440 break; |
(...skipping 6279 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7734 } | 7720 } |
7735 } | 7721 } |
7736 | 7722 |
7737 if (!list->length()) | 7723 if (!list->length()) |
7738 return nullptr; | 7724 return nullptr; |
7739 | 7725 |
7740 return list.release(); | 7726 return list.release(); |
7741 } | 7727 } |
7742 | 7728 |
7743 } // namespace blink | 7729 } // namespace blink |
OLD | NEW |