| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "config.h" | 5 #include "config.h" |
| 6 #include "core/css/parser/CSSPropertyParser.h" | 6 #include "core/css/parser/CSSPropertyParser.h" |
| 7 | 7 |
| 8 #include "core/StylePropertyShorthand.h" | 8 #include "core/StylePropertyShorthand.h" |
| 9 #include "core/css/CSSCalculationValue.h" | 9 #include "core/css/CSSCalculationValue.h" |
| 10 #include "core/css/CSSFontFaceSrcValue.h" | 10 #include "core/css/CSSFontFaceSrcValue.h" |
| (...skipping 165 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 176 if (calculation->category() != CalcNumber || !calculation->isInt()) | 176 if (calculation->category() != CalcNumber || !calculation->isInt()) |
| 177 return nullptr; | 177 return nullptr; |
| 178 double value = calculation->doubleValue(); | 178 double value = calculation->doubleValue(); |
| 179 if (value < minimumValue) | 179 if (value < minimumValue) |
| 180 return nullptr; | 180 return nullptr; |
| 181 return calcParser.consumeNumber(); | 181 return calcParser.consumeNumber(); |
| 182 } | 182 } |
| 183 return nullptr; | 183 return nullptr; |
| 184 } | 184 } |
| 185 | 185 |
| 186 static PassRefPtrWillBeRawPtr<CSSPrimitiveValue> consumeNumber(CSSParserTokenRan
ge& range, ValueRange valueRange) |
| 187 { |
| 188 const CSSParserToken& token = range.peek(); |
| 189 if (token.type() == NumberToken) { |
| 190 if (valueRange == ValueRangeNonNegative && token.numericValue() < 0) |
| 191 return nullptr; |
| 192 return cssValuePool().createValue(range.consumeIncludingWhitespace().num
ericValue(), token.unitType()); |
| 193 } |
| 194 CalcParser calcParser(range, ValueRangeAll); |
| 195 if (const CSSCalcValue* calculation = calcParser.value()) { |
| 196 // TODO(rwlbuis) Calcs should not be subject to parse time range checks. |
| 197 // spec: https://drafts.csswg.org/css-values-3/#calc-range |
| 198 if (calculation->category() != CalcNumber || (valueRange == ValueRangeNo
nNegative && calculation->isNegative())) |
| 199 return nullptr; |
| 200 return calcParser.consumeNumber(); |
| 201 } |
| 202 return nullptr; |
| 203 } |
| 204 |
| 186 inline bool shouldAcceptUnitlessValues(double fValue, CSSParserMode cssParserMod
e, UnitlessQuirk unitless) | 205 inline bool shouldAcceptUnitlessValues(double fValue, CSSParserMode cssParserMod
e, UnitlessQuirk unitless) |
| 187 { | 206 { |
| 188 // Quirks mode for certain properties and presentation attributes accept uni
t-less values for certain units. | 207 // Quirks mode for certain properties and presentation attributes accept uni
t-less values for certain units. |
| 189 return !fValue // 0 can always be unitless. | 208 return !fValue // 0 can always be unitless. |
| 190 || isUnitLessLengthParsingEnabledForMode(cssParserMode) // HTML and SVG
attribute values can always be unitless. | 209 || isUnitLessLengthParsingEnabledForMode(cssParserMode) // HTML and SVG
attribute values can always be unitless. |
| 191 || (cssParserMode == HTMLQuirksMode && (unitless == UnitlessQuirk::Allow
)); | 210 || (cssParserMode == HTMLQuirksMode && (unitless == UnitlessQuirk::Allow
)); |
| 192 } | 211 } |
| 193 | 212 |
| 194 static PassRefPtrWillBeRawPtr<CSSPrimitiveValue> consumeLength(CSSParserTokenRan
ge& range, CSSParserMode cssParserMode, ValueRange valueRange, UnitlessQuirk uni
tless = UnitlessQuirk::Forbid) | 213 static PassRefPtrWillBeRawPtr<CSSPrimitiveValue> consumeLength(CSSParserTokenRan
ge& range, CSSParserMode cssParserMode, ValueRange valueRange, UnitlessQuirk uni
tless = UnitlessQuirk::Forbid) |
| 195 { | 214 { |
| (...skipping 342 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 538 return consumeLength(range, cssParserMode, ValueRangeNonNegative); | 557 return consumeLength(range, cssParserMode, ValueRangeNonNegative); |
| 539 } | 558 } |
| 540 | 559 |
| 541 static PassRefPtrWillBeRawPtr<CSSValue> consumeFontSize(CSSParserTokenRange& ran
ge, CSSParserMode cssParserMode) | 560 static PassRefPtrWillBeRawPtr<CSSValue> consumeFontSize(CSSParserTokenRange& ran
ge, CSSParserMode cssParserMode) |
| 542 { | 561 { |
| 543 if (range.peek().id() >= CSSValueXxSmall && range.peek().id() <= CSSValueLar
ger) | 562 if (range.peek().id() >= CSSValueXxSmall && range.peek().id() <= CSSValueLar
ger) |
| 544 return consumeIdent(range); | 563 return consumeIdent(range); |
| 545 return consumeLengthOrPercent(range, cssParserMode, ValueRangeNonNegative, U
nitlessQuirk::Allow); | 564 return consumeLengthOrPercent(range, cssParserMode, ValueRangeNonNegative, U
nitlessQuirk::Allow); |
| 546 } | 565 } |
| 547 | 566 |
| 567 static PassRefPtrWillBeRawPtr<CSSPrimitiveValue> consumeLineHeight(CSSParserToke
nRange& range, CSSParserMode cssParserMode) |
| 568 { |
| 569 if (range.peek().id() == CSSValueNormal) |
| 570 return consumeIdent(range); |
| 571 |
| 572 RefPtrWillBeRawPtr<CSSPrimitiveValue> lineHeight = consumeNumber(range, Valu
eRangeNonNegative); |
| 573 if (lineHeight) |
| 574 return lineHeight; |
| 575 return consumeLengthOrPercent(range, cssParserMode, ValueRangeNonNegative); |
| 576 } |
| 577 |
| 548 PassRefPtrWillBeRawPtr<CSSValue> CSSPropertyParser::parseSingleValue(CSSProperty
ID propId) | 578 PassRefPtrWillBeRawPtr<CSSValue> CSSPropertyParser::parseSingleValue(CSSProperty
ID propId) |
| 549 { | 579 { |
| 550 m_range.consumeWhitespace(); | 580 m_range.consumeWhitespace(); |
| 551 switch (propId) { | 581 switch (propId) { |
| 552 case CSSPropertyWillChange: | 582 case CSSPropertyWillChange: |
| 553 return consumeWillChange(m_range); | 583 return consumeWillChange(m_range); |
| 554 case CSSPropertyPage: | 584 case CSSPropertyPage: |
| 555 return consumePage(m_range); | 585 return consumePage(m_range); |
| 556 case CSSPropertyQuotes: | 586 case CSSPropertyQuotes: |
| 557 return consumeQuotes(m_range); | 587 return consumeQuotes(m_range); |
| 558 case CSSPropertyWebkitHighlight: | 588 case CSSPropertyWebkitHighlight: |
| 559 return consumeWebkitHighlight(m_range); | 589 return consumeWebkitHighlight(m_range); |
| 560 case CSSPropertyFontVariantLigatures: | 590 case CSSPropertyFontVariantLigatures: |
| 561 return consumeFontVariantLigatures(m_range); | 591 return consumeFontVariantLigatures(m_range); |
| 562 case CSSPropertyWebkitFontFeatureSettings: | 592 case CSSPropertyWebkitFontFeatureSettings: |
| 563 return consumeFontFeatureSettings(m_range); | 593 return consumeFontFeatureSettings(m_range); |
| 564 case CSSPropertyFontVariant: | 594 case CSSPropertyFontVariant: |
| 565 return consumeFontVariant(); | 595 return consumeFontVariant(); |
| 566 case CSSPropertyFontFamily: | 596 case CSSPropertyFontFamily: |
| 567 return consumeFontFamily(m_range); | 597 return consumeFontFamily(m_range); |
| 568 case CSSPropertyFontWeight: | 598 case CSSPropertyFontWeight: |
| 569 return consumeFontWeight(m_range); | 599 return consumeFontWeight(m_range); |
| 570 case CSSPropertyLetterSpacing: | 600 case CSSPropertyLetterSpacing: |
| 571 case CSSPropertyWordSpacing: | 601 case CSSPropertyWordSpacing: |
| 572 return consumeSpacing(m_range, m_context.mode()); | 602 return consumeSpacing(m_range, m_context.mode()); |
| 573 case CSSPropertyTabSize: | 603 case CSSPropertyTabSize: |
| 574 return consumeTabSize(m_range, m_context.mode()); | 604 return consumeTabSize(m_range, m_context.mode()); |
| 575 case CSSPropertyFontSize: | 605 case CSSPropertyFontSize: |
| 576 return consumeFontSize(m_range, m_context.mode()); | 606 return consumeFontSize(m_range, m_context.mode()); |
| 607 case CSSPropertyLineHeight: |
| 608 return consumeLineHeight(m_range, m_context.mode()); |
| 577 default: | 609 default: |
| 578 return nullptr; | 610 return nullptr; |
| 579 } | 611 } |
| 580 } | 612 } |
| 581 | 613 |
| 582 static PassRefPtrWillBeRawPtr<CSSValueList> consumeFontFaceUnicodeRange(CSSParse
rTokenRange& range) | 614 static PassRefPtrWillBeRawPtr<CSSValueList> consumeFontFaceUnicodeRange(CSSParse
rTokenRange& range) |
| 583 { | 615 { |
| 584 RefPtrWillBeRawPtr<CSSValueList> values = CSSValueList::createCommaSeparated
(); | 616 RefPtrWillBeRawPtr<CSSValueList> values = CSSValueList::createCommaSeparated
(); |
| 585 | 617 |
| 586 do { | 618 do { |
| (...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 739 addProperty(CSSPropertyOverflowX, overflowXValue.release(), important); | 771 addProperty(CSSPropertyOverflowX, overflowXValue.release(), important); |
| 740 addProperty(CSSPropertyOverflowY, overflowYValue.release(), important); | 772 addProperty(CSSPropertyOverflowY, overflowYValue.release(), important); |
| 741 return true; | 773 return true; |
| 742 } | 774 } |
| 743 default: | 775 default: |
| 744 return false; | 776 return false; |
| 745 } | 777 } |
| 746 } | 778 } |
| 747 | 779 |
| 748 } // namespace blink | 780 } // namespace blink |
| OLD | NEW |